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: |
* Re: Fwd: error: 'submodule' does not have a commit checked out
  @ 2021-01-11 15:36  7%     ` Philippe Blain
  0 siblings, 0 replies; 43+ results
From: Philippe Blain @ 2021-01-11 15:36 UTC (permalink / raw)
  To: Aleksey Midenkov, Git Mailing List

Hi Aleksey,

Le 2021-01-11 à 09:44, Aleksey Midenkov a écrit :
> I used to update last commit with new changes:
> 
> git commit --amend .
> 
> The project has several submodules:
> 
>   e116c89a58af750421d82ece13f80516d2bde02e extra/wolfssl/wolfssl
> (v4.3.0-stable-596-ge116c89a5)
> a746c3af449a8754e78ad7971e59e79af7957cdb libmariadb (v3.1.3-121-ga746c3a)
> b6b02ed516f92055127d416370799d91a82754ea
> storage/columnstore/columnstore (columnstore-1.5.3-1-14-gb6b02ed5)
> -d172e86c16224b4e0229ca6f102e662a2315aeff storage/maria/libmarias3
> -bba5e7bc21093d7cfa765e1280a7c4fdcd284288 storage/rocksdb/rocksdb
> -ae4e58ba031587039c8830f2f8ca51fa9fb7d6eb wsrep-lib
> 
> Now it fails with this message:
> 
> git commit --amend .
> error: 'storage/maria/libmarias3' does not have a commit checked out
> fatal: updating files failed
> 
> How to use amend without specifying explicit paths without
> initializing submodules? I don't need to amend submodules and would
> prefer them ignored in my commits.
> 
> git --version
> git version 2.27.0
> 
> Works as expected in 2.19.1


I can reproduce the behaviour. It was introduced in f937bc2f86
(add: error appropriately on repository with no commits, 2019-04-09),
in Git 2.22. I think that commit and the rest of that topic,
4ab701b2ee (Merge branch 'km/empty-repo-is-still-a-repo', 2019-05-09),
are sound.

For your use case, if you want to amend the latest commit and include
changes from all tracked files, you can simply do

     git commit --amend --all

or shorter:

     git commit --amend -a

The only difference with what I think you wanted to achieve is that
any *new* files will not be added by '-a', only changes to already tracked
files are included. If you have new files that you also want included, then
you would need to 'git add' them separately.

Reading the doc for 'git commit' [1], it appears that

     git commit --amend --only

would also work if you want to only include changes to files that were
already modified in the commit you are amending. I haven't testes that
though.

Hope that helps,

Philippe.


[1] https://git-scm.com/docs/git-commit

^ permalink raw reply	[relevance 7%]

* Re: git > 2.10.1 fails to update index on macOS 10.14.5
  2020-03-24  1:36  7%   ` Jonathan Smalls
@ 2020-03-24 23:59  0%     ` brian m. carlson
  0 siblings, 0 replies; 43+ results
From: brian m. carlson @ 2020-03-24 23:59 UTC (permalink / raw)
  To: Jonathan Smalls; +Cc: git, Torey Adler - NOAA Federal

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

On 2020-03-24 at 01:36:18, Jonathan Smalls wrote:
> 
> 
> On 3/23/20 19:13, brian m. carlson wrote:
> > What exactly do you mean by "doesn't recognize any file changes"?  Can
> > you tell us what commands you ran and what you expected to see, and what
> > you actually saw?  That information would be helpful for us to track
> > down what might be happening.
> 
> In git-2.22:
> 
> I would write a change to a file. Running `git status` would return that the
> working directory was clean, and `git commit .` would show that there were
> no changes to commit.
> 	However I could target a specific file like `git commit test.txt`, and git
> would successfully recognize the change, and write the commit. I could also
> run `git reset --hard`, and that would update the index to reflect the
> change that I had just written rather than resetting the working directory
> to match the latest commit. If I ran `git reset --hard` a second time, that
> command would reset the working directory.

Does running "ls -l" on the file before and after show different
timestamps and file sizes?  Does "git config -l | grep -iE 'checkstat|ctime'"
show anything?  Can you use the stat(1) command to tell us whether the
change results in a device or inode number change (if that's possible
using the macOS version)?
-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204

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

^ permalink raw reply	[relevance 0%]

* Re: git > 2.10.1 fails to update index on macOS 10.14.5
  2020-03-23 23:13  0% ` brian m. carlson
@ 2020-03-24  1:36  7%   ` Jonathan Smalls
  2020-03-24 23:59  0%     ` brian m. carlson
  0 siblings, 1 reply; 43+ results
From: Jonathan Smalls @ 2020-03-24  1:36 UTC (permalink / raw)
  To: brian m. carlson, git, Torey Adler - NOAA Federal



On 3/23/20 19:13, brian m. carlson wrote:
> What exactly do you mean by "doesn't recognize any file changes"?  Can
> you tell us what commands you ran and what you expected to see, and what
> you actually saw?  That information would be helpful for us to track
> down what might be happening.

In git-2.22:

I would write a change to a file. Running `git status` would return that 
the working directory was clean, and `git commit .` would show that 
there were no changes to commit.
	However I could target a specific file like `git commit test.txt`, and 
git would successfully recognize the change, and write the commit. I 
could also run `git reset --hard`, and that would update the index to 
reflect the change that I had just written rather than resetting the 
working directory to match the latest commit. If I ran `git reset 
--hard` a second time, that command would reset the working directory.

In normal operation, I would expect to `git status` to recognize a 
change in a file once it had already been added to the index. I would 
expect `git commit .` to commit all files in the current directory, and 
subdirectories without having to specify their file names. I would 
expect `git reset --hard` to revert the working directory to match the 
latest commit the first time.

In git-2.25

I would write a change to a file. `git status` would continue to show 
that the working directory was clean, but I was not longer able to 
target a particular file to force a commit. `git reset --hard` had no 
effect, and still showed that the working directory was clean without 
resetting the working directory.
	To successfully commit a file I would have to run `git rm --cached 
test.txt` to target a file, and then `git add test.txt` for git to 
update its index, and recognize the change.

I would expect the same normal operation in git-2.25.

> 
> Also, are you using any specific workflow or tool that might be related?
> Are you using an editor integration or GUI, and if so, does this happen
> without that editor integration or GUI as well?

I use git on the command line, so there should be no external 
interference with its normal function.

^ permalink raw reply	[relevance 7%]

* Re: git > 2.10.1 fails to update index on macOS 10.14.5
  2020-03-23 14:37  8% git > 2.10.1 fails to update index on macOS 10.14.5 Jonathan Smalls
@ 2020-03-23 23:13  0% ` brian m. carlson
  2020-03-24  1:36  7%   ` Jonathan Smalls
  0 siblings, 1 reply; 43+ results
From: brian m. carlson @ 2020-03-23 23:13 UTC (permalink / raw)
  To: Jonathan Smalls; +Cc: git, Torey Adler - NOAA Federal

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

On 2020-03-23 at 14:37:30, Jonathan Smalls wrote:
> After upgrading my work station, I found in git-2.22 that git would not
> recognize any file changes until I ran  `git reset --hard`. I thought that
> it was a problem with my own settings.
> 	However I upgraded to git-2.25, and the problem actually got worse. In 2.25
> the index still failed to update, but `git reset --hard` no longer had any
> effect.

I have a bunch of colleagues who use the latest Git on macOS, so I
expect it does work most of the time.  Let's see if we can figure out
what's going on here.

What exactly do you mean by "doesn't recognize any file changes"?  Can
you tell us what commands you ran and what you expected to see, and what
you actually saw?  That information would be helpful for us to track
down what might be happening.

Also, are you using any specific workflow or tool that might be related?
Are you using an editor integration or GUI, and if so, does this happen
without that editor integration or GUI as well?
-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204

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

^ permalink raw reply	[relevance 0%]

* git > 2.10.1 fails to update index on macOS 10.14.5
@ 2020-03-23 14:37  8% Jonathan Smalls
  2020-03-23 23:13  0% ` brian m. carlson
  0 siblings, 1 reply; 43+ results
From: Jonathan Smalls @ 2020-03-23 14:37 UTC (permalink / raw)
  To: git; +Cc: Torey Adler - NOAA Federal

After upgrading my work station, I found in git-2.22 that git would not 
recognize any file changes until I ran  `git reset --hard`. I thought 
that it was a problem with my own settings.
	However I upgraded to git-2.25, and the problem actually got worse. In 
2.25 the index still failed to update, but `git reset --hard` no longer 
had any effect.

I have not looked to find exactly where the breaking change was 
introduced, but I have since downgraded to git-2.10.1 and now get the 
expected behavior.
-- 
http://jon.smalls.rocks
857 301 9231

^ permalink raw reply	[relevance 8%]

* Re: [PATCH 2/2] stash: remove the stash.useBuiltin setting
       [not found]           ` <CA+P7+xqVyMnG6FiyL4hngPfEEMi5CKz1qN5Cy1TMMpLg3CmsBw@mail.gmail.com>
@ 2020-03-06 17:29  0%         ` Thomas Gummerer
  0 siblings, 0 replies; 43+ results
From: Thomas Gummerer @ 2020-03-06 17:29 UTC (permalink / raw)
  To: Jacob Keller
  Cc: Junio C Hamano, Son Luong Ngoc, git, Johannes Schindelin,
	Paul-Sebastian Ungureanu

On 03/05, Jacob Keller wrote:
> Sorry this is on phone and might not hit the list since Gmail forces
> html.... but the docs say git-rebase when you meant git-stash.

Embarrassing, thanks for noticing it!

> I didn't want to forget this before I got to a desktop
> 
> On Mon, Mar 2, 2020, 10:20 AM Thomas Gummerer <t.gummerer@gmail.com> wrote:
> 
> > Remove the stash.useBuiltin setting which was added as an escape hatch
> > to disable the builtin version of stash first released with Git 2.22.
> >
> > Carrying the legacy version is a maintenance burden, and has in fact
> > become out of date failing a test since the 2.23 release, without
> > anyone noticing until now.  So users would be getting a hint to fall
> > back to a potentially buggy version of the tool.
> >
> > We used to shell out to git config to get the useBuiltin configuration
> > to avoid changing any global state before spawning legacy-stash.
> > However that is no longer necessary, so just use the 'git_config'
> > function to get the setting instead.
> >
> > Similar to what we've done in d03ebd411c ("rebase: remove the
> > rebase.useBuiltin setting", 2019-03-18), where we remove the
> > corresponding setting for rebase, we leave the documentation in place,
> > so people can refer back to it when searching for it online, and so we
> > can refer to it in the commit message.
> >
> > Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
> > ---
> >  .gitignore                     |   1 -
> >  Documentation/config/stash.txt |  18 +-
> >  Makefile                       |   1 -
> >  builtin/stash.c                |  44 +-
> >  git-legacy-stash.sh            | 798 ---------------------------------
> >  t/README                       |   4 -
> >  t/t3903-stash.sh               |  14 +
> >  7 files changed, 30 insertions(+), 850 deletions(-)
> >  delete mode 100755 git-legacy-stash.sh
> >
> > diff --git a/.gitignore b/.gitignore
> > index aebe7c0908..188bd1c3de 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -83,7 +83,6 @@
> >  /git-init-db
> >  /git-interpret-trailers
> >  /git-instaweb
> > -/git-legacy-stash
> >  /git-log
> >  /git-ls-files
> >  /git-ls-remote
> > diff --git a/Documentation/config/stash.txt
> > b/Documentation/config/stash.txt
> > index abc7ef4a3a..0f3db821f6 100644
> > --- a/Documentation/config/stash.txt
> > +++ b/Documentation/config/stash.txt
> > @@ -1,17 +1,9 @@
> >  stash.useBuiltin::
> > -       Set to `false` to use the legacy shell script implementation of
> > -       linkgit:git-stash[1]. Is `true` by default, which means use
> > -       the built-in rewrite of it in C.
> > -+
> > -The C rewrite is first included with Git version 2.22 (and Git for Windows
> > -version 2.19). This option serves as an escape hatch to re-enable the
> > -legacy version in case any bugs are found in the rewrite. This option and
> > -the shell script version of linkgit:git-stash[1] will be removed in some
> > -future release.
> > -+
> > -If you find some reason to set this option to `false`, other than
> > -one-off testing, you should report the behavior difference as a bug in
> > -Git (see https://git-scm.com/community for details).
> > +       Unused configuration Variable.  Used in Git versions 2.22 to
> > +       2.26 as an escape hatch to enable the legacy shellscript
> > +       implementation of rebase. Now the built-in rewrite of it in C
> > +       is always used. Setting this will emit a warning, to alert any
> > +       remaining users that setting this now does nothing.
> >
> >  stash.showPatch::
> >         If this is set to true, the `git stash show` command without an
> > diff --git a/Makefile b/Makefile
> > index 9804a0758b..096c6d1fbb 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -609,7 +609,6 @@ SCRIPT_SH += git-merge-one-file.sh
> >  SCRIPT_SH += git-merge-resolve.sh
> >  SCRIPT_SH += git-mergetool.sh
> >  SCRIPT_SH += git-quiltimport.sh
> > -SCRIPT_SH += git-legacy-stash.sh
> >  SCRIPT_SH += git-request-pull.sh
> >  SCRIPT_SH += git-submodule.sh
> >  SCRIPT_SH += git-web--browse.sh
> > diff --git a/builtin/stash.c b/builtin/stash.c
> > index f371db270c..5f4bd693df 100644
> > --- a/builtin/stash.c
> > +++ b/builtin/stash.c
> > @@ -701,6 +701,7 @@ static int list_stash(int argc, const char **argv,
> > const char *prefix)
> >
> >  static int show_stat = 1;
> >  static int show_patch;
> > +static int use_legacy_stash;
> >
> >  static int git_stash_config(const char *var, const char *value, void *cb)
> >  {
> > @@ -712,6 +713,10 @@ static int git_stash_config(const char *var, const
> > char *value, void *cb)
> >                 show_patch = git_config_bool(var, value);
> >                 return 0;
> >         }
> > +       if (!strcmp(var, "stash.usebuiltin")) {
> > +               use_legacy_stash = !git_config_bool(var, value);
> > +               return 0;
> > +       }
> >         return git_diff_basic_config(var, value, cb);
> >  }
> >
> > @@ -1524,29 +1529,6 @@ static int save_stash(int argc, const char **argv,
> > const char *prefix)
> >         return ret;
> >  }
> >
> > -static int use_builtin_stash(void)
> > -{
> > -       struct child_process cp = CHILD_PROCESS_INIT;
> > -       struct strbuf out = STRBUF_INIT;
> > -       int ret, env = git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1);
> > -
> > -       if (env != -1)
> > -               return env;
> > -
> > -       argv_array_pushl(&cp.args,
> > -                        "config", "--bool", "stash.usebuiltin", NULL);
> > -       cp.git_cmd = 1;
> > -       if (capture_command(&cp, &out, 6)) {
> > -               strbuf_release(&out);
> > -               return 1;
> > -       }
> > -
> > -       strbuf_trim(&out);
> > -       ret = !strcmp("true", out.buf);
> > -       strbuf_release(&out);
> > -       return ret;
> > -}
> > -
> >  int cmd_stash(int argc, const char **argv, const char *prefix)
> >  {
> >         int i = -1;
> > @@ -1558,22 +1540,18 @@ int cmd_stash(int argc, const char **argv, const
> > char *prefix)
> >                 OPT_END()
> >         };
> >
> > -       if (!use_builtin_stash()) {
> > -               const char *path = mkpath("%s/git-legacy-stash",
> > -                                         git_exec_path());
> > -
> > -               if (sane_execvp(path, (char **)argv) < 0)
> > -                       die_errno(_("could not exec %s"), path);
> > -               else
> > -                       BUG("sane_execvp() returned???");
> > -       }
> > -
> >         prefix = setup_git_directory();
> >         trace_repo_setup(prefix);
> >         setup_work_tree();
> >
> >         git_config(git_stash_config, NULL);
> >
> > +       if (use_legacy_stash ||
> > +           !git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1))
> > +               warning(_("the stash.useBuiltin support has been
> > removed!\n"
> > +                         "See its entry in 'git help config' for
> > details."));
> > +
> > +
> >         argc = parse_options(argc, argv, prefix, options, git_stash_usage,
> >                              PARSE_OPT_KEEP_UNKNOWN |
> > PARSE_OPT_KEEP_DASHDASH);
> >
> > diff --git a/git-legacy-stash.sh b/git-legacy-stash.sh
> > deleted file mode 100755
> > index 4d4ebb4f2b..0000000000
> > --- a/git-legacy-stash.sh
> > +++ /dev/null
> > @@ -1,798 +0,0 @@
> > -#!/bin/sh
> > -# Copyright (c) 2007, Nanako Shiraishi
> > -
> > -dashless=$(basename "$0" | sed -e 's/-/ /')
> > -USAGE="list [<options>]
> > -   or: $dashless show [<stash>]
> > -   or: $dashless drop [-q|--quiet] [<stash>]
> > -   or: $dashless ( pop | apply ) [--index] [-q|--quiet] [<stash>]
> > -   or: $dashless branch <branchname> [<stash>]
> > -   or: $dashless save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
> > -                     [-u|--include-untracked] [-a|--all] [<message>]
> > -   or: $dashless [push [--patch] [-k|--[no-]keep-index] [-q|--quiet]
> > -                      [-u|--include-untracked] [-a|--all] [-m <message>]
> > -                      [-- <pathspec>...]]
> > -   or: $dashless clear"
> > -
> > -SUBDIRECTORY_OK=Yes
> > -OPTIONS_SPEC=
> > -START_DIR=$(pwd)
> > -. git-sh-setup
> > -require_work_tree
> > -prefix=$(git rev-parse --show-prefix) || exit 1
> > -cd_to_toplevel
> > -
> > -TMP="$GIT_DIR/.git-stash.$$"
> > -TMPindex=${GIT_INDEX_FILE-"$(git rev-parse --git-path index)"}.stash.$$
> > -trap 'rm -f "$TMP-"* "$TMPindex"' 0
> > -
> > -ref_stash=refs/stash
> > -
> > -if git config --get-colorbool color.interactive; then
> > -       help_color="$(git config --get-color color.interactive.help 'red
> > bold')"
> > -       reset_color="$(git config --get-color '' reset)"
> > -else
> > -       help_color=
> > -       reset_color=
> > -fi
> > -
> > -no_changes () {
> > -       git diff-index --quiet --cached HEAD --ignore-submodules -- "$@" &&
> > -       git diff-files --quiet --ignore-submodules -- "$@" &&
> > -       (test -z "$untracked" || test -z "$(untracked_files "$@")")
> > -}
> > -
> > -untracked_files () {
> > -       if test "$1" = "-z"
> > -       then
> > -               shift
> > -               z=-z
> > -       else
> > -               z=
> > -       fi
> > -       excl_opt=--exclude-standard
> > -       test "$untracked" = "all" && excl_opt=
> > -       git ls-files -o $z $excl_opt -- "$@"
> > -}
> > -
> > -prepare_fallback_ident () {
> > -       if ! git -c user.useconfigonly=yes var GIT_COMMITTER_IDENT
> > >/dev/null 2>&1
> > -       then
> > -               GIT_AUTHOR_NAME="git stash"
> > -               GIT_AUTHOR_EMAIL=git@stash
> > -               GIT_COMMITTER_NAME="git stash"
> > -               GIT_COMMITTER_EMAIL=git@stash
> > -               export GIT_AUTHOR_NAME
> > -               export GIT_AUTHOR_EMAIL
> > -               export GIT_COMMITTER_NAME
> > -               export GIT_COMMITTER_EMAIL
> > -       fi
> > -}
> > -
> > -clear_stash () {
> > -       if test $# != 0
> > -       then
> > -               die "$(gettext "git stash clear with parameters is
> > unimplemented")"
> > -       fi
> > -       if current=$(git rev-parse --verify --quiet $ref_stash)
> > -       then
> > -               git update-ref -d $ref_stash $current
> > -       fi
> > -}
> > -
> > -maybe_quiet () {
> > -       case "$1" in
> > -       --keep-stdout)
> > -               shift
> > -               if test -n "$GIT_QUIET"
> > -               then
> > -                       "$@" 2>/dev/null
> > -               else
> > -                       "$@"
> > -               fi
> > -               ;;
> > -       *)
> > -               if test -n "$GIT_QUIET"
> > -               then
> > -                       "$@" >/dev/null 2>&1
> > -               else
> > -                       "$@"
> > -               fi
> > -               ;;
> > -       esac
> > -}
> > -
> > -create_stash () {
> > -
> > -       prepare_fallback_ident
> > -
> > -       stash_msg=
> > -       untracked=
> > -       while test $# != 0
> > -       do
> > -               case "$1" in
> > -               -m|--message)
> > -                       shift
> > -                       stash_msg=${1?"BUG: create_stash () -m requires an
> > argument"}
> > -                       ;;
> > -               -m*)
> > -                       stash_msg=${1#-m}
> > -                       ;;
> > -               --message=*)
> > -                       stash_msg=${1#--message=}
> > -                       ;;
> > -               -u|--include-untracked)
> > -                       shift
> > -                       untracked=${1?"BUG: create_stash () -u requires an
> > argument"}
> > -                       ;;
> > -               --)
> > -                       shift
> > -                       break
> > -                       ;;
> > -               esac
> > -               shift
> > -       done
> > -
> > -       git update-index -q --refresh
> > -       if maybe_quiet no_changes "$@"
> > -       then
> > -               exit 0
> > -       fi
> > -
> > -       # state of the base commit
> > -       if b_commit=$(maybe_quiet --keep-stdout git rev-parse --verify
> > HEAD)
> > -       then
> > -               head=$(git rev-list --oneline -n 1 HEAD --)
> > -       elif test -n "$GIT_QUIET"
> > -       then
> > -               exit 1
> > -       else
> > -               die "$(gettext "You do not have the initial commit yet")"
> > -       fi
> > -
> > -       if branch=$(git symbolic-ref -q HEAD)
> > -       then
> > -               branch=${branch#refs/heads/}
> > -       else
> > -               branch='(no branch)'
> > -       fi
> > -       msg=$(printf '%s: %s' "$branch" "$head")
> > -
> > -       # state of the index
> > -       i_tree=$(git write-tree) &&
> > -       i_commit=$(printf 'index on %s\n' "$msg" |
> > -               git commit-tree $i_tree -p $b_commit) ||
> > -               die "$(gettext "Cannot save the current index state")"
> > -
> > -       if test -n "$untracked"
> > -       then
> > -               # Untracked files are stored by themselves in a parentless
> > commit, for
> > -               # ease of unpacking later.
> > -               u_commit=$(
> > -                       untracked_files -z "$@" | (
> > -                               GIT_INDEX_FILE="$TMPindex" &&
> > -                               export GIT_INDEX_FILE &&
> > -                               rm -f "$TMPindex" &&
> > -                               git update-index -z --add --remove --stdin
> > &&
> > -                               u_tree=$(git write-tree) &&
> > -                               printf 'untracked files on %s\n' "$msg" |
> > git commit-tree $u_tree  &&
> > -                               rm -f "$TMPindex"
> > -               ) ) || die "$(gettext "Cannot save the untracked files")"
> > -
> > -               untracked_commit_option="-p $u_commit";
> > -       else
> > -               untracked_commit_option=
> > -       fi
> > -
> > -       if test -z "$patch_mode"
> > -       then
> > -
> > -               # state of the working tree
> > -               w_tree=$( (
> > -                       git read-tree --index-output="$TMPindex" -m
> > $i_tree &&
> > -                       GIT_INDEX_FILE="$TMPindex" &&
> > -                       export GIT_INDEX_FILE &&
> > -                       git diff-index --name-only -z HEAD -- "$@"
> > >"$TMP-stagenames" &&
> > -                       git update-index --ignore-skip-worktree-entries \
> > -                               -z --add --remove --stdin
> > <"$TMP-stagenames" &&
> > -                       git write-tree &&
> > -                       rm -f "$TMPindex"
> > -               ) ) ||
> > -                       die "$(gettext "Cannot save the current worktree
> > state")"
> > -
> > -       else
> > -
> > -               rm -f "$TMP-index" &&
> > -               GIT_INDEX_FILE="$TMP-index" git read-tree HEAD &&
> > -
> > -               # find out what the user wants
> > -               GIT_INDEX_FILE="$TMP-index" \
> > -                       git add --legacy-stash-p -- "$@" &&
> > -
> > -               # state of the working tree
> > -               w_tree=$(GIT_INDEX_FILE="$TMP-index" git write-tree) ||
> > -               die "$(gettext "Cannot save the current worktree state")"
> > -
> > -               git diff-tree -p HEAD $w_tree -- >"$TMP-patch" &&
> > -               test -s "$TMP-patch" ||
> > -               die "$(gettext "No changes selected")"
> > -
> > -               rm -f "$TMP-index" ||
> > -               die "$(gettext "Cannot remove temporary index (can't
> > happen)")"
> > -
> > -       fi
> > -
> > -       # create the stash
> > -       if test -z "$stash_msg"
> > -       then
> > -               stash_msg=$(printf 'WIP on %s' "$msg")
> > -       else
> > -               stash_msg=$(printf 'On %s: %s' "$branch" "$stash_msg")
> > -       fi
> > -       w_commit=$(printf '%s\n' "$stash_msg" |
> > -       git commit-tree $w_tree -p $b_commit -p $i_commit
> > $untracked_commit_option) ||
> > -       die "$(gettext "Cannot record working tree state")"
> > -}
> > -
> > -store_stash () {
> > -       while test $# != 0
> > -       do
> > -               case "$1" in
> > -               -m|--message)
> > -                       shift
> > -                       stash_msg="$1"
> > -                       ;;
> > -               -m*)
> > -                       stash_msg=${1#-m}
> > -                       ;;
> > -               --message=*)
> > -                       stash_msg=${1#--message=}
> > -                       ;;
> > -               -q|--quiet)
> > -                       quiet=t
> > -                       ;;
> > -               *)
> > -                       break
> > -                       ;;
> > -               esac
> > -               shift
> > -       done
> > -       test $# = 1 ||
> > -       die "$(eval_gettext "\"$dashless store\" requires one <commit>
> > argument")"
> > -
> > -       w_commit="$1"
> > -       if test -z "$stash_msg"
> > -       then
> > -               stash_msg="Created via \"git stash store\"."
> > -       fi
> > -
> > -       git update-ref --create-reflog -m "$stash_msg" $ref_stash $w_commit
> > -       ret=$?
> > -       test $ret != 0 && test -z "$quiet" &&
> > -       die "$(eval_gettext "Cannot update \$ref_stash with \$w_commit")"
> > -       return $ret
> > -}
> > -
> > -push_stash () {
> > -       keep_index=
> > -       patch_mode=
> > -       untracked=
> > -       stash_msg=
> > -       while test $# != 0
> > -       do
> > -               case "$1" in
> > -               -k|--keep-index)
> > -                       keep_index=t
> > -                       ;;
> > -               --no-keep-index)
> > -                       keep_index=n
> > -                       ;;
> > -               -p|--patch)
> > -                       patch_mode=t
> > -                       # only default to keep if we don't already have an
> > override
> > -                       test -z "$keep_index" && keep_index=t
> > -                       ;;
> > -               -q|--quiet)
> > -                       GIT_QUIET=t
> > -                       ;;
> > -               -u|--include-untracked)
> > -                       untracked=untracked
> > -                       ;;
> > -               -a|--all)
> > -                       untracked=all
> > -                       ;;
> > -               -m|--message)
> > -                       shift
> > -                       test -z ${1+x} && usage
> > -                       stash_msg=$1
> > -                       ;;
> > -               -m*)
> > -                       stash_msg=${1#-m}
> > -                       ;;
> > -               --message=*)
> > -                       stash_msg=${1#--message=}
> > -                       ;;
> > -               --help)
> > -                       show_help
> > -                       ;;
> > -               --)
> > -                       shift
> > -                       break
> > -                       ;;
> > -               -*)
> > -                       option="$1"
> > -                       eval_gettextln "error: unknown option for 'stash
> > push': \$option"
> > -                       usage
> > -                       ;;
> > -               *)
> > -                       break
> > -                       ;;
> > -               esac
> > -               shift
> > -       done
> > -
> > -       eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
> > -
> > -       if test -n "$patch_mode" && test -n "$untracked"
> > -       then
> > -               die "$(gettext "Can't use --patch and --include-untracked
> > or --all at the same time")"
> > -       fi
> > -
> > -       test -n "$untracked" || git ls-files --error-unmatch -- "$@"
> > >/dev/null || exit 1
> > -
> > -       git update-index -q --refresh
> > -       if maybe_quiet no_changes "$@"
> > -       then
> > -               say "$(gettext "No local changes to save")"
> > -               exit 0
> > -       fi
> > -
> > -       git reflog exists $ref_stash ||
> > -               clear_stash || die "$(gettext "Cannot initialize stash")"
> > -
> > -       create_stash -m "$stash_msg" -u "$untracked" -- "$@"
> > -       store_stash -m "$stash_msg" -q $w_commit ||
> > -       die "$(gettext "Cannot save the current status")"
> > -       say "$(eval_gettext "Saved working directory and index state
> > \$stash_msg")"
> > -
> > -       if test -z "$patch_mode"
> > -       then
> > -               test "$untracked" = "all" && CLEAN_X_OPTION=-x ||
> > CLEAN_X_OPTION=
> > -               if test -n "$untracked" && test $# = 0
> > -               then
> > -                       git clean --force --quiet -d $CLEAN_X_OPTION
> > -               fi
> > -
> > -               if test $# != 0
> > -               then
> > -                       test -z "$untracked" && UPDATE_OPTION="-u" ||
> > UPDATE_OPTION=
> > -                       test "$untracked" = "all" &&
> > FORCE_OPTION="--force" || FORCE_OPTION=
> > -                       git add $UPDATE_OPTION $FORCE_OPTION -- "$@"
> > -                       git diff-index -p --cached --binary HEAD -- "$@" |
> > -                       git apply --index -R
> > -               else
> > -                       git reset --hard -q --no-recurse-submodules
> > -               fi
> > -
> > -               if test "$keep_index" = "t" && test -n "$i_tree"
> > -               then
> > -                       git read-tree --reset $i_tree
> > -                       git ls-files -z --modified -- "$@" |
> > -                       git checkout-index -z --force --stdin
> > -               fi
> > -       else
> > -               git apply -R < "$TMP-patch" ||
> > -               die "$(gettext "Cannot remove worktree changes")"
> > -
> > -               if test "$keep_index" != "t"
> > -               then
> > -                       git reset -q -- "$@"
> > -               fi
> > -       fi
> > -}
> > -
> > -save_stash () {
> > -       push_options=
> > -       while test $# != 0
> > -       do
> > -               case "$1" in
> > -               -q|--quiet)
> > -                       GIT_QUIET=t
> > -                       ;;
> > -               --)
> > -                       shift
> > -                       break
> > -                       ;;
> > -               -*)
> > -                       # pass all options through to push_stash
> > -                       push_options="$push_options $1"
> > -                       ;;
> > -               *)
> > -                       break
> > -                       ;;
> > -               esac
> > -               shift
> > -       done
> > -
> > -       stash_msg="$*"
> > -
> > -       if test -z "$stash_msg"
> > -       then
> > -               push_stash $push_options
> > -       else
> > -               push_stash $push_options -m "$stash_msg"
> > -       fi
> > -}
> > -
> > -have_stash () {
> > -       git rev-parse --verify --quiet $ref_stash >/dev/null
> > -}
> > -
> > -list_stash () {
> > -       have_stash || return 0
> > -       git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash --
> > -}
> > -
> > -show_stash () {
> > -       ALLOW_UNKNOWN_FLAGS=t
> > -       assert_stash_like "$@"
> > -
> > -       if test -z "$FLAGS"
> > -       then
> > -               if test "$(git config --bool stash.showStat || echo true)"
> > = "true"
> > -               then
> > -                       FLAGS=--stat
> > -               fi
> > -
> > -               if test "$(git config --bool stash.showPatch || echo
> > false)" = "true"
> > -               then
> > -                       FLAGS=${FLAGS}${FLAGS:+ }-p
> > -               fi
> > -
> > -               if test -z "$FLAGS"
> > -               then
> > -                       return 0
> > -               fi
> > -       fi
> > -
> > -       git diff ${FLAGS} $b_commit $w_commit
> > -}
> > -
> > -show_help () {
> > -       exec git help stash
> > -       exit 1
> > -}
> > -
> > -#
> > -# Parses the remaining options looking for flags and
> > -# at most one revision defaulting to ${ref_stash}@{0}
> > -# if none found.
> > -#
> > -# Derives related tree and commit objects from the
> > -# revision, if one is found.
> > -#
> > -# stash records the work tree, and is a merge between the
> > -# base commit (first parent) and the index tree (second parent).
> > -#
> > -#   REV is set to the symbolic version of the specified stash-like commit
> > -#   IS_STASH_LIKE is non-blank if ${REV} looks like a stash
> > -#   IS_STASH_REF is non-blank if the ${REV} looks like a stash ref
> > -#   s is set to the SHA1 of the stash commit
> > -#   w_commit is set to the commit containing the working tree
> > -#   b_commit is set to the base commit
> > -#   i_commit is set to the commit containing the index tree
> > -#   u_commit is set to the commit containing the untracked files tree
> > -#   w_tree is set to the working tree
> > -#   b_tree is set to the base tree
> > -#   i_tree is set to the index tree
> > -#   u_tree is set to the untracked files tree
> > -#
> > -#   GIT_QUIET is set to t if -q is specified
> > -#   INDEX_OPTION is set to --index if --index is specified.
> > -#   FLAGS is set to the remaining flags (if allowed)
> > -#
> > -# dies if:
> > -#   * too many revisions specified
> > -#   * no revision is specified and there is no stash stack
> > -#   * a revision is specified which cannot be resolve to a SHA1
> > -#   * a non-existent stash reference is specified
> > -#   * unknown flags were set and ALLOW_UNKNOWN_FLAGS is not "t"
> > -#
> > -
> > -parse_flags_and_rev()
> > -{
> > -       test "$PARSE_CACHE" = "$*" && return 0 # optimisation
> > -       PARSE_CACHE="$*"
> > -
> > -       IS_STASH_LIKE=
> > -       IS_STASH_REF=
> > -       INDEX_OPTION=
> > -       s=
> > -       w_commit=
> > -       b_commit=
> > -       i_commit=
> > -       u_commit=
> > -       w_tree=
> > -       b_tree=
> > -       i_tree=
> > -       u_tree=
> > -
> > -       FLAGS=
> > -       REV=
> > -       for opt
> > -       do
> > -               case "$opt" in
> > -                       -q|--quiet)
> > -                               GIT_QUIET=-t
> > -                       ;;
> > -                       --index)
> > -                               INDEX_OPTION=--index
> > -                       ;;
> > -                       --help)
> > -                               show_help
> > -                       ;;
> > -                       -*)
> > -                               test "$ALLOW_UNKNOWN_FLAGS" = t ||
> > -                                       die "$(eval_gettext "unknown
> > option: \$opt")"
> > -                               FLAGS="${FLAGS}${FLAGS:+ }$opt"
> > -                       ;;
> > -                       *)
> > -                               REV="${REV}${REV:+ }'$opt'"
> > -                       ;;
> > -               esac
> > -       done
> > -
> > -       eval set -- $REV
> > -
> > -       case $# in
> > -               0)
> > -                       have_stash || die "$(gettext "No stash entries
> > found.")"
> > -                       set -- ${ref_stash}@{0}
> > -               ;;
> > -               1)
> > -                       :
> > -               ;;
> > -               *)
> > -                       die "$(eval_gettext "Too many revisions specified:
> > \$REV")"
> > -               ;;
> > -       esac
> > -
> > -       case "$1" in
> > -               *[!0-9]*)
> > -                       :
> > -               ;;
> > -               *)
> > -                       set -- "${ref_stash}@{$1}"
> > -               ;;
> > -       esac
> > -
> > -       REV=$(git rev-parse --symbolic --verify --quiet "$1") || {
> > -               reference="$1"
> > -               die "$(eval_gettext "\$reference is not a valid
> > reference")"
> > -       }
> > -
> > -       i_commit=$(git rev-parse --verify --quiet "$REV^2") &&
> > -       set -- $(git rev-parse "$REV" "$REV^1" "$REV:" "$REV^1:" "$REV^2:"
> > 2>/dev/null) &&
> > -       s=$1 &&
> > -       w_commit=$1 &&
> > -       b_commit=$2 &&
> > -       w_tree=$3 &&
> > -       b_tree=$4 &&
> > -       i_tree=$5 &&
> > -       IS_STASH_LIKE=t &&
> > -       test "$ref_stash" = "$(git rev-parse --symbolic-full-name "${REV%@*}")"
> > &&
> > -       IS_STASH_REF=t
> > -
> > -       u_commit=$(git rev-parse --verify --quiet "$REV^3") &&
> > -       u_tree=$(git rev-parse "$REV^3:" 2>/dev/null)
> > -}
> > -
> > -is_stash_like()
> > -{
> > -       parse_flags_and_rev "$@"
> > -       test -n "$IS_STASH_LIKE"
> > -}
> > -
> > -assert_stash_like() {
> > -       is_stash_like "$@" || {
> > -               args="$*"
> > -               die "$(eval_gettext "'\$args' is not a stash-like commit")"
> > -       }
> > -}
> > -
> > -is_stash_ref() {
> > -       is_stash_like "$@" && test -n "$IS_STASH_REF"
> > -}
> > -
> > -assert_stash_ref() {
> > -       is_stash_ref "$@" || {
> > -               args="$*"
> > -               die "$(eval_gettext "'\$args' is not a stash reference")"
> > -       }
> > -}
> > -
> > -apply_stash () {
> > -
> > -       assert_stash_like "$@"
> > -
> > -       git update-index -q --refresh || die "$(gettext "unable to refresh
> > index")"
> > -
> > -       # current index state
> > -       c_tree=$(git write-tree) ||
> > -               die "$(gettext "Cannot apply a stash in the middle of a
> > merge")"
> > -
> > -       unstashed_index_tree=
> > -       if test -n "$INDEX_OPTION" && test "$b_tree" != "$i_tree" &&
> > -                       test "$c_tree" != "$i_tree"
> > -       then
> > -               git diff-tree --binary $s^2^..$s^2 | git apply --cached
> > -               test $? -ne 0 &&
> > -                       die "$(gettext "Conflicts in index. Try without
> > --index.")"
> > -               unstashed_index_tree=$(git write-tree) ||
> > -                       die "$(gettext "Could not save index tree")"
> > -               git reset
> > -       fi
> > -
> > -       if test -n "$u_tree"
> > -       then
> > -               GIT_INDEX_FILE="$TMPindex" git read-tree "$u_tree" &&
> > -               GIT_INDEX_FILE="$TMPindex" git checkout-index --all &&
> > -               rm -f "$TMPindex" ||
> > -               die "$(gettext "Could not restore untracked files from
> > stash entry")"
> > -       fi
> > -
> > -       eval "
> > -               GITHEAD_$w_tree='Stashed changes' &&
> > -               GITHEAD_$c_tree='Updated upstream' &&
> > -               GITHEAD_$b_tree='Version stash was based on' &&
> > -               export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree
> > -       "
> > -
> > -       if test -n "$GIT_QUIET"
> > -       then
> > -               GIT_MERGE_VERBOSITY=0 && export GIT_MERGE_VERBOSITY
> > -       fi
> > -       if git merge-recursive $b_tree -- $c_tree $w_tree
> > -       then
> > -               # No conflict
> > -               if test -n "$unstashed_index_tree"
> > -               then
> > -                       git read-tree "$unstashed_index_tree"
> > -               else
> > -                       a="$TMP-added" &&
> > -                       git diff-index --cached --name-only
> > --diff-filter=A $c_tree >"$a" &&
> > -                       git read-tree --reset $c_tree &&
> > -                       git update-index --add --stdin <"$a" ||
> > -                               die "$(gettext "Cannot unstage modified
> > files")"
> > -                       rm -f "$a"
> > -               fi
> > -               squelch=
> > -               if test -n "$GIT_QUIET"
> > -               then
> > -                       squelch='>/dev/null 2>&1'
> > -               fi
> > -               (cd "$START_DIR" && eval "git status $squelch") || :
> > -       else
> > -               # Merge conflict; keep the exit status from merge-recursive
> > -               status=$?
> > -               git rerere
> > -               if test -n "$INDEX_OPTION"
> > -               then
> > -                       gettextln "Index was not unstashed." >&2
> > -               fi
> > -               exit $status
> > -       fi
> > -}
> > -
> > -pop_stash() {
> > -       assert_stash_ref "$@"
> > -
> > -       if apply_stash "$@"
> > -       then
> > -               drop_stash "$@"
> > -       else
> > -               status=$?
> > -               say "$(gettext "The stash entry is kept in case you need
> > it again.")"
> > -               exit $status
> > -       fi
> > -}
> > -
> > -drop_stash () {
> > -       assert_stash_ref "$@"
> > -
> > -       git reflog delete --updateref --rewrite "${REV}" &&
> > -               say "$(eval_gettext "Dropped \${REV} (\$s)")" ||
> > -               die "$(eval_gettext "\${REV}: Could not drop stash entry")"
> > -
> > -       # clear_stash if we just dropped the last stash entry
> > -       git rev-parse --verify --quiet "$ref_stash@{0}" >/dev/null ||
> > -       clear_stash
> > -}
> > -
> > -apply_to_branch () {
> > -       test -n "$1" || die "$(gettext "No branch name specified")"
> > -       branch=$1
> > -       shift 1
> > -
> > -       set -- --index "$@"
> > -       assert_stash_like "$@"
> > -
> > -       git checkout -b $branch $REV^ &&
> > -       apply_stash "$@" && {
> > -               test -z "$IS_STASH_REF" || drop_stash "$@"
> > -       }
> > -}
> > -
> > -test "$1" = "-p" && set "push" "$@"
> > -
> > -PARSE_CACHE='--not-parsed'
> > -# The default command is "push" if nothing but options are given
> > -seen_non_option=
> > -for opt
> > -do
> > -       case "$opt" in
> > -       --) break ;;
> > -       -*) ;;
> > -       *) seen_non_option=t; break ;;
> > -       esac
> > -done
> > -
> > -test -n "$seen_non_option" || set "push" "$@"
> > -
> > -# Main command set
> > -case "$1" in
> > -list)
> > -       shift
> > -       list_stash "$@"
> > -       ;;
> > -show)
> > -       shift
> > -       show_stash "$@"
> > -       ;;
> > -save)
> > -       shift
> > -       save_stash "$@"
> > -       ;;
> > -push)
> > -       shift
> > -       push_stash "$@"
> > -       ;;
> > -apply)
> > -       shift
> > -       apply_stash "$@"
> > -       ;;
> > -clear)
> > -       shift
> > -       clear_stash "$@"
> > -       ;;
> > -create)
> > -       shift
> > -       create_stash -m "$*" && echo "$w_commit"
> > -       ;;
> > -store)
> > -       shift
> > -       store_stash "$@"
> > -       ;;
> > -drop)
> > -       shift
> > -       drop_stash "$@"
> > -       ;;
> > -pop)
> > -       shift
> > -       pop_stash "$@"
> > -       ;;
> > -branch)
> > -       shift
> > -       apply_to_branch "$@"
> > -       ;;
> > -*)
> > -       case $# in
> > -       0)
> > -               push_stash &&
> > -               say "$(gettext "(To restore them type \"git stash
> > apply\")")"
> > -               ;;
> > -       *)
> > -               usage
> > -       esac
> > -       ;;
> > -esac
> > diff --git a/t/README b/t/README
> > index 9afd61e3ca..369e3a9ded 100644
> > --- a/t/README
> > +++ b/t/README
> > @@ -393,10 +393,6 @@ the --no-sparse command-line argument.
> >  GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
> >  by overriding the minimum number of cache entries required per thread.
> >
> > -GIT_TEST_STASH_USE_BUILTIN=<boolean>, when false, disables the
> > -built-in version of git-stash. See 'stash.useBuiltin' in
> > -git-config(1).
> > -
> >  GIT_TEST_ADD_I_USE_BUILTIN=<boolean>, when true, enables the
> >  built-in version of git add -i. See 'add.interactive.useBuiltin' in
> >  git-config(1).
> > diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
> > index ea56e85e70..b84d55a832 100755
> > --- a/t/t3903-stash.sh
> > +++ b/t/t3903-stash.sh
> > @@ -1285,4 +1285,18 @@ test_expect_success 'stash handles skip-worktree
> > entries nicely' '
> >         git rev-parse --verify refs/stash:A.t
> >  '
> >
> > +test_expect_success 'stash -c stash.useBuiltin=false warning ' '
> > +       expected="stash.useBuiltin support has been removed" &&
> > +
> > +       git -c stash.useBuiltin=false stash 2>err &&
> > +       test_i18ngrep "$expected" err &&
> > +       env GIT_TEST_STASH_USE_BUILTIN=false git stash 2>err &&
> > +       test_i18ngrep "$expected" err &&
> > +
> > +       git -c stash.useBuiltin=true stash 2>err &&
> > +       test_must_be_empty err &&
> > +       env GIT_TEST_STASH_USE_BUILTIN=true git stash 2>err &&
> > +       test_must_be_empty err
> > +'
> > +
> >  test_done
> > --
> > 2.25.1.377.g2d2118b814
> >
> >

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 2/2] stash: remove the stash.useBuiltin setting
  2020-03-03 17:36  0%         ` Thomas Gummerer
@ 2020-03-04 16:41  0%           ` Johannes Schindelin
  0 siblings, 0 replies; 43+ results
From: Johannes Schindelin @ 2020-03-04 16:41 UTC (permalink / raw)
  To: Thomas Gummerer
  Cc: Junio C Hamano, Son Luong Ngoc, git, Paul-Sebastian Ungureanu

Hi Thomas,

On Tue, 3 Mar 2020, Thomas Gummerer wrote:

> On 03/03, Johannes Schindelin wrote:
> >
> > On Mon, 2 Mar 2020, Thomas Gummerer wrote:
> >
> > > Remove the stash.useBuiltin setting which was added as an escape hatch
> > > to disable the builtin version of stash first released with Git 2.22.
> >
> > Great!
> >
> > > diff --git a/builtin/stash.c b/builtin/stash.c
> > > index f371db270c..5f4bd693df 100644
> > > --- a/builtin/stash.c
> > > +++ b/builtin/stash.c
> > > @@ -1558,22 +1540,18 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
> > >  		OPT_END()
> > >  	};
> > >
> > > -	if (!use_builtin_stash()) {
> > > -		const char *path = mkpath("%s/git-legacy-stash",
> > > -					  git_exec_path());
> > > -
> > > -		if (sane_execvp(path, (char **)argv) < 0)
> > > -			die_errno(_("could not exec %s"), path);
> > > -		else
> > > -			BUG("sane_execvp() returned???");
> > > -	}
> > > -
> > >  	prefix = setup_git_directory();
> > >  	trace_repo_setup(prefix);
> > >  	setup_work_tree();
> >
> > However, this is only needed because we did not change `git.c` at the same
> > time (as I had done for `rebase` in 80dfc9242eb (git: mark cmd_rebase as
> > requiring a worktree, 2019-07-24)). In other words, I think we will also
> > want to address this part of `git.c`:
> >
> >         /*
> >          * NEEDSWORK: Until the builtin stash is thoroughly robust and no
> >          * longer needs redirection to the stash shell script this is kept as
> >          * is, then should be changed to RUN_SETUP | NEED_WORK_TREE
> >          */
> >         { "stash", cmd_stash },
> >
> > Other than that, I think your patch pair is good to go!
>
> Ah I had completely missed that, thanks for catching it!  Will send
> the updated patches shortly.

Thank you for fixing this so quickly!

Ciao,
Dscho

^ permalink raw reply	[relevance 0%]

* [PATCH v2 2/2] stash: remove the stash.useBuiltin setting
  @ 2020-03-03 17:46  2%       ` Thomas Gummerer
  0 siblings, 0 replies; 43+ results
From: Thomas Gummerer @ 2020-03-03 17:46 UTC (permalink / raw)
  To: git
  Cc: Son Luong Ngoc, Johannes Schindelin, Paul-Sebastian Ungureanu,
	Junio C Hamano, Thomas Gummerer

Remove the stash.useBuiltin setting which was added as an escape hatch
to disable the builtin version of stash first released with Git 2.22.

Carrying the legacy version is a maintenance burden, and has in fact
become out of date failing a test since the 2.23 release, without
anyone noticing until now.  So users would be getting a hint to fall
back to a potentially buggy version of the tool.

We used to shell out to git config to get the useBuiltin configuration
to avoid changing any global state before spawning legacy-stash.
However that is no longer necessary, so just use the 'git_config'
function to get the setting instead.

Similar to what we've done in d03ebd411c ("rebase: remove the
rebase.useBuiltin setting", 2019-03-18), where we remove the
corresponding setting for rebase, we leave the documentation in place,
so people can refer back to it when searching for it online, and so we
can refer to it in the commit message.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
---
 .gitignore                     |   1 -
 Documentation/config/stash.txt |  18 +-
 Makefile                       |   1 -
 builtin/stash.c                |  47 +-
 git-legacy-stash.sh            | 798 ---------------------------------
 git.c                          |   7 +-
 t/README                       |   4 -
 t/t3903-stash.sh               |  14 +
 8 files changed, 30 insertions(+), 860 deletions(-)
 delete mode 100755 git-legacy-stash.sh

diff --git a/.gitignore b/.gitignore
index aebe7c0908..188bd1c3de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,7 +83,6 @@
 /git-init-db
 /git-interpret-trailers
 /git-instaweb
-/git-legacy-stash
 /git-log
 /git-ls-files
 /git-ls-remote
diff --git a/Documentation/config/stash.txt b/Documentation/config/stash.txt
index abc7ef4a3a..0f3db821f6 100644
--- a/Documentation/config/stash.txt
+++ b/Documentation/config/stash.txt
@@ -1,17 +1,9 @@
 stash.useBuiltin::
-       Set to `false` to use the legacy shell script implementation of
-       linkgit:git-stash[1]. Is `true` by default, which means use
-       the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.22 (and Git for Windows
-version 2.19). This option serves as an escape hatch to re-enable the
-legacy version in case any bugs are found in the rewrite. This option and
-the shell script version of linkgit:git-stash[1] will be removed in some
-future release.
-+
-If you find some reason to set this option to `false`, other than
-one-off testing, you should report the behavior difference as a bug in
-Git (see https://git-scm.com/community for details).
+	Unused configuration Variable.  Used in Git versions 2.22 to
+	2.26 as an escape hatch to enable the legacy shellscript
+	implementation of rebase. Now the built-in rewrite of it in C
+	is always used. Setting this will emit a warning, to alert any
+	remaining users that setting this now does nothing.
 
 stash.showPatch::
 	If this is set to true, the `git stash show` command without an
diff --git a/Makefile b/Makefile
index 9804a0758b..096c6d1fbb 100644
--- a/Makefile
+++ b/Makefile
@@ -609,7 +609,6 @@ SCRIPT_SH += git-merge-one-file.sh
 SCRIPT_SH += git-merge-resolve.sh
 SCRIPT_SH += git-mergetool.sh
 SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-stash.sh
 SCRIPT_SH += git-request-pull.sh
 SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
diff --git a/builtin/stash.c b/builtin/stash.c
index f371db270c..ba908a6834 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -701,6 +701,7 @@ static int list_stash(int argc, const char **argv, const char *prefix)
 
 static int show_stat = 1;
 static int show_patch;
+static int use_legacy_stash;
 
 static int git_stash_config(const char *var, const char *value, void *cb)
 {
@@ -712,6 +713,10 @@ static int git_stash_config(const char *var, const char *value, void *cb)
 		show_patch = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "stash.usebuiltin")) {
+		use_legacy_stash = !git_config_bool(var, value);
+		return 0;
+	}
 	return git_diff_basic_config(var, value, cb);
 }
 
@@ -1524,29 +1529,6 @@ static int save_stash(int argc, const char **argv, const char *prefix)
 	return ret;
 }
 
-static int use_builtin_stash(void)
-{
-	struct child_process cp = CHILD_PROCESS_INIT;
-	struct strbuf out = STRBUF_INIT;
-	int ret, env = git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1);
-
-	if (env != -1)
-		return env;
-
-	argv_array_pushl(&cp.args,
-			 "config", "--bool", "stash.usebuiltin", NULL);
-	cp.git_cmd = 1;
-	if (capture_command(&cp, &out, 6)) {
-		strbuf_release(&out);
-		return 1;
-	}
-
-	strbuf_trim(&out);
-	ret = !strcmp("true", out.buf);
-	strbuf_release(&out);
-	return ret;
-}
-
 int cmd_stash(int argc, const char **argv, const char *prefix)
 {
 	int i = -1;
@@ -1558,22 +1540,13 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
 		OPT_END()
 	};
 
-	if (!use_builtin_stash()) {
-		const char *path = mkpath("%s/git-legacy-stash",
-					  git_exec_path());
-
-		if (sane_execvp(path, (char **)argv) < 0)
-			die_errno(_("could not exec %s"), path);
-		else
-			BUG("sane_execvp() returned???");
-	}
-
-	prefix = setup_git_directory();
-	trace_repo_setup(prefix);
-	setup_work_tree();
-
 	git_config(git_stash_config, NULL);
 
+	if (use_legacy_stash ||
+	    !git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1))
+		warning(_("the stash.useBuiltin support has been removed!\n"
+			  "See its entry in 'git help config' for details."));
+
 	argc = parse_options(argc, argv, prefix, options, git_stash_usage,
 			     PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH);
 
diff --git a/git-legacy-stash.sh b/git-legacy-stash.sh
deleted file mode 100755
index 4d4ebb4f2b..0000000000
--- a/git-legacy-stash.sh
+++ /dev/null
@@ -1,798 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2007, Nanako Shiraishi
-
-dashless=$(basename "$0" | sed -e 's/-/ /')
-USAGE="list [<options>]
-   or: $dashless show [<stash>]
-   or: $dashless drop [-q|--quiet] [<stash>]
-   or: $dashless ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-   or: $dashless branch <branchname> [<stash>]
-   or: $dashless save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
-		      [-u|--include-untracked] [-a|--all] [<message>]
-   or: $dashless [push [--patch] [-k|--[no-]keep-index] [-q|--quiet]
-		       [-u|--include-untracked] [-a|--all] [-m <message>]
-		       [-- <pathspec>...]]
-   or: $dashless clear"
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_SPEC=
-START_DIR=$(pwd)
-. git-sh-setup
-require_work_tree
-prefix=$(git rev-parse --show-prefix) || exit 1
-cd_to_toplevel
-
-TMP="$GIT_DIR/.git-stash.$$"
-TMPindex=${GIT_INDEX_FILE-"$(git rev-parse --git-path index)"}.stash.$$
-trap 'rm -f "$TMP-"* "$TMPindex"' 0
-
-ref_stash=refs/stash
-
-if git config --get-colorbool color.interactive; then
-       help_color="$(git config --get-color color.interactive.help 'red bold')"
-       reset_color="$(git config --get-color '' reset)"
-else
-       help_color=
-       reset_color=
-fi
-
-no_changes () {
-	git diff-index --quiet --cached HEAD --ignore-submodules -- "$@" &&
-	git diff-files --quiet --ignore-submodules -- "$@" &&
-	(test -z "$untracked" || test -z "$(untracked_files "$@")")
-}
-
-untracked_files () {
-	if test "$1" = "-z"
-	then
-		shift
-		z=-z
-	else
-		z=
-	fi
-	excl_opt=--exclude-standard
-	test "$untracked" = "all" && excl_opt=
-	git ls-files -o $z $excl_opt -- "$@"
-}
-
-prepare_fallback_ident () {
-	if ! git -c user.useconfigonly=yes var GIT_COMMITTER_IDENT >/dev/null 2>&1
-	then
-		GIT_AUTHOR_NAME="git stash"
-		GIT_AUTHOR_EMAIL=git@stash
-		GIT_COMMITTER_NAME="git stash"
-		GIT_COMMITTER_EMAIL=git@stash
-		export GIT_AUTHOR_NAME
-		export GIT_AUTHOR_EMAIL
-		export GIT_COMMITTER_NAME
-		export GIT_COMMITTER_EMAIL
-	fi
-}
-
-clear_stash () {
-	if test $# != 0
-	then
-		die "$(gettext "git stash clear with parameters is unimplemented")"
-	fi
-	if current=$(git rev-parse --verify --quiet $ref_stash)
-	then
-		git update-ref -d $ref_stash $current
-	fi
-}
-
-maybe_quiet () {
-	case "$1" in
-	--keep-stdout)
-		shift
-		if test -n "$GIT_QUIET"
-		then
-			"$@" 2>/dev/null
-		else
-			"$@"
-		fi
-		;;
-	*)
-		if test -n "$GIT_QUIET"
-		then
-			"$@" >/dev/null 2>&1
-		else
-			"$@"
-		fi
-		;;
-	esac
-}
-
-create_stash () {
-
-	prepare_fallback_ident
-
-	stash_msg=
-	untracked=
-	while test $# != 0
-	do
-		case "$1" in
-		-m|--message)
-			shift
-			stash_msg=${1?"BUG: create_stash () -m requires an argument"}
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		-u|--include-untracked)
-			shift
-			untracked=${1?"BUG: create_stash () -u requires an argument"}
-			;;
-		--)
-			shift
-			break
-			;;
-		esac
-		shift
-	done
-
-	git update-index -q --refresh
-	if maybe_quiet no_changes "$@"
-	then
-		exit 0
-	fi
-
-	# state of the base commit
-	if b_commit=$(maybe_quiet --keep-stdout git rev-parse --verify HEAD)
-	then
-		head=$(git rev-list --oneline -n 1 HEAD --)
-	elif test -n "$GIT_QUIET"
-	then
-		exit 1
-	else
-		die "$(gettext "You do not have the initial commit yet")"
-	fi
-
-	if branch=$(git symbolic-ref -q HEAD)
-	then
-		branch=${branch#refs/heads/}
-	else
-		branch='(no branch)'
-	fi
-	msg=$(printf '%s: %s' "$branch" "$head")
-
-	# state of the index
-	i_tree=$(git write-tree) &&
-	i_commit=$(printf 'index on %s\n' "$msg" |
-		git commit-tree $i_tree -p $b_commit) ||
-		die "$(gettext "Cannot save the current index state")"
-
-	if test -n "$untracked"
-	then
-		# Untracked files are stored by themselves in a parentless commit, for
-		# ease of unpacking later.
-		u_commit=$(
-			untracked_files -z "$@" | (
-				GIT_INDEX_FILE="$TMPindex" &&
-				export GIT_INDEX_FILE &&
-				rm -f "$TMPindex" &&
-				git update-index -z --add --remove --stdin &&
-				u_tree=$(git write-tree) &&
-				printf 'untracked files on %s\n' "$msg" | git commit-tree $u_tree  &&
-				rm -f "$TMPindex"
-		) ) || die "$(gettext "Cannot save the untracked files")"
-
-		untracked_commit_option="-p $u_commit";
-	else
-		untracked_commit_option=
-	fi
-
-	if test -z "$patch_mode"
-	then
-
-		# state of the working tree
-		w_tree=$( (
-			git read-tree --index-output="$TMPindex" -m $i_tree &&
-			GIT_INDEX_FILE="$TMPindex" &&
-			export GIT_INDEX_FILE &&
-			git diff-index --name-only -z HEAD -- "$@" >"$TMP-stagenames" &&
-			git update-index --ignore-skip-worktree-entries \
-				-z --add --remove --stdin <"$TMP-stagenames" &&
-			git write-tree &&
-			rm -f "$TMPindex"
-		) ) ||
-			die "$(gettext "Cannot save the current worktree state")"
-
-	else
-
-		rm -f "$TMP-index" &&
-		GIT_INDEX_FILE="$TMP-index" git read-tree HEAD &&
-
-		# find out what the user wants
-		GIT_INDEX_FILE="$TMP-index" \
-			git add --legacy-stash-p -- "$@" &&
-
-		# state of the working tree
-		w_tree=$(GIT_INDEX_FILE="$TMP-index" git write-tree) ||
-		die "$(gettext "Cannot save the current worktree state")"
-
-		git diff-tree -p HEAD $w_tree -- >"$TMP-patch" &&
-		test -s "$TMP-patch" ||
-		die "$(gettext "No changes selected")"
-
-		rm -f "$TMP-index" ||
-		die "$(gettext "Cannot remove temporary index (can't happen)")"
-
-	fi
-
-	# create the stash
-	if test -z "$stash_msg"
-	then
-		stash_msg=$(printf 'WIP on %s' "$msg")
-	else
-		stash_msg=$(printf 'On %s: %s' "$branch" "$stash_msg")
-	fi
-	w_commit=$(printf '%s\n' "$stash_msg" |
-	git commit-tree $w_tree -p $b_commit -p $i_commit $untracked_commit_option) ||
-	die "$(gettext "Cannot record working tree state")"
-}
-
-store_stash () {
-	while test $# != 0
-	do
-		case "$1" in
-		-m|--message)
-			shift
-			stash_msg="$1"
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		-q|--quiet)
-			quiet=t
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-	test $# = 1 ||
-	die "$(eval_gettext "\"$dashless store\" requires one <commit> argument")"
-
-	w_commit="$1"
-	if test -z "$stash_msg"
-	then
-		stash_msg="Created via \"git stash store\"."
-	fi
-
-	git update-ref --create-reflog -m "$stash_msg" $ref_stash $w_commit
-	ret=$?
-	test $ret != 0 && test -z "$quiet" &&
-	die "$(eval_gettext "Cannot update \$ref_stash with \$w_commit")"
-	return $ret
-}
-
-push_stash () {
-	keep_index=
-	patch_mode=
-	untracked=
-	stash_msg=
-	while test $# != 0
-	do
-		case "$1" in
-		-k|--keep-index)
-			keep_index=t
-			;;
-		--no-keep-index)
-			keep_index=n
-			;;
-		-p|--patch)
-			patch_mode=t
-			# only default to keep if we don't already have an override
-			test -z "$keep_index" && keep_index=t
-			;;
-		-q|--quiet)
-			GIT_QUIET=t
-			;;
-		-u|--include-untracked)
-			untracked=untracked
-			;;
-		-a|--all)
-			untracked=all
-			;;
-		-m|--message)
-			shift
-			test -z ${1+x} && usage
-			stash_msg=$1
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		--help)
-			show_help
-			;;
-		--)
-			shift
-			break
-			;;
-		-*)
-			option="$1"
-			eval_gettextln "error: unknown option for 'stash push': \$option"
-			usage
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-
-	eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
-
-	if test -n "$patch_mode" && test -n "$untracked"
-	then
-		die "$(gettext "Can't use --patch and --include-untracked or --all at the same time")"
-	fi
-
-	test -n "$untracked" || git ls-files --error-unmatch -- "$@" >/dev/null || exit 1
-
-	git update-index -q --refresh
-	if maybe_quiet no_changes "$@"
-	then
-		say "$(gettext "No local changes to save")"
-		exit 0
-	fi
-
-	git reflog exists $ref_stash ||
-		clear_stash || die "$(gettext "Cannot initialize stash")"
-
-	create_stash -m "$stash_msg" -u "$untracked" -- "$@"
-	store_stash -m "$stash_msg" -q $w_commit ||
-	die "$(gettext "Cannot save the current status")"
-	say "$(eval_gettext "Saved working directory and index state \$stash_msg")"
-
-	if test -z "$patch_mode"
-	then
-		test "$untracked" = "all" && CLEAN_X_OPTION=-x || CLEAN_X_OPTION=
-		if test -n "$untracked" && test $# = 0
-		then
-			git clean --force --quiet -d $CLEAN_X_OPTION
-		fi
-
-		if test $# != 0
-		then
-			test -z "$untracked" && UPDATE_OPTION="-u" || UPDATE_OPTION=
-			test "$untracked" = "all" && FORCE_OPTION="--force" || FORCE_OPTION=
-			git add $UPDATE_OPTION $FORCE_OPTION -- "$@"
-			git diff-index -p --cached --binary HEAD -- "$@" |
-			git apply --index -R
-		else
-			git reset --hard -q --no-recurse-submodules
-		fi
-
-		if test "$keep_index" = "t" && test -n "$i_tree"
-		then
-			git read-tree --reset $i_tree
-			git ls-files -z --modified -- "$@" |
-			git checkout-index -z --force --stdin
-		fi
-	else
-		git apply -R < "$TMP-patch" ||
-		die "$(gettext "Cannot remove worktree changes")"
-
-		if test "$keep_index" != "t"
-		then
-			git reset -q -- "$@"
-		fi
-	fi
-}
-
-save_stash () {
-	push_options=
-	while test $# != 0
-	do
-		case "$1" in
-		-q|--quiet)
-			GIT_QUIET=t
-			;;
-		--)
-			shift
-			break
-			;;
-		-*)
-			# pass all options through to push_stash
-			push_options="$push_options $1"
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-
-	stash_msg="$*"
-
-	if test -z "$stash_msg"
-	then
-		push_stash $push_options
-	else
-		push_stash $push_options -m "$stash_msg"
-	fi
-}
-
-have_stash () {
-	git rev-parse --verify --quiet $ref_stash >/dev/null
-}
-
-list_stash () {
-	have_stash || return 0
-	git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash --
-}
-
-show_stash () {
-	ALLOW_UNKNOWN_FLAGS=t
-	assert_stash_like "$@"
-
-	if test -z "$FLAGS"
-	then
-		if test "$(git config --bool stash.showStat || echo true)" = "true"
-		then
-			FLAGS=--stat
-		fi
-
-		if test "$(git config --bool stash.showPatch || echo false)" = "true"
-		then
-			FLAGS=${FLAGS}${FLAGS:+ }-p
-		fi
-
-		if test -z "$FLAGS"
-		then
-			return 0
-		fi
-	fi
-
-	git diff ${FLAGS} $b_commit $w_commit
-}
-
-show_help () {
-	exec git help stash
-	exit 1
-}
-
-#
-# Parses the remaining options looking for flags and
-# at most one revision defaulting to ${ref_stash}@{0}
-# if none found.
-#
-# Derives related tree and commit objects from the
-# revision, if one is found.
-#
-# stash records the work tree, and is a merge between the
-# base commit (first parent) and the index tree (second parent).
-#
-#   REV is set to the symbolic version of the specified stash-like commit
-#   IS_STASH_LIKE is non-blank if ${REV} looks like a stash
-#   IS_STASH_REF is non-blank if the ${REV} looks like a stash ref
-#   s is set to the SHA1 of the stash commit
-#   w_commit is set to the commit containing the working tree
-#   b_commit is set to the base commit
-#   i_commit is set to the commit containing the index tree
-#   u_commit is set to the commit containing the untracked files tree
-#   w_tree is set to the working tree
-#   b_tree is set to the base tree
-#   i_tree is set to the index tree
-#   u_tree is set to the untracked files tree
-#
-#   GIT_QUIET is set to t if -q is specified
-#   INDEX_OPTION is set to --index if --index is specified.
-#   FLAGS is set to the remaining flags (if allowed)
-#
-# dies if:
-#   * too many revisions specified
-#   * no revision is specified and there is no stash stack
-#   * a revision is specified which cannot be resolve to a SHA1
-#   * a non-existent stash reference is specified
-#   * unknown flags were set and ALLOW_UNKNOWN_FLAGS is not "t"
-#
-
-parse_flags_and_rev()
-{
-	test "$PARSE_CACHE" = "$*" && return 0 # optimisation
-	PARSE_CACHE="$*"
-
-	IS_STASH_LIKE=
-	IS_STASH_REF=
-	INDEX_OPTION=
-	s=
-	w_commit=
-	b_commit=
-	i_commit=
-	u_commit=
-	w_tree=
-	b_tree=
-	i_tree=
-	u_tree=
-
-	FLAGS=
-	REV=
-	for opt
-	do
-		case "$opt" in
-			-q|--quiet)
-				GIT_QUIET=-t
-			;;
-			--index)
-				INDEX_OPTION=--index
-			;;
-			--help)
-				show_help
-			;;
-			-*)
-				test "$ALLOW_UNKNOWN_FLAGS" = t ||
-					die "$(eval_gettext "unknown option: \$opt")"
-				FLAGS="${FLAGS}${FLAGS:+ }$opt"
-			;;
-			*)
-				REV="${REV}${REV:+ }'$opt'"
-			;;
-		esac
-	done
-
-	eval set -- $REV
-
-	case $# in
-		0)
-			have_stash || die "$(gettext "No stash entries found.")"
-			set -- ${ref_stash}@{0}
-		;;
-		1)
-			:
-		;;
-		*)
-			die "$(eval_gettext "Too many revisions specified: \$REV")"
-		;;
-	esac
-
-	case "$1" in
-		*[!0-9]*)
-			:
-		;;
-		*)
-			set -- "${ref_stash}@{$1}"
-		;;
-	esac
-
-	REV=$(git rev-parse --symbolic --verify --quiet "$1") || {
-		reference="$1"
-		die "$(eval_gettext "\$reference is not a valid reference")"
-	}
-
-	i_commit=$(git rev-parse --verify --quiet "$REV^2") &&
-	set -- $(git rev-parse "$REV" "$REV^1" "$REV:" "$REV^1:" "$REV^2:" 2>/dev/null) &&
-	s=$1 &&
-	w_commit=$1 &&
-	b_commit=$2 &&
-	w_tree=$3 &&
-	b_tree=$4 &&
-	i_tree=$5 &&
-	IS_STASH_LIKE=t &&
-	test "$ref_stash" = "$(git rev-parse --symbolic-full-name "${REV%@*}")" &&
-	IS_STASH_REF=t
-
-	u_commit=$(git rev-parse --verify --quiet "$REV^3") &&
-	u_tree=$(git rev-parse "$REV^3:" 2>/dev/null)
-}
-
-is_stash_like()
-{
-	parse_flags_and_rev "$@"
-	test -n "$IS_STASH_LIKE"
-}
-
-assert_stash_like() {
-	is_stash_like "$@" || {
-		args="$*"
-		die "$(eval_gettext "'\$args' is not a stash-like commit")"
-	}
-}
-
-is_stash_ref() {
-	is_stash_like "$@" && test -n "$IS_STASH_REF"
-}
-
-assert_stash_ref() {
-	is_stash_ref "$@" || {
-		args="$*"
-		die "$(eval_gettext "'\$args' is not a stash reference")"
-	}
-}
-
-apply_stash () {
-
-	assert_stash_like "$@"
-
-	git update-index -q --refresh || die "$(gettext "unable to refresh index")"
-
-	# current index state
-	c_tree=$(git write-tree) ||
-		die "$(gettext "Cannot apply a stash in the middle of a merge")"
-
-	unstashed_index_tree=
-	if test -n "$INDEX_OPTION" && test "$b_tree" != "$i_tree" &&
-			test "$c_tree" != "$i_tree"
-	then
-		git diff-tree --binary $s^2^..$s^2 | git apply --cached
-		test $? -ne 0 &&
-			die "$(gettext "Conflicts in index. Try without --index.")"
-		unstashed_index_tree=$(git write-tree) ||
-			die "$(gettext "Could not save index tree")"
-		git reset
-	fi
-
-	if test -n "$u_tree"
-	then
-		GIT_INDEX_FILE="$TMPindex" git read-tree "$u_tree" &&
-		GIT_INDEX_FILE="$TMPindex" git checkout-index --all &&
-		rm -f "$TMPindex" ||
-		die "$(gettext "Could not restore untracked files from stash entry")"
-	fi
-
-	eval "
-		GITHEAD_$w_tree='Stashed changes' &&
-		GITHEAD_$c_tree='Updated upstream' &&
-		GITHEAD_$b_tree='Version stash was based on' &&
-		export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree
-	"
-
-	if test -n "$GIT_QUIET"
-	then
-		GIT_MERGE_VERBOSITY=0 && export GIT_MERGE_VERBOSITY
-	fi
-	if git merge-recursive $b_tree -- $c_tree $w_tree
-	then
-		# No conflict
-		if test -n "$unstashed_index_tree"
-		then
-			git read-tree "$unstashed_index_tree"
-		else
-			a="$TMP-added" &&
-			git diff-index --cached --name-only --diff-filter=A $c_tree >"$a" &&
-			git read-tree --reset $c_tree &&
-			git update-index --add --stdin <"$a" ||
-				die "$(gettext "Cannot unstage modified files")"
-			rm -f "$a"
-		fi
-		squelch=
-		if test -n "$GIT_QUIET"
-		then
-			squelch='>/dev/null 2>&1'
-		fi
-		(cd "$START_DIR" && eval "git status $squelch") || :
-	else
-		# Merge conflict; keep the exit status from merge-recursive
-		status=$?
-		git rerere
-		if test -n "$INDEX_OPTION"
-		then
-			gettextln "Index was not unstashed." >&2
-		fi
-		exit $status
-	fi
-}
-
-pop_stash() {
-	assert_stash_ref "$@"
-
-	if apply_stash "$@"
-	then
-		drop_stash "$@"
-	else
-		status=$?
-		say "$(gettext "The stash entry is kept in case you need it again.")"
-		exit $status
-	fi
-}
-
-drop_stash () {
-	assert_stash_ref "$@"
-
-	git reflog delete --updateref --rewrite "${REV}" &&
-		say "$(eval_gettext "Dropped \${REV} (\$s)")" ||
-		die "$(eval_gettext "\${REV}: Could not drop stash entry")"
-
-	# clear_stash if we just dropped the last stash entry
-	git rev-parse --verify --quiet "$ref_stash@{0}" >/dev/null ||
-	clear_stash
-}
-
-apply_to_branch () {
-	test -n "$1" || die "$(gettext "No branch name specified")"
-	branch=$1
-	shift 1
-
-	set -- --index "$@"
-	assert_stash_like "$@"
-
-	git checkout -b $branch $REV^ &&
-	apply_stash "$@" && {
-		test -z "$IS_STASH_REF" || drop_stash "$@"
-	}
-}
-
-test "$1" = "-p" && set "push" "$@"
-
-PARSE_CACHE='--not-parsed'
-# The default command is "push" if nothing but options are given
-seen_non_option=
-for opt
-do
-	case "$opt" in
-	--) break ;;
-	-*) ;;
-	*) seen_non_option=t; break ;;
-	esac
-done
-
-test -n "$seen_non_option" || set "push" "$@"
-
-# Main command set
-case "$1" in
-list)
-	shift
-	list_stash "$@"
-	;;
-show)
-	shift
-	show_stash "$@"
-	;;
-save)
-	shift
-	save_stash "$@"
-	;;
-push)
-	shift
-	push_stash "$@"
-	;;
-apply)
-	shift
-	apply_stash "$@"
-	;;
-clear)
-	shift
-	clear_stash "$@"
-	;;
-create)
-	shift
-	create_stash -m "$*" && echo "$w_commit"
-	;;
-store)
-	shift
-	store_stash "$@"
-	;;
-drop)
-	shift
-	drop_stash "$@"
-	;;
-pop)
-	shift
-	pop_stash "$@"
-	;;
-branch)
-	shift
-	apply_to_branch "$@"
-	;;
-*)
-	case $# in
-	0)
-		push_stash &&
-		say "$(gettext "(To restore them type \"git stash apply\")")"
-		;;
-	*)
-		usage
-	esac
-	;;
-esac
diff --git a/git.c b/git.c
index 7be7ad34bd..b07198fe03 100644
--- a/git.c
+++ b/git.c
@@ -574,12 +574,7 @@ static struct cmd_struct commands[] = {
 	{ "show-ref", cmd_show_ref, RUN_SETUP },
 	{ "sparse-checkout", cmd_sparse_checkout, RUN_SETUP | NEED_WORK_TREE },
 	{ "stage", cmd_add, RUN_SETUP | NEED_WORK_TREE },
-	/*
-	 * NEEDSWORK: Until the builtin stash is thoroughly robust and no
-	 * longer needs redirection to the stash shell script this is kept as
-	 * is, then should be changed to RUN_SETUP | NEED_WORK_TREE
-	 */
-	{ "stash", cmd_stash },
+	{ "stash", cmd_stash, RUN_SETUP | NEED_WORK_TREE },
 	{ "status", cmd_status, RUN_SETUP | NEED_WORK_TREE },
 	{ "stripspace", cmd_stripspace },
 	{ "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX | NO_PARSEOPT },
diff --git a/t/README b/t/README
index 9afd61e3ca..369e3a9ded 100644
--- a/t/README
+++ b/t/README
@@ -393,10 +393,6 @@ the --no-sparse command-line argument.
 GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
 by overriding the minimum number of cache entries required per thread.
 
-GIT_TEST_STASH_USE_BUILTIN=<boolean>, when false, disables the
-built-in version of git-stash. See 'stash.useBuiltin' in
-git-config(1).
-
 GIT_TEST_ADD_I_USE_BUILTIN=<boolean>, when true, enables the
 built-in version of git add -i. See 'add.interactive.useBuiltin' in
 git-config(1).
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index ea56e85e70..b84d55a832 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -1285,4 +1285,18 @@ test_expect_success 'stash handles skip-worktree entries nicely' '
 	git rev-parse --verify refs/stash:A.t
 '
 
+test_expect_success 'stash -c stash.useBuiltin=false warning ' '
+	expected="stash.useBuiltin support has been removed" &&
+
+	git -c stash.useBuiltin=false stash 2>err &&
+	test_i18ngrep "$expected" err &&
+	env GIT_TEST_STASH_USE_BUILTIN=false git stash 2>err &&
+	test_i18ngrep "$expected" err &&
+
+	git -c stash.useBuiltin=true stash 2>err &&
+	test_must_be_empty err &&
+	env GIT_TEST_STASH_USE_BUILTIN=true git stash 2>err &&
+	test_must_be_empty err
+'
+
 test_done
-- 
2.25.1.460.g2f268890c2


^ permalink raw reply related	[relevance 2%]

* Re: [PATCH 2/2] stash: remove the stash.useBuiltin setting
  2020-03-03 13:33  0%       ` Johannes Schindelin
@ 2020-03-03 17:36  0%         ` Thomas Gummerer
  2020-03-04 16:41  0%           ` Johannes Schindelin
  0 siblings, 1 reply; 43+ results
From: Thomas Gummerer @ 2020-03-03 17:36 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Junio C Hamano, Son Luong Ngoc, git, Paul-Sebastian Ungureanu

On 03/03, Johannes Schindelin wrote:
> Hi Thomas,
> 
> On Mon, 2 Mar 2020, Thomas Gummerer wrote:
> 
> > Remove the stash.useBuiltin setting which was added as an escape hatch
> > to disable the builtin version of stash first released with Git 2.22.
> 
> Great!
> 
> > diff --git a/builtin/stash.c b/builtin/stash.c
> > index f371db270c..5f4bd693df 100644
> > --- a/builtin/stash.c
> > +++ b/builtin/stash.c
> > @@ -1558,22 +1540,18 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
> >  		OPT_END()
> >  	};
> >
> > -	if (!use_builtin_stash()) {
> > -		const char *path = mkpath("%s/git-legacy-stash",
> > -					  git_exec_path());
> > -
> > -		if (sane_execvp(path, (char **)argv) < 0)
> > -			die_errno(_("could not exec %s"), path);
> > -		else
> > -			BUG("sane_execvp() returned???");
> > -	}
> > -
> >  	prefix = setup_git_directory();
> >  	trace_repo_setup(prefix);
> >  	setup_work_tree();
> 
> However, this is only needed because we did not change `git.c` at the same
> time (as I had done for `rebase` in 80dfc9242eb (git: mark cmd_rebase as
> requiring a worktree, 2019-07-24)). In other words, I think we will also
> want to address this part of `git.c`:
> 
>         /*
>          * NEEDSWORK: Until the builtin stash is thoroughly robust and no
>          * longer needs redirection to the stash shell script this is kept as
>          * is, then should be changed to RUN_SETUP | NEED_WORK_TREE
>          */
>         { "stash", cmd_stash },
> 
> Other than that, I think your patch pair is good to go!

Ah I had completely missed that, thanks for catching it!  Will send
the updated patches shortly.

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 2/2] stash: remove the stash.useBuiltin setting
  2020-03-02 18:19  2%     ` [PATCH 2/2] stash: remove the stash.useBuiltin setting Thomas Gummerer
@ 2020-03-03 13:33  0%       ` Johannes Schindelin
  2020-03-03 17:36  0%         ` Thomas Gummerer
       [not found]           ` <CA+P7+xqVyMnG6FiyL4hngPfEEMi5CKz1qN5Cy1TMMpLg3CmsBw@mail.gmail.com>
  1 sibling, 1 reply; 43+ results
From: Johannes Schindelin @ 2020-03-03 13:33 UTC (permalink / raw)
  To: Thomas Gummerer
  Cc: Junio C Hamano, Son Luong Ngoc, git, Paul-Sebastian Ungureanu

Hi Thomas,

On Mon, 2 Mar 2020, Thomas Gummerer wrote:

> Remove the stash.useBuiltin setting which was added as an escape hatch
> to disable the builtin version of stash first released with Git 2.22.

Great!

> diff --git a/builtin/stash.c b/builtin/stash.c
> index f371db270c..5f4bd693df 100644
> --- a/builtin/stash.c
> +++ b/builtin/stash.c
> @@ -1558,22 +1540,18 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
>  		OPT_END()
>  	};
>
> -	if (!use_builtin_stash()) {
> -		const char *path = mkpath("%s/git-legacy-stash",
> -					  git_exec_path());
> -
> -		if (sane_execvp(path, (char **)argv) < 0)
> -			die_errno(_("could not exec %s"), path);
> -		else
> -			BUG("sane_execvp() returned???");
> -	}
> -
>  	prefix = setup_git_directory();
>  	trace_repo_setup(prefix);
>  	setup_work_tree();

However, this is only needed because we did not change `git.c` at the same
time (as I had done for `rebase` in 80dfc9242eb (git: mark cmd_rebase as
requiring a worktree, 2019-07-24)). In other words, I think we will also
want to address this part of `git.c`:

        /*
         * NEEDSWORK: Until the builtin stash is thoroughly robust and no
         * longer needs redirection to the stash shell script this is kept as
         * is, then should be changed to RUN_SETUP | NEED_WORK_TREE
         */
        { "stash", cmd_stash },

Other than that, I think your patch pair is good to go!

Ciao,
Dscho

^ permalink raw reply	[relevance 0%]

* [PATCH 2/2] stash: remove the stash.useBuiltin setting
  @ 2020-03-02 18:19  2%     ` Thomas Gummerer
  2020-03-03 13:33  0%       ` Johannes Schindelin
       [not found]           ` <CA+P7+xqVyMnG6FiyL4hngPfEEMi5CKz1qN5Cy1TMMpLg3CmsBw@mail.gmail.com>
    1 sibling, 2 replies; 43+ results
From: Thomas Gummerer @ 2020-03-02 18:19 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Son Luong Ngoc, git, Johannes Schindelin,
	Paul-Sebastian Ungureanu

Remove the stash.useBuiltin setting which was added as an escape hatch
to disable the builtin version of stash first released with Git 2.22.

Carrying the legacy version is a maintenance burden, and has in fact
become out of date failing a test since the 2.23 release, without
anyone noticing until now.  So users would be getting a hint to fall
back to a potentially buggy version of the tool.

We used to shell out to git config to get the useBuiltin configuration
to avoid changing any global state before spawning legacy-stash.
However that is no longer necessary, so just use the 'git_config'
function to get the setting instead.

Similar to what we've done in d03ebd411c ("rebase: remove the
rebase.useBuiltin setting", 2019-03-18), where we remove the
corresponding setting for rebase, we leave the documentation in place,
so people can refer back to it when searching for it online, and so we
can refer to it in the commit message.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
---
 .gitignore                     |   1 -
 Documentation/config/stash.txt |  18 +-
 Makefile                       |   1 -
 builtin/stash.c                |  44 +-
 git-legacy-stash.sh            | 798 ---------------------------------
 t/README                       |   4 -
 t/t3903-stash.sh               |  14 +
 7 files changed, 30 insertions(+), 850 deletions(-)
 delete mode 100755 git-legacy-stash.sh

diff --git a/.gitignore b/.gitignore
index aebe7c0908..188bd1c3de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,7 +83,6 @@
 /git-init-db
 /git-interpret-trailers
 /git-instaweb
-/git-legacy-stash
 /git-log
 /git-ls-files
 /git-ls-remote
diff --git a/Documentation/config/stash.txt b/Documentation/config/stash.txt
index abc7ef4a3a..0f3db821f6 100644
--- a/Documentation/config/stash.txt
+++ b/Documentation/config/stash.txt
@@ -1,17 +1,9 @@
 stash.useBuiltin::
-       Set to `false` to use the legacy shell script implementation of
-       linkgit:git-stash[1]. Is `true` by default, which means use
-       the built-in rewrite of it in C.
-+
-The C rewrite is first included with Git version 2.22 (and Git for Windows
-version 2.19). This option serves as an escape hatch to re-enable the
-legacy version in case any bugs are found in the rewrite. This option and
-the shell script version of linkgit:git-stash[1] will be removed in some
-future release.
-+
-If you find some reason to set this option to `false`, other than
-one-off testing, you should report the behavior difference as a bug in
-Git (see https://git-scm.com/community for details).
+	Unused configuration Variable.  Used in Git versions 2.22 to
+	2.26 as an escape hatch to enable the legacy shellscript
+	implementation of rebase. Now the built-in rewrite of it in C
+	is always used. Setting this will emit a warning, to alert any
+	remaining users that setting this now does nothing.
 
 stash.showPatch::
 	If this is set to true, the `git stash show` command without an
diff --git a/Makefile b/Makefile
index 9804a0758b..096c6d1fbb 100644
--- a/Makefile
+++ b/Makefile
@@ -609,7 +609,6 @@ SCRIPT_SH += git-merge-one-file.sh
 SCRIPT_SH += git-merge-resolve.sh
 SCRIPT_SH += git-mergetool.sh
 SCRIPT_SH += git-quiltimport.sh
-SCRIPT_SH += git-legacy-stash.sh
 SCRIPT_SH += git-request-pull.sh
 SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
diff --git a/builtin/stash.c b/builtin/stash.c
index f371db270c..5f4bd693df 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -701,6 +701,7 @@ static int list_stash(int argc, const char **argv, const char *prefix)
 
 static int show_stat = 1;
 static int show_patch;
+static int use_legacy_stash;
 
 static int git_stash_config(const char *var, const char *value, void *cb)
 {
@@ -712,6 +713,10 @@ static int git_stash_config(const char *var, const char *value, void *cb)
 		show_patch = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "stash.usebuiltin")) {
+		use_legacy_stash = !git_config_bool(var, value);
+		return 0;
+	}
 	return git_diff_basic_config(var, value, cb);
 }
 
@@ -1524,29 +1529,6 @@ static int save_stash(int argc, const char **argv, const char *prefix)
 	return ret;
 }
 
-static int use_builtin_stash(void)
-{
-	struct child_process cp = CHILD_PROCESS_INIT;
-	struct strbuf out = STRBUF_INIT;
-	int ret, env = git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1);
-
-	if (env != -1)
-		return env;
-
-	argv_array_pushl(&cp.args,
-			 "config", "--bool", "stash.usebuiltin", NULL);
-	cp.git_cmd = 1;
-	if (capture_command(&cp, &out, 6)) {
-		strbuf_release(&out);
-		return 1;
-	}
-
-	strbuf_trim(&out);
-	ret = !strcmp("true", out.buf);
-	strbuf_release(&out);
-	return ret;
-}
-
 int cmd_stash(int argc, const char **argv, const char *prefix)
 {
 	int i = -1;
@@ -1558,22 +1540,18 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
 		OPT_END()
 	};
 
-	if (!use_builtin_stash()) {
-		const char *path = mkpath("%s/git-legacy-stash",
-					  git_exec_path());
-
-		if (sane_execvp(path, (char **)argv) < 0)
-			die_errno(_("could not exec %s"), path);
-		else
-			BUG("sane_execvp() returned???");
-	}
-
 	prefix = setup_git_directory();
 	trace_repo_setup(prefix);
 	setup_work_tree();
 
 	git_config(git_stash_config, NULL);
 
+	if (use_legacy_stash ||
+	    !git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1))
+		warning(_("the stash.useBuiltin support has been removed!\n"
+			  "See its entry in 'git help config' for details."));
+
+
 	argc = parse_options(argc, argv, prefix, options, git_stash_usage,
 			     PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH);
 
diff --git a/git-legacy-stash.sh b/git-legacy-stash.sh
deleted file mode 100755
index 4d4ebb4f2b..0000000000
--- a/git-legacy-stash.sh
+++ /dev/null
@@ -1,798 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2007, Nanako Shiraishi
-
-dashless=$(basename "$0" | sed -e 's/-/ /')
-USAGE="list [<options>]
-   or: $dashless show [<stash>]
-   or: $dashless drop [-q|--quiet] [<stash>]
-   or: $dashless ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-   or: $dashless branch <branchname> [<stash>]
-   or: $dashless save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
-		      [-u|--include-untracked] [-a|--all] [<message>]
-   or: $dashless [push [--patch] [-k|--[no-]keep-index] [-q|--quiet]
-		       [-u|--include-untracked] [-a|--all] [-m <message>]
-		       [-- <pathspec>...]]
-   or: $dashless clear"
-
-SUBDIRECTORY_OK=Yes
-OPTIONS_SPEC=
-START_DIR=$(pwd)
-. git-sh-setup
-require_work_tree
-prefix=$(git rev-parse --show-prefix) || exit 1
-cd_to_toplevel
-
-TMP="$GIT_DIR/.git-stash.$$"
-TMPindex=${GIT_INDEX_FILE-"$(git rev-parse --git-path index)"}.stash.$$
-trap 'rm -f "$TMP-"* "$TMPindex"' 0
-
-ref_stash=refs/stash
-
-if git config --get-colorbool color.interactive; then
-       help_color="$(git config --get-color color.interactive.help 'red bold')"
-       reset_color="$(git config --get-color '' reset)"
-else
-       help_color=
-       reset_color=
-fi
-
-no_changes () {
-	git diff-index --quiet --cached HEAD --ignore-submodules -- "$@" &&
-	git diff-files --quiet --ignore-submodules -- "$@" &&
-	(test -z "$untracked" || test -z "$(untracked_files "$@")")
-}
-
-untracked_files () {
-	if test "$1" = "-z"
-	then
-		shift
-		z=-z
-	else
-		z=
-	fi
-	excl_opt=--exclude-standard
-	test "$untracked" = "all" && excl_opt=
-	git ls-files -o $z $excl_opt -- "$@"
-}
-
-prepare_fallback_ident () {
-	if ! git -c user.useconfigonly=yes var GIT_COMMITTER_IDENT >/dev/null 2>&1
-	then
-		GIT_AUTHOR_NAME="git stash"
-		GIT_AUTHOR_EMAIL=git@stash
-		GIT_COMMITTER_NAME="git stash"
-		GIT_COMMITTER_EMAIL=git@stash
-		export GIT_AUTHOR_NAME
-		export GIT_AUTHOR_EMAIL
-		export GIT_COMMITTER_NAME
-		export GIT_COMMITTER_EMAIL
-	fi
-}
-
-clear_stash () {
-	if test $# != 0
-	then
-		die "$(gettext "git stash clear with parameters is unimplemented")"
-	fi
-	if current=$(git rev-parse --verify --quiet $ref_stash)
-	then
-		git update-ref -d $ref_stash $current
-	fi
-}
-
-maybe_quiet () {
-	case "$1" in
-	--keep-stdout)
-		shift
-		if test -n "$GIT_QUIET"
-		then
-			"$@" 2>/dev/null
-		else
-			"$@"
-		fi
-		;;
-	*)
-		if test -n "$GIT_QUIET"
-		then
-			"$@" >/dev/null 2>&1
-		else
-			"$@"
-		fi
-		;;
-	esac
-}
-
-create_stash () {
-
-	prepare_fallback_ident
-
-	stash_msg=
-	untracked=
-	while test $# != 0
-	do
-		case "$1" in
-		-m|--message)
-			shift
-			stash_msg=${1?"BUG: create_stash () -m requires an argument"}
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		-u|--include-untracked)
-			shift
-			untracked=${1?"BUG: create_stash () -u requires an argument"}
-			;;
-		--)
-			shift
-			break
-			;;
-		esac
-		shift
-	done
-
-	git update-index -q --refresh
-	if maybe_quiet no_changes "$@"
-	then
-		exit 0
-	fi
-
-	# state of the base commit
-	if b_commit=$(maybe_quiet --keep-stdout git rev-parse --verify HEAD)
-	then
-		head=$(git rev-list --oneline -n 1 HEAD --)
-	elif test -n "$GIT_QUIET"
-	then
-		exit 1
-	else
-		die "$(gettext "You do not have the initial commit yet")"
-	fi
-
-	if branch=$(git symbolic-ref -q HEAD)
-	then
-		branch=${branch#refs/heads/}
-	else
-		branch='(no branch)'
-	fi
-	msg=$(printf '%s: %s' "$branch" "$head")
-
-	# state of the index
-	i_tree=$(git write-tree) &&
-	i_commit=$(printf 'index on %s\n' "$msg" |
-		git commit-tree $i_tree -p $b_commit) ||
-		die "$(gettext "Cannot save the current index state")"
-
-	if test -n "$untracked"
-	then
-		# Untracked files are stored by themselves in a parentless commit, for
-		# ease of unpacking later.
-		u_commit=$(
-			untracked_files -z "$@" | (
-				GIT_INDEX_FILE="$TMPindex" &&
-				export GIT_INDEX_FILE &&
-				rm -f "$TMPindex" &&
-				git update-index -z --add --remove --stdin &&
-				u_tree=$(git write-tree) &&
-				printf 'untracked files on %s\n' "$msg" | git commit-tree $u_tree  &&
-				rm -f "$TMPindex"
-		) ) || die "$(gettext "Cannot save the untracked files")"
-
-		untracked_commit_option="-p $u_commit";
-	else
-		untracked_commit_option=
-	fi
-
-	if test -z "$patch_mode"
-	then
-
-		# state of the working tree
-		w_tree=$( (
-			git read-tree --index-output="$TMPindex" -m $i_tree &&
-			GIT_INDEX_FILE="$TMPindex" &&
-			export GIT_INDEX_FILE &&
-			git diff-index --name-only -z HEAD -- "$@" >"$TMP-stagenames" &&
-			git update-index --ignore-skip-worktree-entries \
-				-z --add --remove --stdin <"$TMP-stagenames" &&
-			git write-tree &&
-			rm -f "$TMPindex"
-		) ) ||
-			die "$(gettext "Cannot save the current worktree state")"
-
-	else
-
-		rm -f "$TMP-index" &&
-		GIT_INDEX_FILE="$TMP-index" git read-tree HEAD &&
-
-		# find out what the user wants
-		GIT_INDEX_FILE="$TMP-index" \
-			git add --legacy-stash-p -- "$@" &&
-
-		# state of the working tree
-		w_tree=$(GIT_INDEX_FILE="$TMP-index" git write-tree) ||
-		die "$(gettext "Cannot save the current worktree state")"
-
-		git diff-tree -p HEAD $w_tree -- >"$TMP-patch" &&
-		test -s "$TMP-patch" ||
-		die "$(gettext "No changes selected")"
-
-		rm -f "$TMP-index" ||
-		die "$(gettext "Cannot remove temporary index (can't happen)")"
-
-	fi
-
-	# create the stash
-	if test -z "$stash_msg"
-	then
-		stash_msg=$(printf 'WIP on %s' "$msg")
-	else
-		stash_msg=$(printf 'On %s: %s' "$branch" "$stash_msg")
-	fi
-	w_commit=$(printf '%s\n' "$stash_msg" |
-	git commit-tree $w_tree -p $b_commit -p $i_commit $untracked_commit_option) ||
-	die "$(gettext "Cannot record working tree state")"
-}
-
-store_stash () {
-	while test $# != 0
-	do
-		case "$1" in
-		-m|--message)
-			shift
-			stash_msg="$1"
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		-q|--quiet)
-			quiet=t
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-	test $# = 1 ||
-	die "$(eval_gettext "\"$dashless store\" requires one <commit> argument")"
-
-	w_commit="$1"
-	if test -z "$stash_msg"
-	then
-		stash_msg="Created via \"git stash store\"."
-	fi
-
-	git update-ref --create-reflog -m "$stash_msg" $ref_stash $w_commit
-	ret=$?
-	test $ret != 0 && test -z "$quiet" &&
-	die "$(eval_gettext "Cannot update \$ref_stash with \$w_commit")"
-	return $ret
-}
-
-push_stash () {
-	keep_index=
-	patch_mode=
-	untracked=
-	stash_msg=
-	while test $# != 0
-	do
-		case "$1" in
-		-k|--keep-index)
-			keep_index=t
-			;;
-		--no-keep-index)
-			keep_index=n
-			;;
-		-p|--patch)
-			patch_mode=t
-			# only default to keep if we don't already have an override
-			test -z "$keep_index" && keep_index=t
-			;;
-		-q|--quiet)
-			GIT_QUIET=t
-			;;
-		-u|--include-untracked)
-			untracked=untracked
-			;;
-		-a|--all)
-			untracked=all
-			;;
-		-m|--message)
-			shift
-			test -z ${1+x} && usage
-			stash_msg=$1
-			;;
-		-m*)
-			stash_msg=${1#-m}
-			;;
-		--message=*)
-			stash_msg=${1#--message=}
-			;;
-		--help)
-			show_help
-			;;
-		--)
-			shift
-			break
-			;;
-		-*)
-			option="$1"
-			eval_gettextln "error: unknown option for 'stash push': \$option"
-			usage
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-
-	eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
-
-	if test -n "$patch_mode" && test -n "$untracked"
-	then
-		die "$(gettext "Can't use --patch and --include-untracked or --all at the same time")"
-	fi
-
-	test -n "$untracked" || git ls-files --error-unmatch -- "$@" >/dev/null || exit 1
-
-	git update-index -q --refresh
-	if maybe_quiet no_changes "$@"
-	then
-		say "$(gettext "No local changes to save")"
-		exit 0
-	fi
-
-	git reflog exists $ref_stash ||
-		clear_stash || die "$(gettext "Cannot initialize stash")"
-
-	create_stash -m "$stash_msg" -u "$untracked" -- "$@"
-	store_stash -m "$stash_msg" -q $w_commit ||
-	die "$(gettext "Cannot save the current status")"
-	say "$(eval_gettext "Saved working directory and index state \$stash_msg")"
-
-	if test -z "$patch_mode"
-	then
-		test "$untracked" = "all" && CLEAN_X_OPTION=-x || CLEAN_X_OPTION=
-		if test -n "$untracked" && test $# = 0
-		then
-			git clean --force --quiet -d $CLEAN_X_OPTION
-		fi
-
-		if test $# != 0
-		then
-			test -z "$untracked" && UPDATE_OPTION="-u" || UPDATE_OPTION=
-			test "$untracked" = "all" && FORCE_OPTION="--force" || FORCE_OPTION=
-			git add $UPDATE_OPTION $FORCE_OPTION -- "$@"
-			git diff-index -p --cached --binary HEAD -- "$@" |
-			git apply --index -R
-		else
-			git reset --hard -q --no-recurse-submodules
-		fi
-
-		if test "$keep_index" = "t" && test -n "$i_tree"
-		then
-			git read-tree --reset $i_tree
-			git ls-files -z --modified -- "$@" |
-			git checkout-index -z --force --stdin
-		fi
-	else
-		git apply -R < "$TMP-patch" ||
-		die "$(gettext "Cannot remove worktree changes")"
-
-		if test "$keep_index" != "t"
-		then
-			git reset -q -- "$@"
-		fi
-	fi
-}
-
-save_stash () {
-	push_options=
-	while test $# != 0
-	do
-		case "$1" in
-		-q|--quiet)
-			GIT_QUIET=t
-			;;
-		--)
-			shift
-			break
-			;;
-		-*)
-			# pass all options through to push_stash
-			push_options="$push_options $1"
-			;;
-		*)
-			break
-			;;
-		esac
-		shift
-	done
-
-	stash_msg="$*"
-
-	if test -z "$stash_msg"
-	then
-		push_stash $push_options
-	else
-		push_stash $push_options -m "$stash_msg"
-	fi
-}
-
-have_stash () {
-	git rev-parse --verify --quiet $ref_stash >/dev/null
-}
-
-list_stash () {
-	have_stash || return 0
-	git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash --
-}
-
-show_stash () {
-	ALLOW_UNKNOWN_FLAGS=t
-	assert_stash_like "$@"
-
-	if test -z "$FLAGS"
-	then
-		if test "$(git config --bool stash.showStat || echo true)" = "true"
-		then
-			FLAGS=--stat
-		fi
-
-		if test "$(git config --bool stash.showPatch || echo false)" = "true"
-		then
-			FLAGS=${FLAGS}${FLAGS:+ }-p
-		fi
-
-		if test -z "$FLAGS"
-		then
-			return 0
-		fi
-	fi
-
-	git diff ${FLAGS} $b_commit $w_commit
-}
-
-show_help () {
-	exec git help stash
-	exit 1
-}
-
-#
-# Parses the remaining options looking for flags and
-# at most one revision defaulting to ${ref_stash}@{0}
-# if none found.
-#
-# Derives related tree and commit objects from the
-# revision, if one is found.
-#
-# stash records the work tree, and is a merge between the
-# base commit (first parent) and the index tree (second parent).
-#
-#   REV is set to the symbolic version of the specified stash-like commit
-#   IS_STASH_LIKE is non-blank if ${REV} looks like a stash
-#   IS_STASH_REF is non-blank if the ${REV} looks like a stash ref
-#   s is set to the SHA1 of the stash commit
-#   w_commit is set to the commit containing the working tree
-#   b_commit is set to the base commit
-#   i_commit is set to the commit containing the index tree
-#   u_commit is set to the commit containing the untracked files tree
-#   w_tree is set to the working tree
-#   b_tree is set to the base tree
-#   i_tree is set to the index tree
-#   u_tree is set to the untracked files tree
-#
-#   GIT_QUIET is set to t if -q is specified
-#   INDEX_OPTION is set to --index if --index is specified.
-#   FLAGS is set to the remaining flags (if allowed)
-#
-# dies if:
-#   * too many revisions specified
-#   * no revision is specified and there is no stash stack
-#   * a revision is specified which cannot be resolve to a SHA1
-#   * a non-existent stash reference is specified
-#   * unknown flags were set and ALLOW_UNKNOWN_FLAGS is not "t"
-#
-
-parse_flags_and_rev()
-{
-	test "$PARSE_CACHE" = "$*" && return 0 # optimisation
-	PARSE_CACHE="$*"
-
-	IS_STASH_LIKE=
-	IS_STASH_REF=
-	INDEX_OPTION=
-	s=
-	w_commit=
-	b_commit=
-	i_commit=
-	u_commit=
-	w_tree=
-	b_tree=
-	i_tree=
-	u_tree=
-
-	FLAGS=
-	REV=
-	for opt
-	do
-		case "$opt" in
-			-q|--quiet)
-				GIT_QUIET=-t
-			;;
-			--index)
-				INDEX_OPTION=--index
-			;;
-			--help)
-				show_help
-			;;
-			-*)
-				test "$ALLOW_UNKNOWN_FLAGS" = t ||
-					die "$(eval_gettext "unknown option: \$opt")"
-				FLAGS="${FLAGS}${FLAGS:+ }$opt"
-			;;
-			*)
-				REV="${REV}${REV:+ }'$opt'"
-			;;
-		esac
-	done
-
-	eval set -- $REV
-
-	case $# in
-		0)
-			have_stash || die "$(gettext "No stash entries found.")"
-			set -- ${ref_stash}@{0}
-		;;
-		1)
-			:
-		;;
-		*)
-			die "$(eval_gettext "Too many revisions specified: \$REV")"
-		;;
-	esac
-
-	case "$1" in
-		*[!0-9]*)
-			:
-		;;
-		*)
-			set -- "${ref_stash}@{$1}"
-		;;
-	esac
-
-	REV=$(git rev-parse --symbolic --verify --quiet "$1") || {
-		reference="$1"
-		die "$(eval_gettext "\$reference is not a valid reference")"
-	}
-
-	i_commit=$(git rev-parse --verify --quiet "$REV^2") &&
-	set -- $(git rev-parse "$REV" "$REV^1" "$REV:" "$REV^1:" "$REV^2:" 2>/dev/null) &&
-	s=$1 &&
-	w_commit=$1 &&
-	b_commit=$2 &&
-	w_tree=$3 &&
-	b_tree=$4 &&
-	i_tree=$5 &&
-	IS_STASH_LIKE=t &&
-	test "$ref_stash" = "$(git rev-parse --symbolic-full-name "${REV%@*}")" &&
-	IS_STASH_REF=t
-
-	u_commit=$(git rev-parse --verify --quiet "$REV^3") &&
-	u_tree=$(git rev-parse "$REV^3:" 2>/dev/null)
-}
-
-is_stash_like()
-{
-	parse_flags_and_rev "$@"
-	test -n "$IS_STASH_LIKE"
-}
-
-assert_stash_like() {
-	is_stash_like "$@" || {
-		args="$*"
-		die "$(eval_gettext "'\$args' is not a stash-like commit")"
-	}
-}
-
-is_stash_ref() {
-	is_stash_like "$@" && test -n "$IS_STASH_REF"
-}
-
-assert_stash_ref() {
-	is_stash_ref "$@" || {
-		args="$*"
-		die "$(eval_gettext "'\$args' is not a stash reference")"
-	}
-}
-
-apply_stash () {
-
-	assert_stash_like "$@"
-
-	git update-index -q --refresh || die "$(gettext "unable to refresh index")"
-
-	# current index state
-	c_tree=$(git write-tree) ||
-		die "$(gettext "Cannot apply a stash in the middle of a merge")"
-
-	unstashed_index_tree=
-	if test -n "$INDEX_OPTION" && test "$b_tree" != "$i_tree" &&
-			test "$c_tree" != "$i_tree"
-	then
-		git diff-tree --binary $s^2^..$s^2 | git apply --cached
-		test $? -ne 0 &&
-			die "$(gettext "Conflicts in index. Try without --index.")"
-		unstashed_index_tree=$(git write-tree) ||
-			die "$(gettext "Could not save index tree")"
-		git reset
-	fi
-
-	if test -n "$u_tree"
-	then
-		GIT_INDEX_FILE="$TMPindex" git read-tree "$u_tree" &&
-		GIT_INDEX_FILE="$TMPindex" git checkout-index --all &&
-		rm -f "$TMPindex" ||
-		die "$(gettext "Could not restore untracked files from stash entry")"
-	fi
-
-	eval "
-		GITHEAD_$w_tree='Stashed changes' &&
-		GITHEAD_$c_tree='Updated upstream' &&
-		GITHEAD_$b_tree='Version stash was based on' &&
-		export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree
-	"
-
-	if test -n "$GIT_QUIET"
-	then
-		GIT_MERGE_VERBOSITY=0 && export GIT_MERGE_VERBOSITY
-	fi
-	if git merge-recursive $b_tree -- $c_tree $w_tree
-	then
-		# No conflict
-		if test -n "$unstashed_index_tree"
-		then
-			git read-tree "$unstashed_index_tree"
-		else
-			a="$TMP-added" &&
-			git diff-index --cached --name-only --diff-filter=A $c_tree >"$a" &&
-			git read-tree --reset $c_tree &&
-			git update-index --add --stdin <"$a" ||
-				die "$(gettext "Cannot unstage modified files")"
-			rm -f "$a"
-		fi
-		squelch=
-		if test -n "$GIT_QUIET"
-		then
-			squelch='>/dev/null 2>&1'
-		fi
-		(cd "$START_DIR" && eval "git status $squelch") || :
-	else
-		# Merge conflict; keep the exit status from merge-recursive
-		status=$?
-		git rerere
-		if test -n "$INDEX_OPTION"
-		then
-			gettextln "Index was not unstashed." >&2
-		fi
-		exit $status
-	fi
-}
-
-pop_stash() {
-	assert_stash_ref "$@"
-
-	if apply_stash "$@"
-	then
-		drop_stash "$@"
-	else
-		status=$?
-		say "$(gettext "The stash entry is kept in case you need it again.")"
-		exit $status
-	fi
-}
-
-drop_stash () {
-	assert_stash_ref "$@"
-
-	git reflog delete --updateref --rewrite "${REV}" &&
-		say "$(eval_gettext "Dropped \${REV} (\$s)")" ||
-		die "$(eval_gettext "\${REV}: Could not drop stash entry")"
-
-	# clear_stash if we just dropped the last stash entry
-	git rev-parse --verify --quiet "$ref_stash@{0}" >/dev/null ||
-	clear_stash
-}
-
-apply_to_branch () {
-	test -n "$1" || die "$(gettext "No branch name specified")"
-	branch=$1
-	shift 1
-
-	set -- --index "$@"
-	assert_stash_like "$@"
-
-	git checkout -b $branch $REV^ &&
-	apply_stash "$@" && {
-		test -z "$IS_STASH_REF" || drop_stash "$@"
-	}
-}
-
-test "$1" = "-p" && set "push" "$@"
-
-PARSE_CACHE='--not-parsed'
-# The default command is "push" if nothing but options are given
-seen_non_option=
-for opt
-do
-	case "$opt" in
-	--) break ;;
-	-*) ;;
-	*) seen_non_option=t; break ;;
-	esac
-done
-
-test -n "$seen_non_option" || set "push" "$@"
-
-# Main command set
-case "$1" in
-list)
-	shift
-	list_stash "$@"
-	;;
-show)
-	shift
-	show_stash "$@"
-	;;
-save)
-	shift
-	save_stash "$@"
-	;;
-push)
-	shift
-	push_stash "$@"
-	;;
-apply)
-	shift
-	apply_stash "$@"
-	;;
-clear)
-	shift
-	clear_stash "$@"
-	;;
-create)
-	shift
-	create_stash -m "$*" && echo "$w_commit"
-	;;
-store)
-	shift
-	store_stash "$@"
-	;;
-drop)
-	shift
-	drop_stash "$@"
-	;;
-pop)
-	shift
-	pop_stash "$@"
-	;;
-branch)
-	shift
-	apply_to_branch "$@"
-	;;
-*)
-	case $# in
-	0)
-		push_stash &&
-		say "$(gettext "(To restore them type \"git stash apply\")")"
-		;;
-	*)
-		usage
-	esac
-	;;
-esac
diff --git a/t/README b/t/README
index 9afd61e3ca..369e3a9ded 100644
--- a/t/README
+++ b/t/README
@@ -393,10 +393,6 @@ the --no-sparse command-line argument.
 GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
 by overriding the minimum number of cache entries required per thread.
 
-GIT_TEST_STASH_USE_BUILTIN=<boolean>, when false, disables the
-built-in version of git-stash. See 'stash.useBuiltin' in
-git-config(1).
-
 GIT_TEST_ADD_I_USE_BUILTIN=<boolean>, when true, enables the
 built-in version of git add -i. See 'add.interactive.useBuiltin' in
 git-config(1).
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index ea56e85e70..b84d55a832 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -1285,4 +1285,18 @@ test_expect_success 'stash handles skip-worktree entries nicely' '
 	git rev-parse --verify refs/stash:A.t
 '
 
+test_expect_success 'stash -c stash.useBuiltin=false warning ' '
+	expected="stash.useBuiltin support has been removed" &&
+
+	git -c stash.useBuiltin=false stash 2>err &&
+	test_i18ngrep "$expected" err &&
+	env GIT_TEST_STASH_USE_BUILTIN=false git stash 2>err &&
+	test_i18ngrep "$expected" err &&
+
+	git -c stash.useBuiltin=true stash 2>err &&
+	test_must_be_empty err &&
+	env GIT_TEST_STASH_USE_BUILTIN=true git stash 2>err &&
+	test_must_be_empty err
+'
+
 test_done
-- 
2.25.1.377.g2d2118b814


^ permalink raw reply related	[relevance 2%]

* Re: Warnings in gc.log can prevent gc --auto from running
  2019-07-29 10:07  0% ` Jeff King
@ 2019-07-29 12:50  0%   ` Ævar Arnfjörð Bjarmason
  0 siblings, 0 replies; 43+ results
From: Ævar Arnfjörð Bjarmason @ 2019-07-29 12:50 UTC (permalink / raw)
  To: Jeff King; +Cc: Gregory Szorc, Eric Wong, git


On Mon, Jul 29 2019, Jeff King wrote:

> On Thu, Jul 25, 2019 at 07:18:57PM -0700, Gregory Szorc wrote:
>
>> I think I've found some undesirable behavior with regards to the
>> behavior of `git gc --auto`. The tl;dr is that a warning message written
>> to gc.log can result in `git gc --auto` effectively disabling itself for
>> gc.logExpiry. The problem is easier to trigger in 2.22 as a result of
>> enabling bitmap indices for bare repositories by default and the
>> behavior can easily result in performance degradation, especially on
>> servers.
>
> Yuck, thanks for reporting this.
>
> As you note, this is a special case of a much larger problem. The other
> common case is the "oops, you still have a lot of loose objects after
> repacking" warning. There's more discussion and some patches here:
>
>   https://public-inbox.org/git/20180716172717.237373-1-jonathantanmy@google.com/
>
> though I don't think any of the work that came out of that fundamentally
> solves the issue.

To add to that Gregory probably finds these two old reports of mine
interesting. The former is pretty much his report (but for a different
root cause, the loose object issue):
https://public-inbox.org/git/87inc89j38.fsf@evledraar.gmail.com/ &
https://public-inbox.org/git/87fu6bmr0j.fsf@evledraar.gmail.com/

>> I don't prescribe to know the best way to solve this problem. I just
>> know it is a footgun sitting in the default Git configuration. And the
>> footgun became a lot easier to fire with the introduction of warning
>> messages related to bitmap indices and again when bitmap indices were
>> enabled by default for bare repositories in Git 2.22.
>
> IMHO one way to mitigate this is to simply warn less. In particular, if
> we are auto-enabling bitmaps, then it doesn't necessarily make sense for
> us to warn about them being disabled.
>
> In the case of .keep files, we've already got 7328482253 (repack:
> disable bitmaps-by-default if .keep files exist, 2019-06-29), which
> should be in the next released version of Git. But I suspect that's
> racy with respect to somebody creating .keep files, and as you note
> there are other config options that might prevent us from generating
> bitmaps.
>
> Instead, it may make sense to turn the --write-bitmap-index option of
> pack-objects into a tri-state: true/false/auto. Then pack-objects would
> know that we are in best-effort mode, and would avoid warning in that
> case. That would also let git-repack express its intentions better to
> git-pack-objects, so we could replace 7328482253, and keep more of the
> logic in pack-objects, which is ultimately what has to make the decision
> about whether it can generate bitmaps.

Sounds like pentastate to me :) (penta = 5, had to look it up). I.e. in
most cases of "auto" we pick a true/false at the outset, whereas this is
true/true-but-dont-care-much/false/false-but-dont-care-much with "auto"
picking the "-but-dont-care-much" versions of a "soft" true/false.

On this general topic a *soft* poke about relying to
https://public-inbox.org/git/8736lnxlig.fsf@evledraar.gmail.com/ if you
have time. I think a "loose pack" might be a way forward for the loose
object proliferation, but maybe I'm wrong.

More generally we're really straining the gc.log pass-along-a-message
facility.

^ permalink raw reply	[relevance 0%]

* Re: 2.22 issue across samba
  2019-07-26 20:15  7% 2.22 issue across samba Gary Poli
@ 2019-07-29 10:10  8% ` Jeff King
  0 siblings, 0 replies; 43+ results
From: Jeff King @ 2019-07-29 10:10 UTC (permalink / raw)
  To: Gary Poli; +Cc: git@vger.kernel.org

On Fri, Jul 26, 2019 at 08:15:49PM +0000, Gary Poli wrote:

> I'm running git for windows installed locally. Windows 10 Pro version
> 1903 OS Build 18362.239. I have a repository on a UNIX machine running
> AIX 7.1 TL4 SP2. I use SAMBA 3.0.23d to mount the drive for use. I
> upgraded to git 2.22 and am having issues. Even starting from a fresh
> clone of the repo, the head immediately detaches. After a few commands
> like status or branch it stops recognizing the repo altogether. I
> suspect it is having trouble reading or writing to itself; perhaps the
> index is getting corrupted. I reverted to git 2.14 and I'm working
> fine again. I've got my system admin looking into updating both AIX
> and SAMBA, but I thought I would report the issue here as well. Let me
> know if you need anything else from me. Thanks.

I don't have any particular thoughts on what might be the cause here.
But if:

  - you can reliably produce the problem on git 2.22 but not on git 2.14

and

  - you are able to build Git from source

then it would be useful to use git-bisect between those versions to find the
commit introducing the problem.

-Peff

^ permalink raw reply	[relevance 8%]

* Re: Warnings in gc.log can prevent gc --auto from running
  2019-07-26  2:18 10% Warnings in gc.log can prevent gc --auto from running Gregory Szorc
@ 2019-07-29 10:07  0% ` Jeff King
  2019-07-29 12:50  0%   ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 43+ results
From: Jeff King @ 2019-07-29 10:07 UTC (permalink / raw)
  To: Gregory Szorc; +Cc: Eric Wong, git

On Thu, Jul 25, 2019 at 07:18:57PM -0700, Gregory Szorc wrote:

> I think I've found some undesirable behavior with regards to the
> behavior of `git gc --auto`. The tl;dr is that a warning message written
> to gc.log can result in `git gc --auto` effectively disabling itself for
> gc.logExpiry. The problem is easier to trigger in 2.22 as a result of
> enabling bitmap indices for bare repositories by default and the
> behavior can easily result in performance degradation, especially on
> servers.

Yuck, thanks for reporting this.

As you note, this is a special case of a much larger problem. The other
common case is the "oops, you still have a lot of loose objects after
repacking" warning. There's more discussion and some patches here:

  https://public-inbox.org/git/20180716172717.237373-1-jonathantanmy@google.com/

though I don't think any of the work that came out of that fundamentally
solves the issue.

> I don't prescribe to know the best way to solve this problem. I just
> know it is a footgun sitting in the default Git configuration. And the
> footgun became a lot easier to fire with the introduction of warning
> messages related to bitmap indices and again when bitmap indices were
> enabled by default for bare repositories in Git 2.22.

IMHO one way to mitigate this is to simply warn less. In particular, if
we are auto-enabling bitmaps, then it doesn't necessarily make sense for
us to warn about them being disabled.

In the case of .keep files, we've already got 7328482253 (repack:
disable bitmaps-by-default if .keep files exist, 2019-06-29), which
should be in the next released version of Git. But I suspect that's
racy with respect to somebody creating .keep files, and as you note
there are other config options that might prevent us from generating
bitmaps.

Instead, it may make sense to turn the --write-bitmap-index option of
pack-objects into a tri-state: true/false/auto. Then pack-objects would
know that we are in best-effort mode, and would avoid warning in that
case. That would also let git-repack express its intentions better to
git-pack-objects, so we could replace 7328482253, and keep more of the
logic in pack-objects, which is ultimately what has to make the decision
about whether it can generate bitmaps.

-Peff

^ permalink raw reply	[relevance 0%]

* 2.22 issue across samba
@ 2019-07-26 20:15  7% Gary Poli
  2019-07-29 10:10  8% ` Jeff King
  0 siblings, 1 reply; 43+ results
From: Gary Poli @ 2019-07-26 20:15 UTC (permalink / raw)
  To: git@vger.kernel.org

Hello,
	I'm running git for windows installed locally. Windows 10 Pro version 1903 OS Build 18362.239. I have a repository on a UNIX machine running AIX 7.1 TL4 SP2. I use SAMBA 3.0.23d to mount the drive for use. I upgraded to git 2.22 and am having issues. Even starting from a fresh clone of the repo, the head immediately detaches. After a few commands like status or branch it stops recognizing the repo altogether. I suspect it is having trouble reading or writing to itself; perhaps the index is getting corrupted. I reverted to git 2.14 and I'm working fine again. I've got my system admin looking into updating both AIX and SAMBA, but I thought I would report the issue here as well. Let me know if you need anything else from me. Thanks.


Gary Poli | Lead ERP Programmer
o 949 509 6216
4199 Campus Drive, 9th Floor
Irvine, CA 92612

This e-mail, including any accompanying attachments, may contain confidential information that is private, personal, and/or proprietary, and it is for the sole use of the intended recipient(s).  Any unauthorized review, use, distribution or disclosure by others is strictly prohibited.  If you have received this document in error, please immediately contact Gary Poli and delete all copies of this message.

^ permalink raw reply	[relevance 7%]

* Warnings in gc.log can prevent gc --auto from running
@ 2019-07-26  2:18 10% Gregory Szorc
  2019-07-29 10:07  0% ` Jeff King
  0 siblings, 1 reply; 43+ results
From: Gregory Szorc @ 2019-07-26  2:18 UTC (permalink / raw)
  To: git

I think I've found some undesirable behavior with regards to the
behavior of `git gc --auto`. The tl;dr is that a warning message written
to gc.log can result in `git gc --auto` effectively disabling itself for
gc.logExpiry. The problem is easier to trigger in 2.22 as a result of
enabling bitmap indices for bare repositories by default and the
behavior can easily result in performance degradation, especially on
servers.

`git gc --auto` will stop itself from running if a gc.log file newer
than gc.logExpiry (1 day by default) exists. The intention of this
behavior seems reasonable enough. However, it is relatively easy for a
relatively harmless gc.log file to exist and for that relatively
harmless gc.log file to effectively disable `git gc --auto`.

For example, if bitmap indices are being produced (this is the default
behavior for bare repositories in Git 2.22) and the user has taken any
action that would result in a `git gc` producing multiple packfiles
(setting gc.bigPackThreshold, setting pack.packSizeLimit, annotating a
packfile with a .keep file, etc) then a message like "warning: disabling
bitmap writing, as some objects are not being packed" or "warning:
disabling bitmap writing, packs are split due to pack.packSizeLimit" may
be written to gc.log. This warning message will result in the presence
of a gc.log file, which will cause `git gc --auto` to stop doing
meaningful work until gc.logExpiry has passed or the gc.log is cleaned
up out-of-band.

The practical impact of this behavior is that an environment having only
made minor tweaks to tweak packfile behavior may end up inadvertently
disabling `git gc --auto` and having excessive amounts of packfiles and
loose object files accumulate since `git gc --auto` isn't running. This
can result in performance degradation, especially for repositories
receiving hundreds or thousands of pushes a day - ask me how I know :)

I was able to work around this in a server environment by removing
gc.log if the contents were "harmless" warning messages, unblocking `git
gc --auto`. However, the solution is a bit brittle. As an end-user of
Git, I would prefer a `git gc --auto` execution mode that was less
sensitive to the presence of non-fatal messages in gc.log. Lowering the
value of gc.logExpiry is also a somewhat reasonable solution. I /think/
you could even make the value "now" to effectively disable the gc.log
check, but I haven't tested this. I don't feel great about that
workaround though, as if there is an actual gc/repack error, I'd like to
know about it instead of sweeping it under the rug by continuously
deleting the gc.log file. I'm also not keen on triggering `git gc --auto
--force` because --force will ignore lock files and I like respecting
lock files.

I don't prescribe to know the best way to solve this problem. I just
know it is a footgun sitting in the default Git configuration. And the
footgun became a lot easier to fire with the introduction of warning
messages related to bitmap indices and again when bitmap indices were
enabled by default for bare repositories in Git 2.22.

Gregory Szorc
gregory.szorc@gmail.com


^ permalink raw reply	[relevance 10%]

* Git 2.22 , --preserve-merges fails with custom commentChar
@ 2019-06-24 16:01 14% Dmitriy Smirnov
  0 siblings, 0 replies; 43+ results
From: Dmitriy Smirnov @ 2019-06-24 16:01 UTC (permalink / raw)
  To: git; +Cc: Kirill Likhodedov, Aleksey Pivovarov

Hello,

I know —preserve-merges is deprecated now and —rebase-merges should be used instead, however it is still possible to pass —preserve-merges flag, so the issue seems worth reporting.

In git 2.22, —preserve-merges does not work when custom commentchar is used. It shows the editor to select options bu then fails:

➜  ProjectRoot git:(master) git -c core.quotepath=false -c log.showSignature=false -c core.commentChar=@ rebase --interactive --preserve-merges --no-autosquash 554597b2e2c73e636b9c0cdf24dacba38568d02b
warning: git rebase --preserve-merges is deprecated. Use --rebase-merges instead.
error: invalid line 6: @ Rebase 554597b..a8702dd onto 554597b (4 commands)
error: invalid line 6: @ Rebase 554597b..0607564 onto 554597b (4 commands)
error: invalid line 7: @
error: invalid line 8: @ Commands:
error: invalid line 9: @ p, pick <commit> = use commit
error: invalid line 10: @ r, reword <commit> = use commit, but edit the commit message
error: invalid line 11: @ e, edit <commit> = use commit, but stop for amending
error: invalid line 12: @ s, squash <commit> = use commit, but meld into previous commit
error: invalid line 13: @ f, fixup <commit> = like "squash", but discard this commit's log message
error: invalid line 14: @ x, exec <commit> = run command (the rest of the line) using shell
error: invalid line 15: @ d, drop <commit> = remove commit
error: invalid line 16: @ l, label <label> = label current HEAD with a name
error: invalid line 17: @ t, reset <label> = reset HEAD to a label
error: invalid line 18: @ m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
error: invalid line 19: @ .       create a merge commit using the original merge commit's
error: invalid line 20: @ .       message (or the oneline, if no original merge commit was
error: invalid line 21: @ .       specified). Use -c <commit> to reword the commit message.
error: invalid line 22: @
error: invalid line 23: @ These lines can be re-ordered; they are executed from top to bottom.
error: invalid line 24: @
error: invalid line 25: @ If you remove a line here THAT COMMIT WILL BE LOST.
error: invalid line 26: @
error: invalid line 27: @ However, if you remove everything, the rebase will be aborted.
error: invalid line 28: @
error: invalid line 29: @ Note that empty commits are commented out
error: unusable todo list: '.git/rebase-merge/git-rebase-todo'
error: invalid line 6: @ Rebase 554597b..0607564 onto 554597b (4 commands)
error: invalid line 7: @
error: invalid line 8: @ Commands:
error: invalid line 9: @ p, pick <commit> = use commit
error: invalid line 10: @ r, reword <commit> = use commit, but edit the commit message
error: invalid line 11: @ e, edit <commit> = use commit, but stop for amending
error: invalid line 12: @ s, squash <commit> = use commit, but meld into previous commit
error: invalid line 13: @ f, fixup <commit> = like "squash", but discard this commit's log message
error: invalid line 14: @ x, exec <commit> = run command (the rest of the line) using shell
error: invalid line 15: @ d, drop <commit> = remove commit
error: invalid line 16: @ l, label <label> = label current HEAD with a name
error: invalid line 17: @ t, reset <label> = reset HEAD to a label
error: invalid line 18: @ m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
error: invalid line 19: @ .       create a merge commit using the original merge commit's
error: invalid line 20: @ .       message (or the oneline, if no original merge commit was
error: invalid line 21: @ .       specified). Use -c <commit> to reword the commit message.
error: invalid line 22: @
error: invalid line 23: @ These lines can be re-ordered; they are executed from top to bottom.
error: invalid line 24: @
error: invalid line 25: @ If you remove a line here THAT COMMIT WILL BE LOST.
error: invalid line 26: @
error: invalid line 27: @ However, if you remove everything, the rebase will be aborted.
error: invalid line 28: @
error: invalid line 29: @ Note that empty commits are commented out

^ permalink raw reply	[relevance 14%]

* Re: [RFC PATCH] rev-list: clarify --abbrev and --abbrev-commit usage
  @ 2019-06-14 22:56 10%       ` Emily Shaffer
  0 siblings, 0 replies; 43+ results
From: Emily Shaffer @ 2019-06-14 22:56 UTC (permalink / raw)
  To: Jeff King; +Cc: git

On Fri, Jun 14, 2019 at 05:27:14PM -0400, Jeff King wrote:
> On Fri, Jun 14, 2019 at 01:59:50PM -0700, Emily Shaffer wrote:
> 
> > > So no, I cannot see a way in which "rev-list --abbrev" is useful without
> > > "--abbrev-commit". Which means that perhaps the former should imply the
> > > latter.
> > 
> > Maybe it should; maybe this patch is a good excuse to do so, and enforce
> > mutual exclusion of --abbrev-commit/--abbrev and --no-abbrev. Maybe it's
> > also a good time to add --abbrev-commit=<length>?
> 
> Hmm, yeah, I think that would reduce confusion quite a bit. If it were
> "--abbrev-commit=<length>", then "--abbrev" would not be useful for
> anything in rev-list. It would still work as a historical item, but we
> would not need or want to advertise it in the usage at all. Good
> suggestion.

Given your comments below, I think rather than enforcing mutual
exclusion it makes more sense to enforce last-one-wins. But the thinking
is essentially the same.

> 
> > > is not right. Possibly:
> > > 
> > >   --abbrev-commit [--abbrev=<n>] | --no-abbrev
> > > 
> > > would show the interaction more clearly, but I don't have a strong
> > > opinion.
> > 
> > I did consider demonstrating it this way, but when both --abbrev-commit
> > and --no-abbrev are used together, we don't complain or reject the
> > invocation - which I would expect if the usage states the two options
> > are mutually exclusive.
> 
> Ah, I see. I don't consider "|" to indicate an exclusion to the point
> that the options are rejected. Only that you wouldn't want to use both,
> because one counteracts the other. So every "--no-foo" is mutually
> exclusive with "--foo" in the sense that one override the other. But the
> outcome is "last one wins", and not "whoops, we cannot figure out what
> you meant". And that's what the original:
> 
>       --abbrev=<n> | --no-abbrev
> 
> before your patch was trying to say (and I suspect there are many other
> cases of "|" with this kind of last-one-wins behavior).

For what it's worth, in this case it's not last-one-wins - --no-abbrev
always wins:

  emilyshaffer@podkayne:~/git [master]$ g rev-list --abbrev-commit
  --no-abbrev --max-count=5 --pretty=oneline HEAD
  b697d92f56511e804b8ba20ccbe7bdc85dc66810 Git 2.22
  6ee1eaca3e996e69691f515742129645f453e0e8 Merge tag 'l10n-2.22.0-rnd3' of
    git://github.com/git-l10n/git-po
  0cdb8d2db2f39d1a29636975168c457d2dc0d466 Merge branch 'fr_review' of
    git://github.com/jnavila/git
  d0149200792f579151166a4a5bfae7e66c5d998b Merge branch 'master' of
    git://github.com/alshopov/git-po
  82eb147dbbbd0221980883e87ca7efd16a939a6f l10n: fr.po: Review French
    translation
  emilyshaffer@podkayne:~/git [master]$ g rev-list --no-abbrev
  --abbrev-commit --max-count=5 --pretty=oneline HEAD
  b697d92f56511e804b8ba20ccbe7bdc85dc66810 Git 2.22
  6ee1eaca3e996e69691f515742129645f453e0e8 Merge tag 'l10n-2.22.0-rnd3' of
    git://github.com/git-l10n/git-po
  0cdb8d2db2f39d1a29636975168c457d2dc0d466 Merge branch 'fr_review' of
    git://github.com/jnavila/git
  d0149200792f579151166a4a5bfae7e66c5d998b Merge branch 'master' of
    git://github.com/alshopov/git-po
  82eb147dbbbd0221980883e87ca7efd16a939a6f l10n: fr.po: Review French
    translation
  emilyshaffer@podkayne:~/git [master]$ g rev-list --abbrev-commit
  --max-count=5 --pretty=oneline HEAD
  b697d92f56 Git 2.22
  6ee1eaca3e Merge tag 'l10n-2.22.0-rnd3' of
    git://github.com/git-l10n/git-po
  0cdb8d2db2 Merge branch 'fr_review' of git://github.com/jnavila/git
  d014920079 Merge branch 'master' of git://github.com/alshopov/git-po
  82eb147dbb l10n: fr.po: Review French translation

> 
> > I've been trying to think of good reasons not to enforce their mutual
> > exclusion, and the one I keep coming back to is that --no-abbrev might
> > be desired to override a git config'd abbreviation length - although I
> > didn't check to see whether we have one, maybe we would want one later.
> > And even in that case, I suppose that --abbrev-commit would not be
> > explicitly added to the call (because we'd infer from the config), or
> > that if it did need to be explicitly added (like if we need the user to
> > say they want abbreviation, but we want to use their configured
> > preferred length) then we could still reject the addition of
> > --no-abbrev.
> >
> > So maybe it makes even more sense to take this patch as an opportunity
> > to make these options mutually exclusive... although that checking I
> > think would wind up in revision.c, and therefore widen the impact of
> > the change significantly.
> 
> You can configure core.abbrev, though I'm not sure if it ever requests
> abbreviation itself, or if it simply sets the length when we do happen
> to abbreviate based on command-line options.
> 
> But forgetting config for a moment, last-one-wins is useful even among
> command line options. E.g., imagine an alias like this:
> 
>   [alias]
>   mylog = git rev-list --abbrev-commit --pretty=oneline
> 
> It's nice if you can run "git mylog --no-abbrev" and have it do what you
> expect, instead of complaining "you cannot use --abbrev-commit and
> --no-abbrev together".
> 
> That's a toy example, but you can imagine more elaborate scripts that
> set some default options, and allow arbitrary per-invocation options to
> be appended.

This makes a lot more sense than the scenarios I was imagining. Thanks.

I think a good solution here is to go and add --abbrev-commit=<n>
without breaking support for --abbrev=<n>; I'm a little more worried
about changing --no-abbrev to last-one-wins but I'll take a crack at it
and see what the test suite says. While I'm at it, I'll check for
last-one-wins with multiple instances of --abbrev[-commit]=<n>.

Having done so, I'll also change the documentation here in rev-list to:
 --abbrev-commit[=<n>] [--abbrev=<n>] | --no-abbrev

Sounds like a fun bit of low hanging fruit to me. Hoping to have a short
turnaround. :)

 - Emily

^ permalink raw reply	[relevance 10%]

* Re: [PATCH v3 00/10] Filter combination
  @ 2019-06-14 19:50  8%   ` Junio C Hamano
  0 siblings, 0 replies; 43+ results
From: Junio C Hamano @ 2019-06-14 19:50 UTC (permalink / raw)
  To: Matthew DeVore
  Cc: git, jonathantanmy, jrn, dstolee, jeffhost, jrnieder, pclouds,
	peff, emilyshaffer, matvore

Matthew DeVore <matvore@google.com> writes:

> It has been a while since a sent a roll-up. Here are the changes since v2:
>
>  - Re-use more URL-encoding logic in strbuf.c
>    * This was partially achieved by changing the helper function to accept a
>      function that will indicate whether some character must be escaped.
>  - Re-use more URL-decoding logic in url.c
>  - changed the filter_spec strbuf to a string_list to avoid explicit
>    initialization
>  - Remove logic to "expand" tree:#k and tree:#m filter specs since there is no
>    server that supports tree:# but does not support tree:#k, as they were
>    implemented at the same time.

Since the v2 of this topic, cc/list-objects-filter-wo-sparse-path
was merged to the mainline before Git 2.22 was tagged.  As we won't
be merging this topic to any maintenance track anyway, it is
probably a good time to rebase it on v2.22.0, to avoid unnecessary
conflicts.

Thanks.

^ permalink raw reply	[relevance 8%]

* Re: advertised commit fetch using commit id fails
  2019-06-14 10:54  7% advertised commit fetch using commit id fails Karen Arutyunov
@ 2019-06-14 15:27  0% ` Jeff King
  0 siblings, 0 replies; 43+ results
From: Jeff King @ 2019-06-14 15:27 UTC (permalink / raw)
  To: Karen Arutyunov; +Cc: git

On Fri, Jun 14, 2019 at 01:54:15PM +0300, Karen Arutyunov wrote:

> git 2.22, in contrast to previous versions, fails to fetch advertised commit
> using commit id:
>
> Is it a bug or advertised object semantics change?

This is working as designed, but the behavior is a rather tricky
historical case. The change you're seeing is due to 34066f0661 (fetch:
do not consider peeled tags as advertised tips, 2019-04-13), and there's
further discussion in the thread at:

  https://public-inbox.org/git/20180610143231.7131-1-kirr@nexedi.com/

Basically, upload-pack has never considered the peeled value of a tag to
be "advertised" for the purposes of letting the client request it. But
by default, in git-over-http mode, the server does act as if
uploadpack.allowReachableSHA1InWant is set, which comes from 051e4005a3
(helping smart-http/stateless-rpc fetch race, 2011-08-05).

So even though the server does not advertise that it will accept non-tip
sha1s, it happened to do so only over this one protocol. If you retry
your fetch over git:// or ssh, it would fail with any version.

It would also fail even with http for versions prior to v2.14, because
the bug to consider peeled tips as advertised on the client side comes
from fdb69d33c4 (fetch-pack: always allow fetching of literal SHA1s,
2017-05-15).

So in short, it was never supposed to work, but between bugs and
protocol vagaries, there are a few version and protocol combinations
where it did.

-Peff

^ permalink raw reply	[relevance 0%]

* advertised commit fetch using commit id fails
@ 2019-06-14 10:54  7% Karen Arutyunov
  2019-06-14 15:27  0% ` Jeff King
  0 siblings, 1 reply; 43+ results
From: Karen Arutyunov @ 2019-06-14 10:54 UTC (permalink / raw)
  To: git

Hello,

git 2.22, in contrast to previous versions, fails to fetch advertised 
commit using commit id:

$ git --version
git version 2.22.0

$ git init git
$ git -C git remote add origin https://github.com/git/git

$ git ls-remote https://github.com/git/git | grep v2.21
2bb64867dc05d9a8432488ddc1d22a194cee4d31	refs/tags/v2.21.0
8104ec994ea3849a968b4667d072fedd1e688642	refs/tags/v2.21.0^{}
e4be0477c7bd475c863a361d7d8aeaeab621606c	refs/tags/v2.21.0-rc0
d62dad7a7dca3f6a65162bf0e52cdf6927958e78	refs/tags/v2.21.0-rc0^{}
8b301c10ed2bc973cec4f8395dec90fce2df42fb	refs/tags/v2.21.0-rc1
8989e1950a845ceeb186d490321a4f917ca4de47	refs/tags/v2.21.0-rc1^{}
1c668b7b88be5f46f8dc8fe403842cdc663185d9	refs/tags/v2.21.0-rc2
35ee755a8c43bcb3c2786522d423f006c23d32df	refs/tags/v2.21.0-rc2^{}

$ git -C git fetch origin 8104ec994ea3849a968b4667d072fedd1e688642
error: Server does not allow request for unadvertised object 
8104ec994ea3849a968b4667d072fedd1e688642


Fetching using tag id still works:

$ git -C git fetch origin 2bb64867dc05d9a8432488ddc1d22a194cee4d31
remote: Enumerating objects: 255575, done.
remote: Total 255575 (delta 0), reused 0 (delta 0), pack-reused 255575
Receiving objects: 100% (255575/255575), 107.95 MiB | 2.34 MiB/s, done.
Resolving deltas: 100% (190845/190845), done.
 From https://github.com/git/git
  * branch            2bb64867dc05d9a8432488ddc1d22a194cee4d31 -> FETCH_HEAD


Fetching using commit id that is a tip of some branch works also:

$ git ls-remote https://github.com/git/git | grep 
b697d92f56511e804b8ba20ccbe7bdc85dc66810
b697d92f56511e804b8ba20ccbe7bdc85dc66810	refs/heads/maint
b697d92f56511e804b8ba20ccbe7bdc85dc66810	refs/tags/v2.22.0^{}

$ git -C git fetch origin b697d92f56511e804b8ba20ccbe7bdc85dc66810
remote: Enumerating objects: 260471, done.
remote: Total 260471 (delta 0), reused 0 (delta 0), pack-reused 260471
Receiving objects: 100% (260471/260471), 112.66 MiB | 2.33 MiB/s, done.
Resolving deltas: 100% (194715/194715), done.
 From https://github.com/git/git
  * branch            b697d92f56511e804b8ba20ccbe7bdc85dc66810 -> FETCH_HEAD


Note that the git version at the tip of the master branch 
(2.22.0.68.g0aae918dd9) behaves the same way.


git 2.21 fetches fine:

$ git --version
git version 2.21.0

$ git -C git fetch origin 8104ec994ea3849a968b4667d072fedd1e688642
remote: Enumerating objects: 255574, done.
remote: Total 255574 (delta 0), reused 0 (delta 0), pack-reused 255574
Receiving objects: 100% (255574/255574), 107.95 MiB | 2.15 MiB/s, done.
Resolving deltas: 100% (190845/190845), done.
 From https://github.com/git/git
  * branch            8104ec994ea3849a968b4667d072fedd1e688642 -> FETCH_HEAD


Is it a bug or advertised object semantics change?

Best regards,
Karen

^ permalink raw reply	[relevance 7%]

* What's cooking in git.git (Jun 2019, #03; Wed, 12)
@ 2019-06-12 22:20  1% Junio C Hamano
  2019-06-13  2:05  0% ` Denton Liu
  0 siblings, 1 reply; 43+ results
From: Junio C Hamano @ 2019-06-12 22:20 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.

Git 2.22 final has been tagged.

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"]

* en/merge-directory-renames-fix (2019-06-05) 1 commit
  (merged to 'next' on 2019-06-06 at fd59bad9d7)
 + merge-recursive: restore accidentally dropped setting of path

 Recent code restructuring of merge-recursive engine introduced a
 regression dealing with rename/add conflict.

--------------------------------------------------
[New Topics]

* mo/hpux-dynpath (2019-06-07) 1 commit
 - configure: Detect linking style for HP aCC on HP-UX

 Auto-detect how to tell HP-UX aCC where to use dynamicallly linked
 libraries from at runtime.

 Will merge to 'next'.


* js/mergetool-optim (2019-06-12) 4 commits
 - mergetool: use shell variable magic instead of `awk`
 - mergetool: dissect strings with shell variable magic instead of `expr`
 - t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
 - t7610-mergetool: do not place pipelines headed by `yes` in subshells

 "git mergetool" and its tests now spawn fewer subprocesses.

 Will merge to 'next'.


* cc/test-oidmap (2019-06-11) 4 commits
 - oidmap: use sha1hash() instead of static hash() function
 - SQUASH??? sh style
 - t: add t0016-oidmap.sh
 - t/helper: add test-oidmap.c


* ds/midx-expire-repack (2019-06-11) 11 commits
 - t5319-multi-pack-index.sh: test batch size zero
 - midx: add test that 'expire' respects .keep files
 - multi-pack-index: test expire while adding packs
 - midx: implement midx_repack()
 - multi-pack-index: prepare 'repack' subcommand
 - multi-pack-index: implement 'expire' subcommand
 - midx: refactor permutation logic and pack sorting
 - midx: simplify computation of pack name lengths
 - multi-pack-index: prepare for 'expire' subcommand
 - Docs: rearrange subcommands for multi-pack-index
 - repack: refactor pack deletion for future use

 "git multi-pack-index" learned expire and repack subcommands.

 Will merge to 'next'.


* md/sort-detached-head-first (2019-06-11) 1 commit
 - ref-filter: sort detached HEAD lines firstly

 "git branch --list" learned to always output the detached HEAD as
 the first item (when the HEAD is detached, of course), instead of
 relying on the textual order of sorting


* nd/completion-no-cache-failure (2019-06-12) 1 commit
 - completion: do not cache if --git-completion-helper fails

 An incorrect list of options was cached after command line
 completion failed (e.g. trying to complete a command that requires
 a repository outside one), which has been corrected.

 Will merge to 'next'.


* sg/rebase-progress (2019-06-11) 4 commits
 - progress: use term_clear_line()
 - rebase: fix garbled progress display with '-x'
 - pager: add a helper function to clear the last line in the terminal
 - t3404-rebase-interactive: use the 'q_to_cr' helper

 Use "Erase in Line" CSI sequence that is already used in the editor
 support to clear cruft in the progress output.


* sg/trace2-rename (2019-06-12) 1 commit
 - Revert "test-lib: whitelist GIT_TR2_* in the environment"

 Dev support update to help tracing out tests.

 Will merge to 'next'.

--------------------------------------------------
[Stalled]

* jn/unknown-index-extensions (2018-11-21) 2 commits
 - index: offer advice for unknown index extensions
 - index: do not warn about unrecognized extensions

 A bit too alarming warning given when unknown index extensions
 exist is getting revamped.

 Expecting a reroll.


* jc/format-patch-delay-message-id (2019-04-05) 1 commit
 - format-patch: move message-id and related headers to the end

 The location "git format-patch --thread" adds the Message-Id:
 header in the series of header fields has been moved down, which
 may help working around a suspected bug in GMail MSA, reported at
 <CAHk-=whP1stFZNAaJiMi5eZ9rj0MRt20Y_yHVczZPH+O01d+sA@mail.gmail.com>

 Waiting for feedback to see if it truly helps.
 Needs tests.


* jt/fetch-cdn-offload (2019-03-12) 9 commits
 - SQUASH???
 - upload-pack: send part of packfile response as uri
 - fetch-pack: support more than one pack lockfile
 - upload-pack: refactor reading of pack-objects out
 - Documentation: add Packfile URIs design doc
 - Documentation: order protocol v2 sections
 - http-fetch: support fetching packfiles by URL
 - http: improve documentation of http_pack_request
 - http: use --stdin when getting dumb HTTP pack

 WIP for allowing a response to "git fetch" to instruct the bulk of
 the pack contents to be instead taken from elsewhere (aka CDN).

 Stalled


* js/protocol-advertise-multi (2018-12-28) 1 commit
 - protocol: advertise multiple supported versions

 The transport layer has been updated so that the protocol version
 used can be negotiated between the parties, by the initiator
 listing the protocol versions it is willing to talk, and the other
 side choosing from one of them.

 Expecting a reroll.
 cf. <CANq=j3u-zdb_FvNJGPCmygNMScseav63GhVvBX3NcVS4f7TejA@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".


* dl/remote-save-to-push (2018-12-11) 1 commit
 - remote: add --save-to-push option to git remote set-url

 "git remote set-url" learned a new option that moves existing value
 of the URL field to pushURL field of the remote before replacing
 the URL field with a new value.

 Anybody who wants to champion this topic?
 I am personally not yet quite convinced if this is worth pursuing.

--------------------------------------------------
[Cooking]

* fc/fetch-with-import-fix (2019-06-04) 5 commits
 - fetch: fix regression with transport helpers
 - fetch: make the code more understandable
 - fetch: trivial cleanup
 - t5801 (remote-helpers): add test to fetch tags
 - t5801 (remote-helpers): cleanup refspec stuff

 Code restructuring during 2.20 period broke fetching tags via
 "import" based transports.

 Will merge to 'next'.


* jl/status-reduce-vertical-blank (2019-06-04) 1 commit
 - status: remove the empty line after hints
 (this branch uses nd/switch-and-restore.)

 Extra blank lines in "git status" output have been reduced.

 Needs to wait on nd/switch-and-restore to stabilize.


* md/url-parse-harden (2019-06-04) 2 commits
  (merged to 'next' on 2019-06-06 at b187c3dbfe)
 + url: do not allow %00 to represent NUL in URLs
 + url: do not read past end of buffer

 The URL decoding code has been updated to avoid going past the end
 of the string while parsing %-<hex>-<hex> sequence.

 Will merge to 'master'.


* mo/clang-format-for-each-update (2019-06-04) 1 commit
  (merged to 'next' on 2019-06-06 at ee3066bb65)
 + clang-format: use git grep to generate the ForEachMacros list

 The list of for-each like macros used by clang-format has been
 updated.

 Will merge to 'master'.


* dl/config-alias-doc (2019-06-06) 2 commits
 - config/alias.txt: document alias accepting non-command first word
 - config/alias.txt: change " and ' to `

 Doc update.

 Will merge to 'next'.


* dl/includeif-onbranch (2019-06-05) 1 commit
 - config: learn the "onbranch:" includeIf condition

 The conditional inclusion mechanism learned to base the choice on
 the branch the HEAD currently is on.

 Will merge to 'next'.


* ds/commit-graph-incremental (2019-06-12) 16 commits
 - commit-graph: test --split across alternate without --split
 - commit-graph: test octopus merges with --split
 - commit-graph: clean up chains after flattened write
 - commit-graph: verify chains with --shallow mode
 - commit-graph: create options for split files
 - commit-graph: expire commit-graph files
 - commit-graph: allow cross-alternate chains
 - commit-graph: merge commit-graph chains
 - commit-graph: add --split option to builtin
 - commit-graph: write commit-graph chains
 - commit-graph: rearrange chunk count logic
 - commit-graph: add base graphs chunk
 - commit-graph: load commit-graph chains
 - commit-graph: rename commit_compare to oid_compare
 - commit-graph: prepare for commit-graph chains
 - commit-graph: document commit-graph chains
 (this branch uses ds/commit-graph-write-refactor; is tangled with ds/close-object-store.)

 The commits in a repository can be described by multiple
 commit-graph files now, which allows the commit-graph files to be
 updated incrementally.

 Will merge to 'next'.


* tm/tag-gpgsign-config (2019-06-05) 1 commit
 - tag: add tag.gpgSign config option to force all tags be GPG-signed

 A new tag.gpgSign configuration variable turns "git tag -a" into
 "git tag -s".

 Will merge to 'next'.


* md/list-objects-filter-memfix (2019-05-31) 1 commit
  (merged to 'next' on 2019-06-06 at 80f0187cef)
 + list-objects-filter: correct usage of ALLOC_GROW

 The filter_data used in the list-objects-filter (which manages a
 lazily sparse clone repository) did not use the dynamic array API
 correctly---'nr' is supposed to point at one past the last element
 of the array in use.  This has been corrected.

 Will merge to 'master'.


* md/list-objects-filter-parse-msgfix (2019-05-31) 1 commit
  (merged to 'next' on 2019-06-06 at 736f3c175b)
 + list-objects-filter-options: error is localizeable

 Make an end-user facing message localizable.

 Will merge to 'master'.


* cm/send-email-document-req-modules (2019-05-31) 1 commit
  (merged to 'next' on 2019-06-06 at acf1c2fc96)
 + send-email: update documentation of required Perl modules

 A doc update.

 Will merge to 'master'.


* po/doc-branch (2019-05-29) 1 commit
 - doc branch: provide examples for listing remote tracking branches

 Doc update.

 Will merge to 'next'.


* bb/unicode-12.1-reiwa (2019-05-29) 1 commit
  (merged to 'next' on 2019-05-30 at 016465335c)
 + unicode: update the width tables to Unicode 12.1

 Update to Unicode 12.1 width table.

 Will merge to 'master'.


* ab/hash-object-doc (2019-05-28) 1 commit
  (merged to 'next' on 2019-06-06 at 8e4d85b906)
 + hash-object doc: stop mentioning git-cvsimport

 Doc update.

 Will merge to 'master'.


* ds/object-info-for-prefetch-fix (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at ee0055b276)
 + sha1-file: split OBJECT_INFO_FOR_PREFETCH

 Code cleanup and futureproof.

 Will merge to 'master'.


* ds/topo-traversal-using-commit-graph (2019-05-28) 2 commits
  (merged to 'next' on 2019-05-30 at 590527995e)
 + revision: keep topo-walk free of unintersting commits
 + revision: use generation for A..B --topo-order queries

 Prepare use of reachability index in topological walker that works
 on a range (A..B).

 Will merge to 'master'.


* es/git-debugger-doc (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 449ba4ae6c)
 + doc: hint about GIT_DEBUGGER in CodingGuidelines

 Doc update.

 Will merge to 'master'.


* es/grep-require-name-when-needed (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at e1ec57894a)
 + grep: fail if call could output and name is null

 More parameter validation.

 Will merge to 'master'.


* ew/server-info-remove-crufts (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 655ba18f30)
 + server-info: do not list unlinked packs

 "git update-server-info" used to leave stale packfiles in its
 output, which has been corrected.

 Will merge to 'master'.


* jk/HEAD-symref-in-xfer-namespaces (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at c2cfe38955)
 + upload-pack: strip namespace from symref data

 The server side support for "git fetch" used to show incorrect
 value for the HEAD symbolic ref when the namespace feature is in
 use, which has been corrected.

 Will merge to 'master'.


* jk/am-i-resolved-fix (2019-05-28) 4 commits
  (merged to 'next' on 2019-05-29 at e711103b1a)
 + am: fix --interactive HEAD tree resolution
 + am: drop tty requirement for --interactive
 + am: read interactive input from stdin
 + am: simplify prompt response handling

 "git am -i --resolved" segfaulted after trying to see a commit as
 if it were a tree, which has been corrected.

 Will merge to 'master'.


* js/bisect-helper-check-get-oid-return-value (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 24125b3bc0)
 + bisect--helper: verify HEAD could be parsed before continuing

 Code cleanup.

 Will merge to 'master'.


* js/bundle-verify-require-object-store (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 747fbbaf11)
 + bundle verify: error out if called without an object database

 "git bundle verify" needs to see if prerequisite objects exist in
 the receiving repository, but the command did not check if we are
 in a repository upfront, which has been corrected.

 Will merge to 'master'.


* js/fsmonitor-unflake (2019-05-28) 2 commits
  (merged to 'next' on 2019-05-30 at 1aa850bc59)
 + mark_fsmonitor_valid(): mark the index as changed if needed
 + fill_stat_cache_info(): prepare for an fsmonitor fix

 The data collected by fsmonitor was not properly written back to
 the on-disk index file, breaking t7519 tests occasionally, which
 has been corrected.

 Will merge to 'master'.


* mm/p4-unshelve-windows-fix (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-31 at d45167d723)
 + p4 unshelve: fix "Not a valid object name HEAD0" on Windows

 The command line to invoke a "git cat-file" command from inside
 "git p4" was not properly quoted to protect a caret and running a
 broken command on Windows, which has been corrected.

 Will merge to 'master'.


* pb/request-pull-verify-remote-ref (2019-05-28) 2 commits
  (merged to 'next' on 2019-05-31 at 0f73300dfa)
 + request-pull: warn if the remote object is not the same as the local one
 + request-pull: quote regex metacharacters in local ref

 "git request-pull" learned to warn when the ref we ask them to pull
 from in the local repository and in the published repository are
 different.

 Will merge to 'master'.


* po/git-help-on-git-itself (2019-05-16) 2 commits
  (merged to 'next' on 2019-05-31 at 455541d73a)
 + Doc: git.txt: remove backticks from link and add git-scm.com/docs
 + git.c: show usage for accessing the git(1) help page

 "git help git" was hard to discover (well, at least for some
 people).

 Will merge to 'master'.


* sw/git-p4-unshelve-branched-files (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-30 at e1985f61fc)
 + git-p4: allow unshelving of branched files

 "git p4" update.

 Will merge to 'master'.


* vv/merge-squash-with-explicit-commit (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 209baa3e55)
 + merge: refuse --commit with --squash

 "git merge --squash" is designed to update the working tree and the
 index without creating the commit, and this cannot be countermanded
 by adding the "--commit" option; the command now refuses to work
 when both options are given.

 Will merge to 'master'.


* xl/record-partial-clone-origin (2019-05-29) 1 commit
  (merged to 'next' on 2019-05-31 at dc291fa199)
 + clone: respect user supplied origin name when setting up partial clone

 When creating a partial clone, the object filtering criteria is
 recorded for the origin of the clone, but this incorrectly used a
 hardcoded name "origin" to name that remote; it has been corrected
 to honor the "--origin <name>" option.

 Will merge to 'master'.


* ab/fail-prereqs-in-test (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at d1be55f485)
 + tests: add a special setup where prerequisites fail

 Developer support to emulate unsatisfied prerequisites in tests to
 ensure that the remainer of the tests still succeeds when tests
 with prerequisites are skipped.

 Will merge to 'master'.


* jk/help-unknown-ref-fix (2019-05-15) 2 commits
  (merged to 'next' on 2019-05-19 at e3e01160f7)
 + help_unknown_ref(): check for refname ambiguity
 + help_unknown_ref(): duplicate collected refnames

 Improve the code to show args with potential typo that cannot be
 interpreted as a commit-ish.

 Will merge to 'master'.


* js/rebase-cleanup (2019-05-15) 5 commits
  (merged to 'next' on 2019-05-16 at ccfed8f263)
 + rebase: fold git-rebase--common into the -p backend
 + sequencer: the `am` and `rebase--interactive` scripts are gone
 + .gitignore: there is no longer a built-in `git-rebase--interactive`
 + t3400: stop referring to the scripted rebase
 + Drop unused git-rebase--am.sh

 Update supporting parts of "git rebase" to remove code that should
 no longer be used.

 Will merge to 'master'.


* jt/partial-clone-missing-ref-delta-base (2019-06-11) 4 commits
  (merged to 'next' on 2019-06-12 at 95628af9bb)
 + t5616: cover case of client having delta base
 + t5616: use correct flag to check object is missing
  (merged to 'next' on 2019-05-29 at 5d7573a151)
 + index-pack: prefetch missing REF_DELTA bases
 + t5616: refactor packfile replacement

 "git fetch" into a lazy clone forgot to fetch base objects that are
 necessary to complete delta in a thin packfile, which has been
 corrected.

 Will merge to 'master'.


* bl/userdiff-octave (2019-05-29) 2 commits
  (merged to 'next' on 2019-05-29 at 6ed07afc89)
 + userdiff: fix grammar and style issues
  (merged to 'next' on 2019-05-19 at 9ea1180d6c)
 + userdiff: add Octave

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Matlab has been extend to cover Octave, which is more
 or less equivalent.

 Will merge to 'master'.


* ew/update-server-info (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-19 at bf4f2871ab)
 + update-server-info: avoid needless overwrites

 "git update-server-info" learned not to rewrite the file with the
 same contents.

 Will merge to 'master'.


* nd/corrupt-worktrees (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at d92c25f800)
 + worktree add: be tolerant of corrupt worktrees

 "git worktree add" used to fail when another worktree connected to
 the same repository was corrupt, which has been corrected.

 Will merge to 'master'.


* mh/import-transport-fd-fix (2019-05-16) 2 commits
  (merged to 'next' on 2019-05-19 at 5e86f92f7a)
 + Use xmmap_gently instead of xmmap in use_pack
 + dup() the input fd for fast-import used for remote helpers

 The ownership rule for the file descriptor to fast-import remote
 backend was mixed up, leading to unrelated file descriptor getting
 closed, which has been fixed.

 Will merge to 'master'.


* ab/deprecate-R-for-dynpath (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at 944976e981)
 + Makefile: remove the NO_R_TO_GCC_LINKER flag

 The way of specifying the path to find dynamic libraries at runtime
 has been simplified.  The old default to pass -R/path/to/dir has been
 replaced with the new default to pass -Wl,-rpath,/path/to/dir,
 which is the more recent GCC uses.  Those who need to build with an
 old GCC can still use "CC_LD_DYNPATH=-R"

 Will merge to 'master'.


* ba/clone-remote-submodules (2019-05-28) 1 commit
  (merged to 'next' on 2019-05-29 at 71972f94c2)
 + clone: add `--remote-submodules` flag

 "git clone --recurse-submodules" learned to set up the submodules
 to ignore commit object names recorded in the superproject gitlink
 and instead use the commits that happen to be at the tip of the
 remote-tracking branches from the get-go, by passing the new
 "--remote-submodules" option.

 Will merge to 'master'.


* ds/close-object-store (2019-06-12) 3 commits
 - packfile: rename close_all_packs to close_object_store
 - packfile: close commit-graph in close_all_packs
 - commit-graph: use raw_object_store when closing
 (this branch uses ds/commit-graph-write-refactor; is tangled with ds/commit-graph-incremental.)

 The commit-graph file is now part of the "files that the runtime
 may keep open file descriptors on, all of which would need to be
 closed when done with the object store", and the file descriptor to
 an existing commit-graph file now is closed before "gc" finalizes a
 new instance to replace it.

 Will merge to 'next'.


* ml/userdiff-rust (2019-05-30) 2 commits
  (merged to 'next' on 2019-06-12 at 33b88fa9e5)
 + userdiff: two simplifications of patterns for rust
  (merged to 'next' on 2019-05-19 at 1266fddce5)
 + userdiff: add built-in pattern for rust

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Rust has been added.

 Will merge to 'master'.


* pw/rebase-edit-message-for-replayed-merge (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at dc3e30641c)
 + rebase -r: always reword merge -c

 A "merge -c" instruction during "git rebase --rebase-merges" should
 give the user a chance to edit the log message, even when there is
 otherwise no need to create a new merge and replace the existing
 one (i.e. fast-forward instead), but did not.  Which has been
 corrected.

 Will merge to 'master'.


* sb/format-patch-base-patch-id-fix (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-15 at 1ab7d2b71c)
 + format-patch: make --base patch-id output stable
 + format-patch: inform user that patch-id generation is unstable

 The "--base" option of "format-patch" computed the patch-ids for
 prerequisite patches in an unstable way, which has been updated to
 compute in a way that is compatible with "git patch-id --stable".

 Will merge to 'master'.


* ab/send-email-transferencoding-fix (2019-05-29) 7 commits
  (merged to 'next' on 2019-05-29 at c8a99d18c0)
 + send-email: fix regression in sendemail.identity parsing
 + send-email: document --no-[to|cc|bcc]
 + send-email: fix broken transferEncoding tests
 + send-email: remove cargo-culted multi-patch pattern in tests
  (merged to 'next' on 2019-05-13 at 38c6a1e7e0)
 + send-email: do defaults -> config -> getopt in that order
 + send-email: rename the @bcclist variable for consistency
 + send-email: move the read_config() function above getopts

 Since "git send-email" learned to take 'auto' as the value for the
 transfer-encoding, it by mistake stopped honoring the values given
 to the configuration variables sendemail.transferencoding and/or
 sendemail.<ident>.transferencoding.  This has been corrected to
 (finally) redoing the order of setting the default, reading the
 configuration and command line options.

 Will merge to 'master'.


* dl/format-patch-notes-config (2019-05-17) 2 commits
  (merged to 'next' on 2019-05-19 at d3f6f1872b)
 + format-patch: teach format.notes config option
 + git-format-patch.txt: document --no-notes option

 "git format-patch" learns a configuration to set the default for
 its --notes=<ref> option.

 Will merge to 'master'.


* jk/unused-params-final-batch (2019-05-13) 14 commits
  (merged to 'next' on 2019-05-15 at ef7435264c)
 + verify-commit: simplify parameters to run_gpg_verify()
 + show-branch: drop unused parameter from show_independent()
 + rev-list: drop unused void pointer from finish_commit()
 + remove_all_fetch_refspecs(): drop unused "remote" parameter
 + receive-pack: drop unused "commands" from prepare_shallow_update()
 + pack-objects: drop unused rev_info parameters
 + name-rev: drop unused parameters from is_better_name()
 + mktree: drop unused length parameter
 + wt-status: drop unused status parameter
 + read-cache: drop unused parameter from threaded load
 + clone: drop dest parameter from copy_alternates()
 + submodule: drop unused prefix parameter from some functions
 + builtin: consistently pass cmd_* prefix to parse_options
 + cmd_{read,write}_tree: rename "unused" variable that is used

 Remove many unused parameters throughout the codebase, with the
 ultimate aim to allow us compile with -Wunused-parameter cleanly.

 Will merge to 'master'.


* nd/init-relative-template-fix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 4d5b17f712)
 + init: make --template path relative to $CWD

 A relative pathname given to "git init --template=<path> <repo>"
 ought to be relative to the directory "git init" gets invoked in,
 but it instead was made relative to the repository, which has been
 corrected.

 Will merge to 'master'.


* an/ignore-doc-update (2019-06-04) 1 commit
  (merged to 'next' on 2019-06-06 at 8579d82c0d)
 + gitignore.txt: make slash-rules more readable

 The description about slashes in gitignore patterns (used to
 indicate things like "anchored to this level only" and "only
 matches directories") has been revamped.

 Will merge to 'master'.


* en/fast-export-encoding (2019-05-14) 5 commits
  (merged to 'next' on 2019-05-16 at c88bd3edb5)
 + fast-export: do automatic reencoding of commit messages only if requested
 + fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
 + fast-export: avoid stripping encoding header if we cannot reencode
 + fast-import: support 'encoding' commit header
 + t9350: fix encoding test to actually test reencoding

 The "git fast-export/import" pair has been taught to handle commits
 with log messages in encoding other than UTF-8 better.

 Will merge to 'master'.


* nd/merge-quit (2019-05-19) 2 commits
  (merged to 'next' on 2019-05-19 at 9880e7ee4e)
 + merge: add --quit
 + merge: remove drop_save() in favor of remove_merge_branch_state()

 "git merge" learned "--quit" option that cleans up the in-progress
 merge while leaving the working tree and the index still in a mess.

 Will merge to 'master'.


* pw/rebase-abort-clean-rewritten (2019-05-15) 4 commits
 - rebase --abort/--quit: cleanup refs/rewritten
 - sequencer: return errors from sequencer_remove_state()
 - rebase: warn if state directory cannot be removed
 - rebase: fix a memory leak

 "git rebase --abort" used to leave refs/rewritten/ when concluding
 "git rebase -r", which has been corrected.

 On hold.
 cf. <20190514180349.17245-1-phillip.wood123@gmail.com>


* nb/branch-show-other-worktrees-head (2019-05-07) 3 commits
 - branch: add worktree info on verbose output
 - branch: update output to include worktree info
 - ref-filter: add worktreepath atom

 "git branch --list" learned to show branches that are checked out
 in other worktrees connected to the same repository prefixed with
 '+', similar to the way the currently checked out branch is shown
 with '*' in front.

 Will merge to 'next'.


* es/first-contrib-tutorial (2019-05-29) 3 commits
  (merged to 'next' on 2019-05-30 at 96317960ab)
 + doc: add some nit fixes to MyFirstContribution
  (merged to 'next' on 2019-05-19 at 9ddfae82bf)
 + documentation: add anchors to MyFirstContribution
 + documentation: add tutorial for first contribution

 A new tutorial targetting specifically aspiring git-core
 developers.

 Will merge to 'master'.


* cc/multi-promisor (2019-04-15) 17 commits
 - Move core_partial_clone_filter_default to promisor-remote.c
 - Move repository_format_partial_clone to promisor-remote.c
 - Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
 - remote: add promisor and partial clone config to the doc
 - partial-clone: add multiple remotes in the doc
 - t0410: test fetching from many promisor remotes
 - builtin/fetch: remove unique promisor remote limitation
 - promisor-remote: parse remote.*.partialclonefilter
 - diff: use promisor-remote.h instead of fetch-object.h
 - Use promisor_remote_get_direct() and has_promisor_remote()
 - promisor-remote: use repository_format_partial_clone
 - promisor-remote: add promisor_remote_reinit()
 - promisor-remote: implement promisor_remote_get_direct()
 - Add initial support for many promisor remotes
 - fetch-object: make functions return an error code
 - t0410: remove pipes after git commands
 - Merge branch 'jt/batch-fetch-blobs-in-diff' into cc/multi-promisor

 Teach the lazy clone machinery that there can be more than one
 promisor remote and consult them in order when downloading missing
 objects on demand.


* nd/switch-and-restore (2019-05-07) 43 commits
 - Declare both git-switch and git-restore experimental
 - help: move git-diff and git-reset to different groups
 - doc: promote "git restore"
 - user-manual.txt: prefer 'merge --abort' over 'reset --hard'
 - completion: support restore
 - t: add tests for restore
 - restore: support --patch
 - restore: replace --force with --ignore-unmerged
 - restore: default to --source=HEAD when only --staged is specified
 - restore: reject invalid combinations with --staged
 - restore: add --worktree and --staged
 - checkout: factor out worktree checkout code
 - restore: disable overlay mode by default
 - restore: make pathspec mandatory
 - restore: take tree-ish from --source option instead
 - checkout: split part of it to new command 'restore'
 - doc: promote "git switch"
 - completion: support switch
 - t: add tests for switch
 - switch: make --orphan switch to an empty tree
 - switch: reject if some operation is in progress
 - switch: no worktree status unless real branch switch happens
 - switch: implicit dwim, use --no-guess to disable it
 - switch: add short option for --detach
 - switch: only allow explicit detached HEAD
 - switch: reject "do nothing" case
 - switch: stop accepting pathspec
 - switch: remove -l
 - switch: add --discard-changes
 - switch: better names for -b and -B
 - checkout: split part of it to new command 'switch'
 - checkout: split options[] array in three pieces
 - checkout: move 'confict_style' and 'dwim_..' to checkout_opts
 - checkout: make "opts" in cmd_checkout() a pointer
 - checkout: factor out some code in parse_branchname_arg()
 - checkout: keep most #include sorted
 - checkout: inform the user when removing branch state
 - checkout: advice how to get out of detached HEAD mode
 - t: rename t2014-switch.sh to t2014-checkout-switch.sh
 - git-checkout.txt: fix monospace typeset
 - doc: document --overwrite-ignore
 - git-checkout.txt: fix one syntax line
 - git-checkout.txt: spell out --no-option
 (this branch is used by jl/status-reduce-vertical-blank.)

 Two new commands "git switch" and "git restore" are introduced to
 split "checking out a branch to work on advancing its history" and
 "checking out paths out of the index and/or a tree-ish to work on
 advancing the current history" out of the single "git checkout"
 command.

 Will merge to 'next'.
 cf. <20190329103919.15642-1-pclouds@gmail.com> (switch v6)
 cf. <20190425094600.15673-1-pclouds@gmail.com> (restore v3)


* jc/format-patch-noclobber (2019-02-22) 1 commit
 - format-patch: --no-clobber refrains from overwriting output files

 "git format-patch" used to overwrite an existing patch/cover-letter
 file.  A new "--no-clobber" option stops it.

 Undecided but inclined to discard.


* am/p4-branches-excludes (2019-04-02) 8 commits
 - git-p4: respect excluded paths when detecting branches
 - git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
 - git-p4: don't exclude other files with same prefix
 - git-p4: add failing test for "don't exclude other files with same prefix"
 - git-p4: don't groom exclude path list on every commit
 - git-p4: match branches case insensitively if configured
 - git-p4: add failing test for "git-p4: match branches case insensitively if configured"
 - git-p4: detect/prevent infinite loop in gitCommitByP4Change()

 "git p4" update.

 Is this ready for 'next'?


* dl/rebase-i-keep-base (2019-04-25) 6 commits
 - rebase: teach rebase --keep-base
 - rebase: fast-forward --fork-point in more cases
 - rebase: fast-forward --onto in more cases
 - rebase: refactor can_fast_forward into goto tower
 - t3432: test rebase fast-forward behavior
 - t3431: add rebase --fork-point tests

 "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.

 On hold.
 cf. <20190508001252.15752-1-avarab@gmail.com>
 cf. <xmqqa7fxionx.fsf@gitster-ct.c.googlers.com>


* nd/worktree-name-sanitization (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 9a2dd33122)
 + worktree add: sanitize worktree names

 In recent versions of Git, per-worktree refs are exposed in
 refs/worktrees/<wtname>/ hierarchy, which means that worktree names
 must be a valid refname component.  The code now sanitizes the names
 given to worktrees, to make sure these refs are well-formed.

 Will merge to 'master'.


* ds/commit-graph-write-refactor (2019-06-12) 11 commits
 - commit-graph: extract write_commit_graph_file()
 - commit-graph: extract copy_oids_to_commits()
 - commit-graph: extract count_distinct_commits()
 - commit-graph: extract fill_oids_from_all_packs()
 - commit-graph: extract fill_oids_from_commit_hex()
 - commit-graph: extract fill_oids_from_packs()
 - commit-graph: create write_commit_graph_context
 - commit-graph: remove Future Work section
 - commit-graph: collapse parameters into flags
 - commit-graph: return with errors during write
 - commit-graph: fix the_repository reference
 (this branch is used by ds/close-object-store and ds/commit-graph-incremental.)

 Renamed from commit-graph-format-v2 and changed scope.

 Will merge to 'next'.


* br/blame-ignore (2019-06-10) 9 commits
 - blame: add a test to cover blame_coalesce()
 - blame: use the fingerprint heuristic to match ignored lines
 - blame: add a fingerprint heuristic to match ignored lines
 - blame: optionally track line fingerprints during fill_blame_origin()
 - blame: add config options for the output of ignored or unblamable lines
 - blame: add the ability to ignore commits and their changes
 - blame: use a helper function in blame_chunk()
 - Move oidset_parse_file() to oidset.c
 - fsck: rename and touch up init_skiplist()

 "git blame" learned to "ignore" commits in the history, whose
 effects (as well as their presence) get ignored.

 cf. <20190610153014.42055-1-brho@google.com> (v8)

--------------------------------------------------
[Discarded]

* 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.

^ permalink raw reply	[relevance 1%]

* Re: What's cooking in git.git (Jun 2019, #03; Wed, 12)
  2019-06-12 22:20  1% What's cooking in git.git (Jun 2019, #03; Wed, 12) Junio C Hamano
@ 2019-06-13  2:05  0% ` Denton Liu
  0 siblings, 0 replies; 43+ results
From: Denton Liu @ 2019-06-13  2:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi Junio,

On Wed, Jun 12, 2019 at 03:20:02PM -0700, Junio C Hamano wrote:
> 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.
> 
> Git 2.22 final has been tagged.

Thanks for the hard work you put into Git!

> 
> 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]

Would it be possible for you to queue the "teach branch-specific options
for format-patch" patchset[1]? Even if it doesn't make it in its current
form, I believe that this patchset contains some changes that should be
relatively uncontroversial.

Thanks,

Denton

[1]: https://public-inbox.org/git/cover.1558492582.git.liu.denton@gmail.com/

^ permalink raw reply	[relevance 0%]

* Re: New command/tool: git filter-repo
  @ 2019-06-08 16:20  6%   ` Elijah Newren
  0 siblings, 0 replies; 43+ results
From: Elijah Newren @ 2019-06-08 16:20 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason; +Cc: Git Mailing List

Hi,

Now that there's a released version of git that has all necessary
flags and features[1] to run git filter-repo
(https://github.com/newren/git-filter-repo), I thought I'd send an
update...

On Fri, Feb 8, 2019 at 10:53 AM Ævar Arnfjörð Bjarmason
<avarab@gmail.com> wrote:
> On Thu, Jan 31 2019, Elijah Newren wrote:
>
> > What's the future?  (Core command of git.git?  place it in contrib?  keep it
> > in a separate repo?)  I'm hoping to discuss that at the contributor summit
> > today, but feedback on the list is also welcome.
>
> Some of this I may have mentioned at the summit, but here for the list:
>
> * I think it should be a candidate for a core (not "just contrib")
>   git.git command, given that we have someone willing to maintain it &
>   deal with bugs etc. I'm not worried about that given the author.
>
> * It's unfortunate in terms of API we need to support going forward that
>   this obligates us to support a fairly intricate python API going
>   forward, so it's similar (but more detailed) to Git.pm (which I also
>   tried to get rid of as an external API a while ago).
>
>   However, as you correctly note that's the only way a command like this
>   can be really fast, we already have the "no special API" command with
>   git-filter-branch, and that's horribly slow.
>
>   But perhaps there's ways we can in advance deal with a potential
>   future breaking API change. E.g. some Pythonic way of versioning the
>   API, or just prominently documenting whatever (low?) stability
>   guarantees we're making.
>
>   I imagine if we need to make breaking changes in the future that'll
>   less big of a deal than in other cases, since we'd expect the API use
>   to be one-off migration scripts, although maybe it'll get used for
>   all-the-time exports (e.g. mirroring internal->external repos with
>   filtering).
>
> * The rest of our commands are hooked up to the i18n framework. I don't
>   think this should be a blocker, but it's worth thinking about what the
>   plan for this is.
>
>   Are we going to need the equivalent of Git::I18N for Python (which
>   presumably will be a run-time dependency on something needing the
>   Python API that links to gettext).
>
>   Or perhaps we could do the translated strings in C, by making the
>   program you're invoking be a C command, invoking the Python part as a
>   helper (which would need to re-invoke a helper if it prints its own
>   messages).
>
> Thanks for working on this!

I've implemented these, and several other things too.  Changes since last time:

* Now i18n-ized
* Several disclaimers about API backcompat (this is more of a one-shot
conversion tool) [2]
* Converted to Python3 (Python2 is EOL at EOY)
* Pruning of become-empty and become-degenerate+empty commits has been
fixed up (I mentioned this as a concern last time)
* Testsuite has been fleshed out, including not only multiple small
fixes to filter repo, but more fixes to git itself[3]
* Usage, Examples, Internals, and Limitations documentation now exists
(in README.md format and built-in -h help; no manpage yet)
* Several new filters and abilities have been added

Now that filter-repo is complete and more easily tested, what are
folks thoughts on incorporating it in git.git?  (And if we do go that
route, can we avoid losing its history so I can bisect issues if
necessary?)

Thanks,
Elijah


[1] Well, except people will get an error if they use
--preserve-commit-encoding saying they don't have a new enough git
since en/fast-export-encoding is still sitting in next and didn't make
it in to git-2.22.  But I only know of one repo that even uses special
commit encodings, so I suspect few if any will even care about that
flag.

[2] The warnings appear in several places to try to make sure people
notice them; a not quite complete list:
https://github.com/newren/git-filter-repo/blame/master/README.md#L620-L625
https://github.com/newren/git-filter-repo/blame/master/README.md#L727-L730
https://github.com/newren/git-filter-repo/blame/master/README.md#L989-L993
https://github.com/newren/git-filter-repo/blob/master/git-filter-repo#L13-L30
https://github.com/newren/git-filter-repo/blob/master/git-filter-repo#L1523,L1524
https://github.com/newren/git-filter-repo/blob/master/t/t9391/commit_info.py#L4-L6
https://github.com/newren/git-filter-repo/blob/master/t/t9391/create_fast_export_output.py#L4-L6
https://github.com/newren/git-filter-repo/blob/master/t/t9391/file_filter.py#L4-L6
https://github.com/newren/git-filter-repo/blob/master/t/t9391/splice_repos.py#L4-L6
https://github.com/newren/git-filter-repo/blob/master/t/t9391/strip-cvs-keywords.py#L4-L6

[3] https://github.com/newren/git-filter-repo/tree/develop#upstream-improvements

^ permalink raw reply	[relevance 6%]

* Re: [ANNOUNCE] Git v2.22.0
  2019-06-07 21:31  4% [ANNOUNCE] Git v2.22.0 Junio C Hamano
@ 2019-06-07 22:48  0% ` Bhaskar Chowdhury
  0 siblings, 0 replies; 43+ 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  4% Junio C Hamano
  2019-06-07 22:48  0% ` Bhaskar Chowdhury
  0 siblings, 1 reply; 43+ 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 4%]

* Re: [GIT PULL] l10n updates for 2.22.0 round 3
  2019-06-07 10:08  8% [GIT PULL] l10n updates for 2.22.0 round 3 Jiang Xin
@ 2019-06-07 16:36  0% ` Junio C Hamano
  0 siblings, 0 replies; 43+ results
From: Junio C Hamano @ 2019-06-07 16:36 UTC (permalink / raw)
  To: Jiang Xin
  Cc: Alessandro Menti, Alexander Shopov, Cédric Malard,
	Christopher Diaz Riveros, Fangyi Zhou, Jean-Noël Avila,
	Jordi Mas, Matthias Rüster, Peter Krefting, Ralf Thielow,
	Tran Ngoc Quan, Git List

Jiang Xin <worldhello.net@gmail.com> writes:

> Please pull the following l10n updates for Git 2.22.0.
>
> The following changes since commit 74583d89127e21255c12dd3c8a3bf60b497d7d03:
>
>   Git 2.22-rc3 (2019-06-03 11:25:12 -0700)
>
> are available in the Git repository at:
>
>   git://github.com/git-l10n/git-po tags/l10n-2.22.0-rnd3
>
> for you to fetch changes up to 0cdb8d2db2f39d1a29636975168c457d2dc0d466:
>
>   Merge branch 'fr_review' of git://github.com/jnavila/git (2019-06-07 16:51:09 +0800)
>
> ----------------------------------------------------------------
> l10n-2.22.0-rnd3
>
> ----------------------------------------------------------------

Thanks, all.  Will pull.

> Alessandro Menti (1):
>       l10n: it.po: Updated Italian translation
>
> Alexander Shopov (3):
>       l10n: bg.po: Updated Bulgarian translation (4577t)
>       l10n: bg.po: Updated Bulgarian translation (4580t)
>       l10n: bg.po: Updated Bulgarian translation (4581t)
>
> 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
>
> Cédric Malard (1):
>       l10n: fr.po: Review French translation
>
> Fangyi Zhou (1):
>       l10n: zh_CN: Revision for git v2.22.0 l10n
>
> Jean-Noël Avila (3):
>       l10n: fr.po v2.22.0.rnd1
>       l10n: fr.po v2.22.0 round 2
>       l10n: fr v2.22.0 rnd 3
>
> Jiang Xin (15):
>       l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)
>       Merge branch 'master' of https://github.com/vnwildman/git
>       Merge branch 'master' of git://github.com/alshopov/git-po
>       Merge branch 'master' of https://github.com/Softcatala/git-po
>       Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
>       l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)
>       Merge branch 'master' of git://github.com/alshopov/git-po
>       Merge branch 'master' of https://github.com/vnwildman/git
>       Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
>       l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)
>       Merge branch 'it-l10n-wip' of github.com:AlessandroMenti/git-po
>       Merge branch '2.22' of https://github.com/ChrisADR/git-po
>       l10n: zh_CN: for git v2.22.0 l10n round 1~3
>       Merge branch 'master' of git://github.com/alshopov/git-po
>       Merge branch 'fr_review' of git://github.com/jnavila/git
>
> Jordi Mas (1):
>       l10n: Update Catalan translation
>
> Matthias Rüster (2):
>       l10n: TEAMS: Change German translation team leader
>       l10n: de.po: Update German translation
>
> Peter Krefting (2):
>       l10n: sv.po: Update Swedish translation
>       l10n: sv.po: Update Swedish translation (4577t0f0u)
>
> Ralf Thielow (1):
>       l10n: de.po: improve description of 'git reset --quiet'
>
> Trần Ngọc Quân (3):
>       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
>
>  po/TEAMS    |     8 +-
>  po/bg.po    |  7688 ++++++++++++++++++++++------------------
>  po/ca.po    |  8989 ++++++++++++++++++++++++-----------------------
>  po/de.po    |  7399 ++++++++++++++++++++++-----------------
>  po/es.po    |  7336 +++++++++++++++++++++-----------------
>  po/fr.po    |  7702 ++++++++++++++++++++++------------------
>  po/git.pot  |  7415 ++++++++++++++++++++++-----------------
>  po/it.po    | 11094 ++++++++++++++++++++++++++++++++--------------------------
>  po/sv.po    |  7229 ++++++++++++++++++++++----------------
>  po/vi.po    |  7342 +++++++++++++++++++++-----------------
>  po/zh_CN.po |  7143 +++++++++++++++++++++----------------
>  11 files changed, 44506 insertions(+), 34839 deletions(-)
>
> --
> Jiang Xin

^ permalink raw reply	[relevance 0%]

* [GIT PULL] l10n updates for 2.22.0 round 3
@ 2019-06-07 10:08  8% Jiang Xin
  2019-06-07 16:36  0% ` Junio C Hamano
  0 siblings, 1 reply; 43+ results
From: Jiang Xin @ 2019-06-07 10:08 UTC (permalink / raw)
  To: Junio C Hamano, Alessandro Menti, Alexander Shopov,
	Cédric Malard, Christopher Diaz Riveros, Fangyi Zhou,
	Jean-Noël Avila, Jiang Xin, Jordi Mas, Matthias Rüster,
	Peter Krefting, Ralf Thielow, Tran Ngoc Quan
  Cc: Git List

Hi Junio,

Please pull the following l10n updates for Git 2.22.0.

The following changes since commit 74583d89127e21255c12dd3c8a3bf60b497d7d03:

  Git 2.22-rc3 (2019-06-03 11:25:12 -0700)

are available in the Git repository at:

  git://github.com/git-l10n/git-po tags/l10n-2.22.0-rnd3

for you to fetch changes up to 0cdb8d2db2f39d1a29636975168c457d2dc0d466:

  Merge branch 'fr_review' of git://github.com/jnavila/git (2019-06-07 16:51:09 +0800)

----------------------------------------------------------------
l10n-2.22.0-rnd3

----------------------------------------------------------------
Alessandro Menti (1):
      l10n: it.po: Updated Italian translation

Alexander Shopov (3):
      l10n: bg.po: Updated Bulgarian translation (4577t)
      l10n: bg.po: Updated Bulgarian translation (4580t)
      l10n: bg.po: Updated Bulgarian translation (4581t)

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

Cédric Malard (1):
      l10n: fr.po: Review French translation

Fangyi Zhou (1):
      l10n: zh_CN: Revision for git v2.22.0 l10n

Jean-Noël Avila (3):
      l10n: fr.po v2.22.0.rnd1
      l10n: fr.po v2.22.0 round 2
      l10n: fr v2.22.0 rnd 3

Jiang Xin (15):
      l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)
      Merge branch 'master' of https://github.com/vnwildman/git
      Merge branch 'master' of git://github.com/alshopov/git-po
      Merge branch 'master' of https://github.com/Softcatala/git-po
      Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
      l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)
      Merge branch 'master' of git://github.com/alshopov/git-po
      Merge branch 'master' of https://github.com/vnwildman/git
      Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
      l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)
      Merge branch 'it-l10n-wip' of github.com:AlessandroMenti/git-po
      Merge branch '2.22' of https://github.com/ChrisADR/git-po
      l10n: zh_CN: for git v2.22.0 l10n round 1~3
      Merge branch 'master' of git://github.com/alshopov/git-po
      Merge branch 'fr_review' of git://github.com/jnavila/git

Jordi Mas (1):
      l10n: Update Catalan translation

Matthias Rüster (2):
      l10n: TEAMS: Change German translation team leader
      l10n: de.po: Update German translation

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation
      l10n: sv.po: Update Swedish translation (4577t0f0u)

Ralf Thielow (1):
      l10n: de.po: improve description of 'git reset --quiet'

Trần Ngọc Quân (3):
      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

 po/TEAMS    |     8 +-
 po/bg.po    |  7688 ++++++++++++++++++++++------------------
 po/ca.po    |  8989 ++++++++++++++++++++++++-----------------------
 po/de.po    |  7399 ++++++++++++++++++++++-----------------
 po/es.po    |  7336 +++++++++++++++++++++-----------------
 po/fr.po    |  7702 ++++++++++++++++++++++------------------
 po/git.pot  |  7415 ++++++++++++++++++++++-----------------
 po/it.po    | 11094 ++++++++++++++++++++++++++++++++--------------------------
 po/sv.po    |  7229 ++++++++++++++++++++++----------------
 po/vi.po    |  7342 +++++++++++++++++++++-----------------
 po/zh_CN.po |  7143 +++++++++++++++++++++----------------
 11 files changed, 44506 insertions(+), 34839 deletions(-)

--
Jiang Xin

^ permalink raw reply	[relevance 8%]

* Git for Windows v2.22.0-rc3, was Re: [ANNOUNCE] Git v2.22.0-rc3
  2019-06-03 20:23  4% [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; 43+ 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  4% [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; 43+ 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  4% [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; 43+ 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  4% Junio C Hamano
  2019-06-04  1:32  0% ` Ben Humphreys
                   ` (2 more replies)
  0 siblings, 3 replies; 43+ 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 4%]

* Git for Windows v2.22.0-rc2, was Re: [ANNOUNCE] Git v2.22.0-rc2
  2019-05-30 21:23  2% [ANNOUNCE] Git v2.22.0-rc2 Junio C Hamano
@ 2019-05-31 12:13  0% ` Johannes Schindelin
  0 siblings, 0 replies; 43+ results
From: Johannes Schindelin @ 2019-05-31 12:13 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers

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

Team,

here is the corresponding Git for Windows v2.22.0-rc2:

https://github.com/git-for-windows/git/releases/tag/v2.22.0-rc2.windows.1

So far, I am rather happy with the robustness of the release candidates,
but please y'all: test!

Thanks,
Johannes

On Thu, 30 May 2019, Junio C Hamano wrote:

> A release candidate Git v2.22.0-rc2 is now available for testing
> at the usual places.  It is comprised of 714 non-merge commits
> since v2.21.0, contributed by 67 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.22.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.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
> -------------------
>
> 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).
>    (merge 4c785c0edc js/rebase-config-bitfix later to maint).
>    (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
>
> --
> 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/xmqqpnnzws9q.fsf%40gitster-ct.c.googlers.com.
> For more options, visit https://groups.google.com/d/optout.
>

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.22.0-rc2
@ 2019-05-30 21:23  2% Junio C Hamano
  2019-05-31 12:13  0% ` Git for Windows v2.22.0-rc2, was " Johannes Schindelin
  0 siblings, 1 reply; 43+ results
From: Junio C Hamano @ 2019-05-30 21:23 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.22.0-rc2 is now available for testing
at the usual places.  It is comprised of 714 non-merge commits
since v2.21.0, contributed by 67 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.22.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.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
-------------------

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).
   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).

^ permalink raw reply	[relevance 2%]

* js/rebase-cleanup, was Re: What's cooking in git.git (May 2019, #03; Sun, 19)
  2019-05-19  9:04  1% What's cooking in git.git (May 2019, #03; Sun, 19) Junio C Hamano
@ 2019-05-21 18:32  0% ` Johannes Schindelin
  0 siblings, 0 replies; 43+ results
From: Johannes Schindelin @ 2019-05-21 18:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi Junio,

On Sun, 19 May 2019, Junio C Hamano wrote:

> The first release candidate Git 2.22-rc1 has been tagged.  There
> still are a few topics from 'next' that need to go to 'master'
> before the final, but otherwise this should be pretty close to the
> final version.  Knock knock...

Fingers crossed!

> I'll be offline for a week or so and will tag -rc2 early next week
> when I get back to the US.

Enjoy your time off.

> * js/rebase-cleanup (2019-05-15) 5 commits
>   (merged to 'next' on 2019-05-16 at ccfed8f263)
>  + rebase: fold git-rebase--common into the -p backend
>  + sequencer: the `am` and `rebase--interactive` scripts are gone
>  + .gitignore: there is no longer a built-in `git-rebase--interactive`
>  + t3400: stop referring to the scripted rebase
>  + Drop unused git-rebase--am.sh
>
>  Update supporting parts of "git rebase" to remove code that should
>  no longer be used.
>
>  Will cook in 'next'.

I guess you're saying that this is *not* one of those branches you want to
still merge into `master` before v2.22.0... Is this reading correct?

I ask because I have one more patch in the queue that cleans up the
NEEDSWORK in git.c that we can now address, and I kept it out of the patch
series in order to make it easier to merge down before v2.22 final...

Ciao,
Dscho

^ permalink raw reply	[relevance 0%]

* Re: [ANNOUNCE] Git v2.22.0-rc1
  2019-05-20 19:06  7% ` Bryan Turner
@ 2019-05-20 22:27  0%   ` Ævar Arnfjörð Bjarmason
  0 siblings, 0 replies; 43+ results
From: Ævar Arnfjörð Bjarmason @ 2019-05-20 22:27 UTC (permalink / raw)
  To: Bryan Turner
  Cc: Junio C Hamano, Git Users, Linux Kernel, git-packagers,
	Nguyễn Thái Ngọc Duy


On Mon, May 20 2019, Bryan Turner wrote:

> On Sun, May 19, 2019 at 10:00 AM Junio C Hamano <gitster@pobox.com> wrote:
>>
>>  * 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.
>
> It looks like with these changes it's no longer possible to use "-U"
> (or, I'd assume, "--unified") without adding an explicit number for
> context lines.
>
> Was it not intended that a user could pass "-U" to explicitly say "I
> want a unified diff with the default number of context lines"? Because
> it's always worked that way, as far as I can tell (certainly since
> early 1.7.x releases). Is it possible, with the new parse-options
> code, to restore that behavior? Removing that is likely to be a pretty
> big disruption for Bitbucket Server, which has always explicitly
> passed "-U" to "git diff". If the community wants to move forward with
> the change, I understand. I'm not trying to roadblock it; I'm just
> listing an explicit example of something that will be significantly
> affected by the change. Perhaps Git 2.22 could emit a warning about
> the change in behavior and then a subsequent version could turn it
> into an error, to give us (and anyone else relying on this behavior)
> more time to make adjustments?
>
> I'm aware a unified diff is the default output, but many commands have
> flags that essentially tell Git to do what it would do by default.
> That can help counter changes in the default, as well as safeguarding
> against new config options that allow specifying a different default
> (as it were). For example, "git diff" has "--no-color", which could
> override configuration and essentially applied the default
> behavior--until the default configuration was changed in 1.8.4 from
> "never" to "auto". By using "--no-color", even though we didn't "need"
> to, we were protected against that change in the default.

I don't know if argument-less -U was ever intended, but I think in light
of what you're saying we should consider it a regression to fix before
2.22.0 is out. CC-ing Duy who wrote d473e2e0e8 ("diff.c: convert
-U|--unified", 2019-01-27).

The bug there is that the old opt_arg() code would be torelant to empty
values. I noticed a similar change the other day with the --abbrev
option, but didn't think it was worth noting. Maybe it's a more general
problem, in both cases we had a blindspot in our tests.

^ permalink raw reply	[relevance 0%]

* Re: [ANNOUNCE] Git v2.22.0-rc1
  2019-05-19  9:04  3% [ANNOUNCE] Git v2.22.0-rc1 Junio C Hamano
  2019-05-19 20:30  0% ` Johannes Schindelin
@ 2019-05-20 19:06  7% ` Bryan Turner
  2019-05-20 22:27  0%   ` Ævar Arnfjörð Bjarmason
  1 sibling, 1 reply; 43+ results
From: Bryan Turner @ 2019-05-20 19:06 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Users, Linux Kernel, git-packagers

On Sun, May 19, 2019 at 10:00 AM Junio C Hamano <gitster@pobox.com> wrote:
>
>  * 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.

It looks like with these changes it's no longer possible to use "-U"
(or, I'd assume, "--unified") without adding an explicit number for
context lines.

Was it not intended that a user could pass "-U" to explicitly say "I
want a unified diff with the default number of context lines"? Because
it's always worked that way, as far as I can tell (certainly since
early 1.7.x releases). Is it possible, with the new parse-options
code, to restore that behavior? Removing that is likely to be a pretty
big disruption for Bitbucket Server, which has always explicitly
passed "-U" to "git diff". If the community wants to move forward with
the change, I understand. I'm not trying to roadblock it; I'm just
listing an explicit example of something that will be significantly
affected by the change. Perhaps Git 2.22 could emit a warning about
the change in behavior and then a subsequent version could turn it
into an error, to give us (and anyone else relying on this behavior)
more time to make adjustments?

I'm aware a unified diff is the default output, but many commands have
flags that essentially tell Git to do what it would do by default.
That can help counter changes in the default, as well as safeguarding
against new config options that allow specifying a different default
(as it were). For example, "git diff" has "--no-color", which could
override configuration and essentially applied the default
behavior--until the default configuration was changed in 1.8.4 from
"never" to "auto". By using "--no-color", even though we didn't "need"
to, we were protected against that change in the default.

Best regards,
Bryan Turner

^ permalink raw reply	[relevance 7%]

* Re: [ANNOUNCE] Git v2.22.0-rc1
  2019-05-19  9:04  3% [ANNOUNCE] Git v2.22.0-rc1 Junio C Hamano
@ 2019-05-19 20:30  0% ` Johannes Schindelin
  2019-05-20 19:06  7% ` Bryan Turner
  1 sibling, 0 replies; 43+ 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%]

* What's cooking in git.git (May 2019, #03; Sun, 19)
@ 2019-05-19  9:04  1% Junio C Hamano
  2019-05-21 18:32  0% ` js/rebase-cleanup, was " Johannes Schindelin
  0 siblings, 1 reply; 43+ results
From: Junio C Hamano @ 2019-05-19  9:04 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 first release candidate Git 2.22-rc1 has been tagged.  There
still are a few topics from 'next' that need to go to 'master'
before the final, but otherwise this should be pretty close to the
final version.  Knock knock...

I'll be offline for a week or so and will tag -rc2 early next week
when I get back to the US.  In the meantime, please see if you can
find and fix any regressions ;-)

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"]

* ab/perf-installed-fix (2019-05-08) 6 commits
  (merged to 'next' on 2019-05-13 at ccd997a142)
 + perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
 + perf tests: add "bindir" prefix to git tree test results
 + perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
 + perf-lib.sh: make "./run <revisions>" use the correct gits
 + perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
 + perf README: correct docs for 3c8f12c96c regression

 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.
 cf. <20190507105434.9600-1-avarab@gmail.com>


* ab/sha1dc (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at a663e08047)
 + sha1dc: update from upstream

 Update collision-detecting SHA-1 code to build properly on HP-UX.


* ab/trace2-typofix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-13 at f1229d4d9d)
 + trace2: fix up a missing "leave" entry point

 Typofix.


* bl/t4253-exit-code-from-format-patch (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 4893c65956)
 + t4253-am-keep-cr-dos: avoid using pipes

 Avoid patterns to pipe output from a git command to feed another
 command in tests.


* cb/http-push-null-in-message-fix (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at d9709e0c40)
 + http-push: prevent format overflow warning with gcc >= 9

 Code clean-up.


* cm/notes-comment-fix (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at af8fffab26)
 + notes: correct documentation of format_display_notes()

 A stale in-code comment has been updated.


* cw/diff-highlight (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-13 at 050d707166)
 + diff-highlight: use correct /dev/null for UNIX and Windows

 Portability fix for a diff-highlight tool (in contrib/).


* dl/branch-from-3dot-merge-base (2019-05-07) 2 commits
  (merged to 'next' on 2019-05-13 at 2eb387070e)
 + branch: make create_branch accept a merge base rev
 + t2018: cleanup in current test

 "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.
 cf. <cover.1556366347.git.liu.denton@gmail.com>


* dl/difftool-mergetool (2019-05-13) 7 commits
  (merged to 'next' on 2019-05-15 at 19ecd284b3)
 + difftool: fallback on merge.guitool
 + difftool: make --gui, --tool and --extcmd mutually exclusive
 + mergetool: fallback to tool when guitool unavailable
 + mergetool--lib: create gui_mode function
 + mergetool: use get_merge_tool function
 + t7610: add mergetool --gui tests
 + t7610: unsuppress output

 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.
 cf. <cover.1556518203.git.liu.denton@gmail.com> (v5)


* dl/warn-tagging-a-tag (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-13 at a2f6365923)
 + tag: fix typo in nested tagging hint

 Typofix.


* ds/cvsexportcommit-force-text (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 9874698ae0)
 + cvsexportcommit: force crlf translation

 "git cvsexportcommit" running on msys did not expect cvsnt showed
 "cvs status" output with CRLF line endings.


* ds/midx-too-many-packs (2019-05-07) 2 commits
  (merged to 'next' on 2019-05-15 at 7203801e27)
 + midx: add packs to packed_git linked list
 + midx: pass a repository pointer

 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.


* ds/trace2-document-env-vars (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 7d28c6bd35)
 + trace2: add variable description to git.txt

 Doc update.


* en/unicode-in-refnames (2019-04-26) 1 commit
  (merged to 'next' on 2019-05-15 at 53662a2843)
 + Honor core.precomposeUnicode in more places

 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.


* es/check-non-portable-pre-5.10 (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 49228ada86)
 + check-non-portable-shell: support Perl versions older than 5.10

 Developer support update.


* id/windows-dep-aslr (2019-05-13) 2 commits
  (merged to 'next' on 2019-05-13 at 33d57069f8)
 + mingw: enable DEP and ASLR
 + mingw: do not let ld strip relocations

 Allow DEP and ASLR for Windows build to for security hardening.


* jc/set-packet-header-signature-fix (2019-05-16) 1 commit
  (merged to 'next' on 2019-05-16 at 6af28982a1)
 + pkt-line: drop 'const'-ness of a param to set_packet_header()

 Code clean-up.


* jk/apache-lsan (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at 1a055a6df0)
 + t/lib-httpd: pass LSAN_OPTIONS through apache

 Allow tests that involve httpd to be run under leak sanitizer, just
 like we can already do so under address sanitizer.


* jk/cocci-batch (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-13 at 8bbbfd3438)
 + coccicheck: make batch size of 0 mean "unlimited"
 + coccicheck: optionally batch spatch invocations

 Optionally "make coccicheck" can feed multiple source files to
 spatch, gaining performance while spending more memory.


* jk/get-oid-indexed-object-name (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at f4788d4b4a)
 + get_oid: handle NULL repo->index

 The codepath to parse :<path> that obtains the object name for an
 indexed object has been made more robust.


* js/commit-graph-parse-leakfix (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-13 at 18df8ac778)
 + commit-graph: fix memory leak

 Leakfix.


* js/difftool-no-index (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-16 at 7b918fa9a4)
 + difftool --no-index: error out on --dir-diff (and don't crash)

 The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
 mode; they are now explicitly marked as mutually incompatible.


* js/fsmonitor-refresh-after-discarding-index (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-15 at 01dce0bf0e)
 + fsmonitor: force a refresh after the index was discarded
 + fsmonitor: demonstrate that it is not refreshed after discard_index()

 The fsmonitor interface got out of sync after the in-core index
 file gets discarded, which has been corrected.


* js/parseopt-unknown-cb-returns-an-enum (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at 0feef071b7)
 + parse-options: adjust `parse_opt_unknown_cb()`s declared return type

 Code clean-up.


* js/rebase-i-label-shown-in-status-fix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at c7fefa1f9c)
 + status: fix display of rebase -ir's `label` command

 "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.


* js/stash-in-c-use-builtin-doc (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 26c8bfc106)
 + stash: document stash.useBuiltin

 Doc update.


* js/t5580-unc-alternate-test (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at dfff4a6397)
 + t5580: verify that alternates can be UNC paths

 An additional test for MinGW


* js/t6500-use-windows-pid-on-mingw (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at 24e5e27eb7)
 + t6500(mingw): use the Windows PID of the shell

 Future-proof a test against an update to MSYS2 runtime v3.x series.
 cf. <pull.185.git.gitgitgadget@gmail.com>
 It might be helpful in the longer term to encapsulate the code that
 uses /proc/$$/winpid into a helper function and use it anywhere $$
 is referenced, but let's defer it until we see such a callsite that
 would be helped by such a move.


* mh/http-fread-api-fix (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at f6af2d38d7)
 + Make fread/fwrite-like functions in http.c more like fread/fwrite.

 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.


* nd/parse-options-aliases (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-13 at c77cc06452)
 + parse-options: don't emit "ambiguous option" for aliases

 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.


* nd/submodule-helper-incomplete-line-fix (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at cd52f49825)
 + submodule--helper: add a missing \n

 Typofix.


* sg/ci-libsvn-perl (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 8453976768)
 + ci: install 'libsvn-perl' instead of 'git-svn'

 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.


* tt/no-ipv6-fallback-for-winxp (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at f6c80e2c1b)
 + mingw: remove obsolete IPv6-related code

 Code cleanup.


* tz/test-lib-check-working-jgit (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 7ca75a34bf)
 + test-lib: try harder to ensure a working jgit

 A prerequiste check in the test suite to see if a working jgit is
 available was made more robust.

--------------------------------------------------
[New Topics]

* ab/fail-prereqs-in-test (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at d1be55f485)
 + tests: add a special setup where prerequisites fail

 Developer support to emulate unsatisfied prerequisites in tests to
 ensure that the remainer of the tests still succeeds when tests
 with prerequisites are skipped.

 Will cook in 'next'.


* jk/help-unknown-ref-fix (2019-05-15) 2 commits
  (merged to 'next' on 2019-05-19 at e3e01160f7)
 + help_unknown_ref(): check for refname ambiguity
 + help_unknown_ref(): duplicate collected refnames

 Improve the code to show args with potential typo that cannot be
 interpreted as a commit-ish.

 Will cook in 'next'.


* js/rebase-cleanup (2019-05-15) 5 commits
  (merged to 'next' on 2019-05-16 at ccfed8f263)
 + rebase: fold git-rebase--common into the -p backend
 + sequencer: the `am` and `rebase--interactive` scripts are gone
 + .gitignore: there is no longer a built-in `git-rebase--interactive`
 + t3400: stop referring to the scripted rebase
 + Drop unused git-rebase--am.sh

 Update supporting parts of "git rebase" to remove code that should
 no longer be used.

 Will cook in 'next'.


* jt/partial-clone-missing-ref-delta-base (2019-05-15) 2 commits
 - index-pack: prefetch missing REF_DELTA bases
 - t5616: refactor packfile replacement

 "git fetch" into a lazy clone forgot to fetch base objects that are
 necessary to complete delta in a thin packfile, which has been
 corrected.


* bl/userdiff-octave (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at 9ea1180d6c)
 + userdiff: add Octave

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Matlab has been extend to cover Octave, which is more
 or less equivalent.

 Will cook in 'next'.


* ew/update-server-info (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-19 at bf4f2871ab)
 + update-server-info: avoid needless overwrites

 "git update-server-info" learned not to rewrite the file with the
 same contents.

 Will cook in 'next'.


* nd/corrupt-worktrees (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at d92c25f800)
 + worktree add: be tolerant of corrupt worktrees

 "git worktree add" used to fail when another worktree connected to
 the same repository was corrupt, which has been corrected.

 Will cook in 'next'.


* mh/import-transport-fd-fix (2019-05-16) 2 commits
  (merged to 'next' on 2019-05-19 at 5e86f92f7a)
 + Use xmmap_gently instead of xmmap in use_pack
 + dup() the input fd for fast-import used for remote helpers

 The ownership rule for the file descriptor to fast-import remote
 backend was mixed up, leading to unrelated file descriptor getting
 closed, which has been fixed.

 Will cook in 'next'.


* ab/deprecate-R-for-dynpath (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at 944976e981)
 + Makefile: remove the NO_R_TO_GCC_LINKER flag

 The way of specifying the path to find dynamic libraries at runtime
 has been simplified.  The old default to pass -R/path/to/dir has been
 replaced with the new default to pass -Wl,-rpath,/path/to/dir,
 which is the more recent GCC uses.  Those who need to build with an
 old GCC can still use "CC_LD_DYNPATH=-R"

 Will cook in 'next'.


* ba/clone-remote-submodules (2019-05-19) 1 commit
 - clone: add `--remote-submodules` flag

 "git clone --recurse-submodules" learned to set up the submodules
 to ignore commit object names recorded in the superproject gitlink
 and instead use the commits that happen to be at the tip of the
 remote-tracking branches from the get-go, by passing the new
 "--remote-submodules" option.


* ds/close-object-store (2019-05-19) 3 commits
 - packfile: close_all_packs to close_object_store
 - packfile: close commit-graph in close_all_packs
 - commit-graph: use raw_object_store when closing
 (this branch uses ds/commit-graph-write-refactor.)

 The commit-graph file is now part of the "files that the runtime
 may keep open file descriptors on, all of which would need to be
 closed when done with the object store", and the file descriptor to
 an existing commit-graph file now is closed before "gc" finializes
 a new instance to replace it.

 Waiting on ds/commit-graph-write-refactor to stabilize.


* ja/diff-opt-typofix (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at fedb594191)
 + diff: fix mistake in translatable strings

 Typofix.

 Will merge to 'master'.


* ml/userdiff-rust (2019-05-17) 1 commit
  (merged to 'next' on 2019-05-19 at 1266fddce5)
 + userdiff: add built-in pattern for rust

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Rust has been added.

 Will cook in 'next'.


* pw/rebase-edit-message-for-replayed-merge (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at dc3e30641c)
 + rebase -r: always reword merge -c

 A "merge -c" instruction during "git rebase --rebase-merges" should
 give the user a chance to edit the log message, even when there is
 otherwise no need to create a new merge and replace the existing
 one (i.e. fast-forward instead), but did not.  Which has been
 corrected.

 Will cook in 'next'.

--------------------------------------------------
[Stalled]

* jn/unknown-index-extensions (2018-11-21) 2 commits
 - index: offer advice for unknown index extensions
 - index: do not warn about unrecognized extensions

 A bit too alarming warning given when unknown index extensions
 exist is getting revamped.

 Expecting a reroll.


* jc/format-patch-delay-message-id (2019-04-05) 1 commit
 - format-patch: move message-id and related headers to the end

 The location "git format-patch --thread" adds the Message-Id:
 header in the series of header fields has been moved down, which
 may help working around a suspected bug in GMail MSA, reported at
 <CAHk-=whP1stFZNAaJiMi5eZ9rj0MRt20Y_yHVczZPH+O01d+sA@mail.gmail.com>

 Waiting for feedback to see if it truly helps.
 Needs tests.


* jt/fetch-cdn-offload (2019-03-12) 9 commits
 - SQUASH???
 - upload-pack: send part of packfile response as uri
 - fetch-pack: support more than one pack lockfile
 - upload-pack: refactor reading of pack-objects out
 - Documentation: add Packfile URIs design doc
 - Documentation: order protocol v2 sections
 - http-fetch: support fetching packfiles by URL
 - http: improve documentation of http_pack_request
 - http: use --stdin when getting dumb HTTP pack

 WIP for allowing a response to "git fetch" to instruct the bulk of
 the pack contents to be instead taken from elsewhere (aka CDN).

 Stalled


* 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 drop as "add -i in C" topic seems to be getting ready to test.


* js/protocol-advertise-multi (2018-12-28) 1 commit
 - protocol: advertise multiple supported versions

 The transport layer has been updated so that the protocol version
 used can be negotiated between the parties, by the initiator
 listing the protocol versions it is willing to talk, and the other
 side choosing from one of them.

 Expecting a reroll.
 cf. <CANq=j3u-zdb_FvNJGPCmygNMScseav63GhVvBX3NcVS4f7TejA@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".


* dl/remote-save-to-push (2018-12-11) 1 commit
 - remote: add --save-to-push option to git remote set-url

 "git remote set-url" learned a new option that moves existing value
 of the URL field to pushURL field of the remote before replacing
 the URL field with a new value.

 Anybody who wants to champion this topic?
 I am personally not yet quite convinced if this is worth pursuing.

--------------------------------------------------
[Cooking]

* sb/format-patch-base-patch-id-fix (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-15 at 1ab7d2b71c)
 + format-patch: make --base patch-id output stable
 + format-patch: inform user that patch-id generation is unstable

 The recently added "--base" option of "format-patch" computed the
 patch-ids for prerequisite patches in an unstable way, which has
 been updated to compute in a way that is compatible with "git
 patch-id --stable".

 Will cook in 'next'.


* ab/send-email-transferencoding-fix (2019-05-19) 7 commits
 . send-email: fix regression in sendemail.identity parsing
 . send-email: document --no-[to|cc|bcc]
 . send-email: fix broken transferEncoding tests
 . send-email: remove cargo-culted multi-patch pattern in tests
  (merged to 'next' on 2019-05-13 at 38c6a1e7e0)
 + send-email: do defaults -> config -> getopt in that order
 + send-email: rename the @bcclist variable for consistency
 + send-email: move the read_config() function above getopts

 Since "git send-email" learned to take 'auto' as the value for the
 transfer-encoding, it by mistake stopped honoring the values given
 to the configuration variables sendemail.transferencoding and/or
 sendemail.<ident>.transferencoding.  This has been corrected to
 (finally) redoing the order of setting the default, reading the
 configuration and command line options.

 Will merge to and cook in 'next'.


* dl/format-patch-notes-config (2019-05-17) 2 commits
  (merged to 'next' on 2019-05-19 at d3f6f1872b)
 + format-patch: teach format.notes config option
 + git-format-patch.txt: document --no-notes option

 "git format-patch" learns a configuration to set the default for
 its --notes=<ref> option.

 Will cook in 'next'.


* jk/unused-params-final-batch (2019-05-13) 14 commits
  (merged to 'next' on 2019-05-15 at ef7435264c)
 + verify-commit: simplify parameters to run_gpg_verify()
 + show-branch: drop unused parameter from show_independent()
 + rev-list: drop unused void pointer from finish_commit()
 + remove_all_fetch_refspecs(): drop unused "remote" parameter
 + receive-pack: drop unused "commands" from prepare_shallow_update()
 + pack-objects: drop unused rev_info parameters
 + name-rev: drop unused parameters from is_better_name()
 + mktree: drop unused length parameter
 + wt-status: drop unused status parameter
 + read-cache: drop unused parameter from threaded load
 + clone: drop dest parameter from copy_alternates()
 + submodule: drop unused prefix parameter from some functions
 + builtin: consistently pass cmd_* prefix to parse_options
 + cmd_{read,write}_tree: rename "unused" variable that is used

 Remove many unused parameters throughout the codebase, with the
 ultimate aim to allow us compile with -Wunused-parameter cleanly.

 Will cook in 'next'.


* nd/init-relative-template-fix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 4d5b17f712)
 + init: make --template path relative to $CWD

 A relative pathname given to "git init --template=<path> <repo>"
 ought to be relative to the directory "git init" gets invoked in,
 but it instead was made relative to the repository, which has been
 corrected.

 Will cook in 'next'.


* an/ignore-doc-update (2019-05-08) 1 commit
 - gitignore.txt: make slash-rules more readable

 The description about slashes in gitignore patterns (used to
 indicate things like "anchored to this level only" and "only
 matches directories") has been revamped.

 Almost there.
 cf. <20190507104507.18735-1-admin@in-ici.net>


* en/fast-export-encoding (2019-05-14) 5 commits
  (merged to 'next' on 2019-05-16 at c88bd3edb5)
 + fast-export: do automatic reencoding of commit messages only if requested
 + fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
 + fast-export: avoid stripping encoding header if we cannot reencode
 + fast-import: support 'encoding' commit header
 + t9350: fix encoding test to actually test reencoding

 The "git fast-export/import" pair has been taught to handle commits
 with log messages in encoding other than UTF-8 better.

 Will cook in 'next'.


* nd/merge-quit (2019-05-19) 2 commits
  (merged to 'next' on 2019-05-19 at 9880e7ee4e)
 + merge: add --quit
 + merge: remove drop_save() in favor of remove_merge_branch_state()

 "git merge" learned "--quit" option that cleans up the in-progress
 merge while leaving the working tree and the index still in a mess.

 Will cook in 'next'.


* pw/rebase-abort-clean-rewritten (2019-05-15) 4 commits
 - rebase --abort/--quit: cleanup refs/rewritten
 - sequencer: return errors from sequencer_remove_state()
 - rebase: warn if state directory cannot be removed
 - rebase: fix a memory leak

 "git rebase --abort" used to leave refs/rewritten/ when concluding
 "git rebase -r", which has been corrected.

 On hold.
 cf. <20190514180349.17245-1-phillip.wood123@gmail.com>


* nb/branch-show-other-worktrees-head (2019-05-07) 3 commits
 - branch: add worktree info on verbose output
 - branch: update output to include worktree info
 - ref-filter: add worktreepath atom

 "git branch --list" learned to show branches that are checked out
 in other worktrees connected to the same repository prefixed with
 '+', similar to the way the currently checked out branch is shown
 with '*' in front.


* es/first-contrib-tutorial (2019-05-19) 2 commits
  (merged to 'next' on 2019-05-19 at 9ddfae82bf)
 + documentation: add anchors to MyFirstContribution
 + documentation: add tutorial for first contribution

 A new tutorial targetting specifically aspiring git-core
 developers.

 Will cook in 'next'.
 cf. <20190517190359.21676-1-emilyshaffer@google.com> (v6)


* cc/multi-promisor (2019-04-15) 17 commits
 - Move core_partial_clone_filter_default to promisor-remote.c
 - Move repository_format_partial_clone to promisor-remote.c
 - Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
 - remote: add promisor and partial clone config to the doc
 - partial-clone: add multiple remotes in the doc
 - t0410: test fetching from many promisor remotes
 - builtin/fetch: remove unique promisor remote limitation
 - promisor-remote: parse remote.*.partialclonefilter
 - diff: use promisor-remote.h instead of fetch-object.h
 - Use promisor_remote_get_direct() and has_promisor_remote()
 - promisor-remote: use repository_format_partial_clone
 - promisor-remote: add promisor_remote_reinit()
 - promisor-remote: implement promisor_remote_get_direct()
 - Add initial support for many promisor remotes
 - fetch-object: make functions return an error code
 - t0410: remove pipes after git commands
 - Merge branch 'jt/batch-fetch-blobs-in-diff' into cc/multi-promisor

 Teach the lazy clone machinery that there can be more than one
 promisor remote and consult them in order when downloading missing
 objects on demand.

 Needs review.


* nd/switch-and-restore (2019-05-07) 43 commits
 - Declare both git-switch and git-restore experimental
 - help: move git-diff and git-reset to different groups
 - doc: promote "git restore"
 - user-manual.txt: prefer 'merge --abort' over 'reset --hard'
 - completion: support restore
 - t: add tests for restore
 - restore: support --patch
 - restore: replace --force with --ignore-unmerged
 - restore: default to --source=HEAD when only --staged is specified
 - restore: reject invalid combinations with --staged
 - restore: add --worktree and --staged
 - checkout: factor out worktree checkout code
 - restore: disable overlay mode by default
 - restore: make pathspec mandatory
 - restore: take tree-ish from --source option instead
 - checkout: split part of it to new command 'restore'
 - doc: promote "git switch"
 - completion: support switch
 - t: add tests for switch
 - switch: make --orphan switch to an empty tree
 - switch: reject if some operation is in progress
 - switch: no worktree status unless real branch switch happens
 - switch: implicit dwim, use --no-guess to disable it
 - switch: add short option for --detach
 - switch: only allow explicit detached HEAD
 - switch: reject "do nothing" case
 - switch: stop accepting pathspec
 - switch: remove -l
 - switch: add --discard-changes
 - switch: better names for -b and -B
 - checkout: split part of it to new command 'switch'
 - checkout: split options[] array in three pieces
 - checkout: move 'confict_style' and 'dwim_..' to checkout_opts
 - checkout: make "opts" in cmd_checkout() a pointer
 - checkout: factor out some code in parse_branchname_arg()
 - checkout: keep most #include sorted
 - checkout: inform the user when removing branch state
 - checkout: advice how to get out of detached HEAD mode
 - t: rename t2014-switch.sh to t2014-checkout-switch.sh
 - git-checkout.txt: fix monospace typeset
 - doc: document --overwrite-ignore
 - git-checkout.txt: fix one syntax line
 - git-checkout.txt: spell out --no-option

 Two new commands "git switch" and "git restore" are introduced to
 split "checking out a branch to work on advancing its history" and
 "checking out paths out of the index and/or a tree-ish to work on
 advancing the current history" out of the single "git checkout"
 command.

 The "switch" part seems more or less ready for testing.  Perhaps
 we should split this back into two topics and merge it to 'next'.
 cf. <20190329103919.15642-1-pclouds@gmail.com> (switch v6)
 cf. <20190425094600.15673-1-pclouds@gmail.com> (restore v3)


* jc/format-patch-noclobber (2019-02-22) 1 commit
 - format-patch: --no-clobber refrains from overwriting output files

 "git format-patch" used to overwrite an existing patch/cover-letter
 file.  A new "--no-clobber" option stops it.

 Undecided but inclined to discard.


* am/p4-branches-excludes (2019-04-02) 8 commits
 - git-p4: respect excluded paths when detecting branches
 - git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
 - git-p4: don't exclude other files with same prefix
 - git-p4: add failing test for "don't exclude other files with same prefix"
 - git-p4: don't groom exclude path list on every commit
 - git-p4: match branches case insensitively if configured
 - git-p4: add failing test for "git-p4: match branches case insensitively if configured"
 - git-p4: detect/prevent infinite loop in gitCommitByP4Change()

 "git p4" update.

 Is this ready for 'next'?


* dl/rebase-i-keep-base (2019-04-25) 6 commits
 - rebase: teach rebase --keep-base
 - rebase: fast-forward --fork-point in more cases
 - rebase: fast-forward --onto in more cases
 - rebase: refactor can_fast_forward into goto tower
 - t3432: test rebase fast-forward behavior
 - t3431: add rebase --fork-point tests

 "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.

 On hold.
 cf. <20190508001252.15752-1-avarab@gmail.com>
 cf. <xmqqa7fxionx.fsf@gitster-ct.c.googlers.com>


* nd/worktree-name-sanitization (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 9a2dd33122)
 + worktree add: sanitize worktree names

 In recent versions of Git, per-worktree refs are exposed in
 refs/worktrees/<wtname>/ hierarchy, which means that worktree names
 must be a valid refname component.  The code now sanitizes the names
 given to worktrees, to make sure these refs are well-formed.

 Will cook in 'next'.


* ds/commit-graph-write-refactor (2019-05-13) 11 commits
 - commit-graph: extract write_commit_graph_file()
 - commit-graph: extract copy_oids_to_commits()
 - commit-graph: extract count_distinct_commits()
 - commit-graph: extract fill_oids_from_all_packs()
 - commit-graph: extract fill_oids_from_commit_hex()
 - commit-graph: extract fill_oids_from_packs()
 - commit-graph: create write_commit_graph_context
 - commit-graph: remove Future Work section
 - commit-graph: collapse parameters into flags
 - commit-graph: return with errors during write
 - commit-graph: fix the_repository reference
 (this branch is used by ds/close-object-store.)

 Renamed from commit-graph-format-v2 and changed scope.

 Expecting a reroll.
 I think it is almost there, modulo a few internal API details..
 cf. <pull.112.v4.git.gitgitgadget@gmail.com> (v4)
 cf. <17829620-1084-74e5-54ad-aa95990f4dbd@gmail.com>


* br/blame-ignore (2019-05-17) 10 commits
 - SQUASH??? test-lint -- seq not portable
 - SQUASH??? error: decl-after-stmt
 - blame: use the fingerprint heuristic to match ignored lines
 - blame: add a fingerprint heuristic to match ignored lines
 - blame: optionally track line fingerprints during fill_blame_origin()
 - blame: add config options for the output of ignored or unblamable lines
 - blame: add the ability to ignore commits and their changes
 - blame: use a helper function in blame_chunk()
 - Move oidset_parse_file() to oidset.c
 - fsck: rename and touch up init_skiplist()

 "git blame" learned to "ignore" commits in the history, whose
 effects (as well as their presence) get ignored.

 cf. <20190515214503.77162-1-brho@google.com> (v7)

--------------------------------------------------
[Discarded]

* nd/precious (2019-04-09) 1 commit
 . Introduce "precious" file concept

 "git clean" learned to pay attention to the 'precious' attributes
 and keep untracked paths with the attribute instead of removing
 when the "--keep-precious" is given.

 Retracted.
 cf. <CACsJy8AEZ-Lz6zgEsuNukvphB9TTa9FAC1gK05fhnie2xtfc9w@mail.gmail.com>

 I am not sure what aspect of this longer-term "precious" vision,
 which gets taught to various commands and use cases individually
 and incrementally, Ævar finds problematic, which I understand is
 the reason of redtraction.


* jc/send-email-transferencoding-fix (2019-05-09) 2 commits
 . send-email: honor transferencoding config option again
 . send-email: update the mechanism to set default configuration values

 Replaced by  Ævar's "do the default in the right order" approach.
 cf. <20190508105607.178244-1-gitster@pobox.com> (v2)

^ permalink raw reply	[relevance 1%]

* What's cooking in git.git (May 2019, #03; Sun, 19)
@ 2019-05-19  9:20  1% Junio C Hamano
  0 siblings, 0 replies; 43+ results
From: Junio C Hamano @ 2019-05-19  9:20 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 first release candidate Git 2.22-rc1 has been tagged.  There
still are a few topics from 'next' that need to go to 'master'
before the final, but otherwise this should be pretty close to the
final version.  Knock knock...

I'll go offline for a week or so and then tag -rc2 early next week
after I come back to the US.

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"]

* ab/perf-installed-fix (2019-05-08) 6 commits
  (merged to 'next' on 2019-05-13 at ccd997a142)
 + perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
 + perf tests: add "bindir" prefix to git tree test results
 + perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
 + perf-lib.sh: make "./run <revisions>" use the correct gits
 + perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
 + perf README: correct docs for 3c8f12c96c regression

 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.
 cf. <20190507105434.9600-1-avarab@gmail.com>


* ab/sha1dc (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at a663e08047)
 + sha1dc: update from upstream

 Update collision-detecting SHA-1 code to build properly on HP-UX.


* ab/trace2-typofix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-13 at f1229d4d9d)
 + trace2: fix up a missing "leave" entry point

 Typofix.


* bl/t4253-exit-code-from-format-patch (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 4893c65956)
 + t4253-am-keep-cr-dos: avoid using pipes

 Avoid patterns to pipe output from a git command to feed another
 command in tests.


* cb/http-push-null-in-message-fix (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at d9709e0c40)
 + http-push: prevent format overflow warning with gcc >= 9

 Code clean-up.


* cm/notes-comment-fix (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at af8fffab26)
 + notes: correct documentation of format_display_notes()

 A stale in-code comment has been updated.


* cw/diff-highlight (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-13 at 050d707166)
 + diff-highlight: use correct /dev/null for UNIX and Windows

 Portability fix for a diff-highlight tool (in contrib/).


* dl/branch-from-3dot-merge-base (2019-05-07) 2 commits
  (merged to 'next' on 2019-05-13 at 2eb387070e)
 + branch: make create_branch accept a merge base rev
 + t2018: cleanup in current test

 "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.
 cf. <cover.1556366347.git.liu.denton@gmail.com>


* dl/difftool-mergetool (2019-05-13) 7 commits
  (merged to 'next' on 2019-05-15 at 19ecd284b3)
 + difftool: fallback on merge.guitool
 + difftool: make --gui, --tool and --extcmd mutually exclusive
 + mergetool: fallback to tool when guitool unavailable
 + mergetool--lib: create gui_mode function
 + mergetool: use get_merge_tool function
 + t7610: add mergetool --gui tests
 + t7610: unsuppress output

 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.
 cf. <cover.1556518203.git.liu.denton@gmail.com> (v5)


* dl/warn-tagging-a-tag (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-13 at a2f6365923)
 + tag: fix typo in nested tagging hint

 Typofix.


* ds/cvsexportcommit-force-text (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 9874698ae0)
 + cvsexportcommit: force crlf translation

 "git cvsexportcommit" running on msys did not expect cvsnt showed
 "cvs status" output with CRLF line endings.


* ds/midx-too-many-packs (2019-05-07) 2 commits
  (merged to 'next' on 2019-05-15 at 7203801e27)
 + midx: add packs to packed_git linked list
 + midx: pass a repository pointer

 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.


* ds/trace2-document-env-vars (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 7d28c6bd35)
 + trace2: add variable description to git.txt

 Doc update.


* en/unicode-in-refnames (2019-04-26) 1 commit
  (merged to 'next' on 2019-05-15 at 53662a2843)
 + Honor core.precomposeUnicode in more places

 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.


* es/check-non-portable-pre-5.10 (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 49228ada86)
 + check-non-portable-shell: support Perl versions older than 5.10

 Developer support update.


* id/windows-dep-aslr (2019-05-13) 2 commits
  (merged to 'next' on 2019-05-13 at 33d57069f8)
 + mingw: enable DEP and ASLR
 + mingw: do not let ld strip relocations

 Allow DEP and ASLR for Windows build to for security hardening.


* jc/set-packet-header-signature-fix (2019-05-16) 1 commit
  (merged to 'next' on 2019-05-16 at 6af28982a1)
 + pkt-line: drop 'const'-ness of a param to set_packet_header()

 Code clean-up.


* jk/apache-lsan (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at 1a055a6df0)
 + t/lib-httpd: pass LSAN_OPTIONS through apache

 Allow tests that involve httpd to be run under leak sanitizer, just
 like we can already do so under address sanitizer.


* jk/cocci-batch (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-13 at 8bbbfd3438)
 + coccicheck: make batch size of 0 mean "unlimited"
 + coccicheck: optionally batch spatch invocations

 Optionally "make coccicheck" can feed multiple source files to
 spatch, gaining performance while spending more memory.


* jk/get-oid-indexed-object-name (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at f4788d4b4a)
 + get_oid: handle NULL repo->index

 The codepath to parse :<path> that obtains the object name for an
 indexed object has been made more robust.


* js/commit-graph-parse-leakfix (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-13 at 18df8ac778)
 + commit-graph: fix memory leak

 Leakfix.


* js/difftool-no-index (2019-05-09) 1 commit
  (merged to 'next' on 2019-05-16 at 7b918fa9a4)
 + difftool --no-index: error out on --dir-diff (and don't crash)

 The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
 mode; they are now explicitly marked as mutually incompatible.


* js/fsmonitor-refresh-after-discarding-index (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-15 at 01dce0bf0e)
 + fsmonitor: force a refresh after the index was discarded
 + fsmonitor: demonstrate that it is not refreshed after discard_index()

 The fsmonitor interface got out of sync after the in-core index
 file gets discarded, which has been corrected.


* js/parseopt-unknown-cb-returns-an-enum (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at 0feef071b7)
 + parse-options: adjust `parse_opt_unknown_cb()`s declared return type

 Code clean-up.


* js/rebase-i-label-shown-in-status-fix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at c7fefa1f9c)
 + status: fix display of rebase -ir's `label` command

 "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.


* js/stash-in-c-use-builtin-doc (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 26c8bfc106)
 + stash: document stash.useBuiltin

 Doc update.


* js/t5580-unc-alternate-test (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at dfff4a6397)
 + t5580: verify that alternates can be UNC paths

 An additional test for MinGW


* js/t6500-use-windows-pid-on-mingw (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at 24e5e27eb7)
 + t6500(mingw): use the Windows PID of the shell

 Future-proof a test against an update to MSYS2 runtime v3.x series.
 cf. <pull.185.git.gitgitgadget@gmail.com>
 It might be helpful in the longer term to encapsulate the code that
 uses /proc/$$/winpid into a helper function and use it anywhere $$
 is referenced, but let's defer it until we see such a callsite that
 would be helped by such a move.


* mh/http-fread-api-fix (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at f6af2d38d7)
 + Make fread/fwrite-like functions in http.c more like fread/fwrite.

 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.


* nd/parse-options-aliases (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-13 at c77cc06452)
 + parse-options: don't emit "ambiguous option" for aliases

 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.


* nd/submodule-helper-incomplete-line-fix (2019-05-08) 1 commit
  (merged to 'next' on 2019-05-13 at cd52f49825)
 + submodule--helper: add a missing \n

 Typofix.


* sg/ci-libsvn-perl (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at 8453976768)
 + ci: install 'libsvn-perl' instead of 'git-svn'

 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.


* tt/no-ipv6-fallback-for-winxp (2019-05-07) 1 commit
  (merged to 'next' on 2019-05-15 at f6c80e2c1b)
 + mingw: remove obsolete IPv6-related code

 Code cleanup.


* tz/test-lib-check-working-jgit (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 7ca75a34bf)
 + test-lib: try harder to ensure a working jgit

 A prerequiste check in the test suite to see if a working jgit is
 available was made more robust.

--------------------------------------------------
[New Topics]

* ab/fail-prereqs-in-test (2019-05-14) 1 commit
  (merged to 'next' on 2019-05-16 at d1be55f485)
 + tests: add a special setup where prerequisites fail

 Developer support to emulate unsatisfied prerequisites in tests to
 ensure that the remainer of the tests still succeeds when tests
 with prerequisites are skipped.

 Will cook in 'next'.


* jk/help-unknown-ref-fix (2019-05-15) 2 commits
  (merged to 'next' on 2019-05-19 at e3e01160f7)
 + help_unknown_ref(): check for refname ambiguity
 + help_unknown_ref(): duplicate collected refnames

 Improve the code to show args with potential typo that cannot be
 interpreted as a commit-ish.

 Will cook in 'next'.


* js/rebase-cleanup (2019-05-15) 5 commits
  (merged to 'next' on 2019-05-16 at ccfed8f263)
 + rebase: fold git-rebase--common into the -p backend
 + sequencer: the `am` and `rebase--interactive` scripts are gone
 + .gitignore: there is no longer a built-in `git-rebase--interactive`
 + t3400: stop referring to the scripted rebase
 + Drop unused git-rebase--am.sh

 Update supporting parts of "git rebase" to remove code that should
 no longer be used.

 Will cook in 'next'.


* jt/partial-clone-missing-ref-delta-base (2019-05-15) 2 commits
 - index-pack: prefetch missing REF_DELTA bases
 - t5616: refactor packfile replacement

 "git fetch" into a lazy clone forgot to fetch base objects that are
 necessary to complete delta in a thin packfile, which has been
 corrected.


* bl/userdiff-octave (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at 9ea1180d6c)
 + userdiff: add Octave

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Matlab has been extend to cover Octave, which is more
 or less equivalent.

 Will cook in 'next'.


* ew/update-server-info (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-19 at bf4f2871ab)
 + update-server-info: avoid needless overwrites

 "git update-server-info" learned not to rewrite the file with the
 same contents.

 Will cook in 'next'.


* nd/corrupt-worktrees (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at d92c25f800)
 + worktree add: be tolerant of corrupt worktrees

 "git worktree add" used to fail when another worktree connected to
 the same repository was corrupt, which has been corrected.

 Will cook in 'next'.


* mh/import-transport-fd-fix (2019-05-16) 2 commits
  (merged to 'next' on 2019-05-19 at 5e86f92f7a)
 + Use xmmap_gently instead of xmmap in use_pack
 + dup() the input fd for fast-import used for remote helpers

 The ownership rule for the file descriptor to fast-import remote
 backend was mixed up, leading to unrelated file descriptor getting
 closed, which has been fixed.

 Will cook in 'next'.


* ab/deprecate-R-for-dynpath (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at 944976e981)
 + Makefile: remove the NO_R_TO_GCC_LINKER flag

 The way of specifying the path to find dynamic libraries at runtime
 has been simplified.  The old default to pass -R/path/to/dir has been
 replaced with the new default to pass -Wl,-rpath,/path/to/dir,
 which is the more recent GCC uses.  Those who need to build with an
 old GCC can still use "CC_LD_DYNPATH=-R"

 Will cook in 'next'.


* ba/clone-remote-submodules (2019-05-19) 1 commit
 - clone: add `--remote-submodules` flag

 "git clone --recurse-submodules" learned to set up the submodules
 to ignore commit object names recorded in the superproject gitlink
 and instead use the commits that happen to be at the tip of the
 remote-tracking branches from the get-go, by passing the new
 "--remote-submodules" option.


* ds/close-object-store (2019-05-19) 3 commits
 - packfile: close_all_packs to close_object_store
 - packfile: close commit-graph in close_all_packs
 - commit-graph: use raw_object_store when closing
 (this branch uses ds/commit-graph-write-refactor.)

 The commit-graph file is now part of the "files that the runtime
 may keep open file descriptors on, all of which would need to be
 closed when done with the object store", and the file descriptor to
 an existing commit-graph file now is closed before "gc" finializes
 a new instance to replace it.

 Waiting on ds/commit-graph-write-refactor to stabilize.


* ja/diff-opt-typofix (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at fedb594191)
 + diff: fix mistake in translatable strings

 Typofix.

 Will merge to 'master'.


* ml/userdiff-rust (2019-05-17) 1 commit
  (merged to 'next' on 2019-05-19 at 1266fddce5)
 + userdiff: add built-in pattern for rust

 The pattern "git diff/grep" use to extract funcname and words
 boundary for Rust has been added.

 Will cook in 'next'.


* pw/rebase-edit-message-for-replayed-merge (2019-05-19) 1 commit
  (merged to 'next' on 2019-05-19 at dc3e30641c)
 + rebase -r: always reword merge -c

 A "merge -c" instruction during "git rebase --rebase-merges" should
 give the user a chance to edit the log message, even when there is
 otherwise no need to create a new merge and replace the existing
 one (i.e. fast-forward instead), but did not.  Which has been
 corrected.

 Will cook in 'next'.

--------------------------------------------------
[Stalled]

* jn/unknown-index-extensions (2018-11-21) 2 commits
 - index: offer advice for unknown index extensions
 - index: do not warn about unrecognized extensions

 A bit too alarming warning given when unknown index extensions
 exist is getting revamped.

 Expecting a reroll.


* jc/format-patch-delay-message-id (2019-04-05) 1 commit
 - format-patch: move message-id and related headers to the end

 The location "git format-patch --thread" adds the Message-Id:
 header in the series of header fields has been moved down, which
 may help working around a suspected bug in GMail MSA, reported at
 <CAHk-=whP1stFZNAaJiMi5eZ9rj0MRt20Y_yHVczZPH+O01d+sA@mail.gmail.com>

 Waiting for feedback to see if it truly helps.
 Needs tests.


* jt/fetch-cdn-offload (2019-03-12) 9 commits
 - SQUASH???
 - upload-pack: send part of packfile response as uri
 - fetch-pack: support more than one pack lockfile
 - upload-pack: refactor reading of pack-objects out
 - Documentation: add Packfile URIs design doc
 - Documentation: order protocol v2 sections
 - http-fetch: support fetching packfiles by URL
 - http: improve documentation of http_pack_request
 - http: use --stdin when getting dumb HTTP pack

 WIP for allowing a response to "git fetch" to instruct the bulk of
 the pack contents to be instead taken from elsewhere (aka CDN).

 Stalled


* 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 drop as "add -i in C" topic seems to be getting ready to test.


* js/protocol-advertise-multi (2018-12-28) 1 commit
 - protocol: advertise multiple supported versions

 The transport layer has been updated so that the protocol version
 used can be negotiated between the parties, by the initiator
 listing the protocol versions it is willing to talk, and the other
 side choosing from one of them.

 Expecting a reroll.
 cf. <CANq=j3u-zdb_FvNJGPCmygNMScseav63GhVvBX3NcVS4f7TejA@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".


* dl/remote-save-to-push (2018-12-11) 1 commit
 - remote: add --save-to-push option to git remote set-url

 "git remote set-url" learned a new option that moves existing value
 of the URL field to pushURL field of the remote before replacing
 the URL field with a new value.

 Anybody who wants to champion this topic?
 I am personally not yet quite convinced if this is worth pursuing.

--------------------------------------------------
[Cooking]

* sb/format-patch-base-patch-id-fix (2019-05-08) 2 commits
  (merged to 'next' on 2019-05-15 at 1ab7d2b71c)
 + format-patch: make --base patch-id output stable
 + format-patch: inform user that patch-id generation is unstable

 The recently added "--base" option of "format-patch" computed the
 patch-ids for prerequisite patches in an unstable way, which has
 been updated to compute in a way that is compatible with "git
 patch-id --stable".

 Will cook in 'next'.


* ab/send-email-transferencoding-fix (2019-05-19) 7 commits
 . send-email: fix regression in sendemail.identity parsing
 . send-email: document --no-[to|cc|bcc]
 . send-email: fix broken transferEncoding tests
 . send-email: remove cargo-culted multi-patch pattern in tests
  (merged to 'next' on 2019-05-13 at 38c6a1e7e0)
 + send-email: do defaults -> config -> getopt in that order
 + send-email: rename the @bcclist variable for consistency
 + send-email: move the read_config() function above getopts

 Since "git send-email" learned to take 'auto' as the value for the
 transfer-encoding, it by mistake stopped honoring the values given
 to the configuration variables sendemail.transferencoding and/or
 sendemail.<ident>.transferencoding.  This has been corrected to
 (finally) redoing the order of setting the default, reading the
 configuration and command line options.

 Will merge to and cook in 'next'.


* dl/format-patch-notes-config (2019-05-17) 2 commits
  (merged to 'next' on 2019-05-19 at d3f6f1872b)
 + format-patch: teach format.notes config option
 + git-format-patch.txt: document --no-notes option

 "git format-patch" learns a configuration to set the default for
 its --notes=<ref> option.

 Will cook in 'next'.


* jk/unused-params-final-batch (2019-05-13) 14 commits
  (merged to 'next' on 2019-05-15 at ef7435264c)
 + verify-commit: simplify parameters to run_gpg_verify()
 + show-branch: drop unused parameter from show_independent()
 + rev-list: drop unused void pointer from finish_commit()
 + remove_all_fetch_refspecs(): drop unused "remote" parameter
 + receive-pack: drop unused "commands" from prepare_shallow_update()
 + pack-objects: drop unused rev_info parameters
 + name-rev: drop unused parameters from is_better_name()
 + mktree: drop unused length parameter
 + wt-status: drop unused status parameter
 + read-cache: drop unused parameter from threaded load
 + clone: drop dest parameter from copy_alternates()
 + submodule: drop unused prefix parameter from some functions
 + builtin: consistently pass cmd_* prefix to parse_options
 + cmd_{read,write}_tree: rename "unused" variable that is used

 Remove many unused parameters throughout the codebase, with the
 ultimate aim to allow us compile with -Wunused-parameter cleanly.

 Will cook in 'next'.


* nd/init-relative-template-fix (2019-05-13) 1 commit
  (merged to 'next' on 2019-05-15 at 4d5b17f712)
 + init: make --template path relative to $CWD

 A relative pathname given to "git init --template=<path> <repo>"
 ought to be relative to the directory "git init" gets invoked in,
 but it instead was made relative to the repository, which has been
 corrected.

 Will cook in 'next'.


* an/ignore-doc-update (2019-05-08) 1 commit
 - gitignore.txt: make slash-rules more readable

 The description about slashes in gitignore patterns (used to
 indicate things like "anchored to this level only" and "only
 matches directories") has been revamped.

 Almost there.
 cf. <20190507104507.18735-1-admin@in-ici.net>


* en/fast-export-encoding (2019-05-14) 5 commits
  (merged to 'next' on 2019-05-16 at c88bd3edb5)
 + fast-export: do automatic reencoding of commit messages only if requested
 + fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
 + fast-export: avoid stripping encoding header if we cannot reencode
 + fast-import: support 'encoding' commit header
 + t9350: fix encoding test to actually test reencoding

 The "git fast-export/import" pair has been taught to handle commits
 with log messages in encoding other than UTF-8 better.

 Will cook in 'next'.


* nd/merge-quit (2019-05-19) 2 commits
  (merged to 'next' on 2019-05-19 at 9880e7ee4e)
 + merge: add --quit
 + merge: remove drop_save() in favor of remove_merge_branch_state()

 "git merge" learned "--quit" option that cleans up the in-progress
 merge while leaving the working tree and the index still in a mess.

 Will cook in 'next'.


* pw/rebase-abort-clean-rewritten (2019-05-15) 4 commits
 - rebase --abort/--quit: cleanup refs/rewritten
 - sequencer: return errors from sequencer_remove_state()
 - rebase: warn if state directory cannot be removed
 - rebase: fix a memory leak

 "git rebase --abort" used to leave refs/rewritten/ when concluding
 "git rebase -r", which has been corrected.

 On hold.
 cf. <20190514180349.17245-1-phillip.wood123@gmail.com>


* nb/branch-show-other-worktrees-head (2019-05-07) 3 commits
 - branch: add worktree info on verbose output
 - branch: update output to include worktree info
 - ref-filter: add worktreepath atom

 "git branch --list" learned to show branches that are checked out
 in other worktrees connected to the same repository prefixed with
 '+', similar to the way the currently checked out branch is shown
 with '*' in front.


* es/first-contrib-tutorial (2019-05-19) 2 commits
  (merged to 'next' on 2019-05-19 at 9ddfae82bf)
 + documentation: add anchors to MyFirstContribution
 + documentation: add tutorial for first contribution

 A new tutorial targetting specifically aspiring git-core
 developers.

 Will cook in 'next'.
 cf. <20190517190359.21676-1-emilyshaffer@google.com> (v6)


* cc/multi-promisor (2019-04-15) 17 commits
 - Move core_partial_clone_filter_default to promisor-remote.c
 - Move repository_format_partial_clone to promisor-remote.c
 - Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
 - remote: add promisor and partial clone config to the doc
 - partial-clone: add multiple remotes in the doc
 - t0410: test fetching from many promisor remotes
 - builtin/fetch: remove unique promisor remote limitation
 - promisor-remote: parse remote.*.partialclonefilter
 - diff: use promisor-remote.h instead of fetch-object.h
 - Use promisor_remote_get_direct() and has_promisor_remote()
 - promisor-remote: use repository_format_partial_clone
 - promisor-remote: add promisor_remote_reinit()
 - promisor-remote: implement promisor_remote_get_direct()
 - Add initial support for many promisor remotes
 - fetch-object: make functions return an error code
 - t0410: remove pipes after git commands
 - Merge branch 'jt/batch-fetch-blobs-in-diff' into cc/multi-promisor

 Teach the lazy clone machinery that there can be more than one
 promisor remote and consult them in order when downloading missing
 objects on demand.

 Needs review.


* nd/switch-and-restore (2019-05-07) 43 commits
 - Declare both git-switch and git-restore experimental
 - help: move git-diff and git-reset to different groups
 - doc: promote "git restore"
 - user-manual.txt: prefer 'merge --abort' over 'reset --hard'
 - completion: support restore
 - t: add tests for restore
 - restore: support --patch
 - restore: replace --force with --ignore-unmerged
 - restore: default to --source=HEAD when only --staged is specified
 - restore: reject invalid combinations with --staged
 - restore: add --worktree and --staged
 - checkout: factor out worktree checkout code
 - restore: disable overlay mode by default
 - restore: make pathspec mandatory
 - restore: take tree-ish from --source option instead
 - checkout: split part of it to new command 'restore'
 - doc: promote "git switch"
 - completion: support switch
 - t: add tests for switch
 - switch: make --orphan switch to an empty tree
 - switch: reject if some operation is in progress
 - switch: no worktree status unless real branch switch happens
 - switch: implicit dwim, use --no-guess to disable it
 - switch: add short option for --detach
 - switch: only allow explicit detached HEAD
 - switch: reject "do nothing" case
 - switch: stop accepting pathspec
 - switch: remove -l
 - switch: add --discard-changes
 - switch: better names for -b and -B
 - checkout: split part of it to new command 'switch'
 - checkout: split options[] array in three pieces
 - checkout: move 'confict_style' and 'dwim_..' to checkout_opts
 - checkout: make "opts" in cmd_checkout() a pointer
 - checkout: factor out some code in parse_branchname_arg()
 - checkout: keep most #include sorted
 - checkout: inform the user when removing branch state
 - checkout: advice how to get out of detached HEAD mode
 - t: rename t2014-switch.sh to t2014-checkout-switch.sh
 - git-checkout.txt: fix monospace typeset
 - doc: document --overwrite-ignore
 - git-checkout.txt: fix one syntax line
 - git-checkout.txt: spell out --no-option

 Two new commands "git switch" and "git restore" are introduced to
 split "checking out a branch to work on advancing its history" and
 "checking out paths out of the index and/or a tree-ish to work on
 advancing the current history" out of the single "git checkout"
 command.

 The "switch" part seems more or less ready for testing.  Perhaps
 we should split this back into two topics and merge it to 'next'.
 cf. <20190329103919.15642-1-pclouds@gmail.com> (switch v6)
 cf. <20190425094600.15673-1-pclouds@gmail.com> (restore v3)


* jc/format-patch-noclobber (2019-02-22) 1 commit
 - format-patch: --no-clobber refrains from overwriting output files

 "git format-patch" used to overwrite an existing patch/cover-letter
 file.  A new "--no-clobber" option stops it.

 Undecided but inclined to discard.


* am/p4-branches-excludes (2019-04-02) 8 commits
 - git-p4: respect excluded paths when detecting branches
 - git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
 - git-p4: don't exclude other files with same prefix
 - git-p4: add failing test for "don't exclude other files with same prefix"
 - git-p4: don't groom exclude path list on every commit
 - git-p4: match branches case insensitively if configured
 - git-p4: add failing test for "git-p4: match branches case insensitively if configured"
 - git-p4: detect/prevent infinite loop in gitCommitByP4Change()

 "git p4" update.

 Is this ready for 'next'?


* dl/rebase-i-keep-base (2019-04-25) 6 commits
 - rebase: teach rebase --keep-base
 - rebase: fast-forward --fork-point in more cases
 - rebase: fast-forward --onto in more cases
 - rebase: refactor can_fast_forward into goto tower
 - t3432: test rebase fast-forward behavior
 - t3431: add rebase --fork-point tests

 "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.

 On hold.
 cf. <20190508001252.15752-1-avarab@gmail.com>
 cf. <xmqqa7fxionx.fsf@gitster-ct.c.googlers.com>


* nd/worktree-name-sanitization (2019-05-15) 1 commit
  (merged to 'next' on 2019-05-16 at 9a2dd33122)
 + worktree add: sanitize worktree names

 In recent versions of Git, per-worktree refs are exposed in
 refs/worktrees/<wtname>/ hierarchy, which means that worktree names
 must be a valid refname component.  The code now sanitizes the names
 given to worktrees, to make sure these refs are well-formed.

 Will cook in 'next'.


* ds/commit-graph-write-refactor (2019-05-13) 11 commits
 - commit-graph: extract write_commit_graph_file()
 - commit-graph: extract copy_oids_to_commits()
 - commit-graph: extract count_distinct_commits()
 - commit-graph: extract fill_oids_from_all_packs()
 - commit-graph: extract fill_oids_from_commit_hex()
 - commit-graph: extract fill_oids_from_packs()
 - commit-graph: create write_commit_graph_context
 - commit-graph: remove Future Work section
 - commit-graph: collapse parameters into flags
 - commit-graph: return with errors during write
 - commit-graph: fix the_repository reference
 (this branch is used by ds/close-object-store.)

 Renamed from commit-graph-format-v2 and changed scope.

 Expecting a reroll.
 I think it is almost there, modulo a few internal API details..
 cf. <pull.112.v4.git.gitgitgadget@gmail.com> (v4)
 cf. <17829620-1084-74e5-54ad-aa95990f4dbd@gmail.com>


* br/blame-ignore (2019-05-17) 10 commits
 - SQUASH??? test-lint -- seq not portable
 - SQUASH??? error: decl-after-stmt
 - blame: use the fingerprint heuristic to match ignored lines
 - blame: add a fingerprint heuristic to match ignored lines
 - blame: optionally track line fingerprints during fill_blame_origin()
 - blame: add config options for the output of ignored or unblamable lines
 - blame: add the ability to ignore commits and their changes
 - blame: use a helper function in blame_chunk()
 - Move oidset_parse_file() to oidset.c
 - fsck: rename and touch up init_skiplist()

 "git blame" learned to "ignore" commits in the history, whose
 effects (as well as their presence) get ignored.

 cf. <20190515214503.77162-1-brho@google.com> (v7)

--------------------------------------------------
[Discarded]

* nd/precious (2019-04-09) 1 commit
 . Introduce "precious" file concept

 "git clean" learned to pay attention to the 'precious' attributes
 and keep untracked paths with the attribute instead of removing
 when the "--keep-precious" is given.

 Retracted.
 cf. <CACsJy8AEZ-Lz6zgEsuNukvphB9TTa9FAC1gK05fhnie2xtfc9w@mail.gmail.com>

 I am not sure what aspect of this longer-term "precious" vision,
 which gets taught to various commands and use cases individually
 and incrementally, Ævar finds problematic, which I understand is
 the reason of redtraction.


* jc/send-email-transferencoding-fix (2019-05-09) 2 commits
 . send-email: honor transferencoding config option again
 . send-email: update the mechanism to set default configuration values

 Replaced by  Ævar's "do the default in the right order" approach.
 cf. <20190508105607.178244-1-gitster@pobox.com> (v2)

^ permalink raw reply	[relevance 1%]

* [ANNOUNCE] Git v2.22.0-rc1
@ 2019-05-19  9:04  3% Junio C Hamano
  2019-05-19 20:30  0% ` Johannes Schindelin
  2019-05-20 19:06  7% ` Bryan Turner
  0 siblings, 2 replies; 43+ 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 3%]

* Re: [ANNOUNCE] Git v2.22.0-rc0
  2019-05-13 16:10  2% [ANNOUNCE] Git v2.22.0-rc0 Junio C Hamano
@ 2019-05-14  9:00  0% ` Johannes Schindelin
  0 siblings, 0 replies; 43+ results
From: Johannes Schindelin @ 2019-05-14  9:00 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers

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

Team,

Git for Windows v2.22.0-rc0 is now available from here:

	https://github.com/git-for-windows/git/releases/tag/v2.22.0-rc0.windows.1

Most notably, the built-in `git add -i` and `git add -p` is available as
an experimental option.

All your testing is appreciated!

Thanks,
Johannes

On Tue, 14 May 2019, Junio C Hamano wrote:

> An early preview release Git v2.22.0-rc0 is now available for
> testing at the usual places.  It is comprised of 648 non-merge
> commits since v2.21.0, contributed by 58 people, 11 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-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.21.0 are as follows.
> Welcome to the Git development community!
>
>   Alexander Blesius, Baruch Siach, Clément Chigot, Corentin
>   BOMPARD, Damien Robert, Michal Suchanek, Rohit Ashiwal, Sun Chao,
>   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, Christian Couder,
>   Daniels Umanovskis, David Aguilar, David Kastrup, Denton Liu,
>   Derrick Stolee, Elijah Newren, Eric Wong, 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.
>
>
> 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.
>
>
> 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).
>
>  * 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).
>
> --
> 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/xmqqef52baih.fsf%40gitster-ct.c.googlers.com.
> For more options, visit https://groups.google.com/d/optout.
>

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.22.0-rc0
@ 2019-05-13 16:10  2% Junio C Hamano
  2019-05-14  9:00  0% ` Johannes Schindelin
  0 siblings, 1 reply; 43+ results
From: Junio C Hamano @ 2019-05-13 16:10 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.22.0-rc0 is now available for
testing at the usual places.  It is comprised of 648 non-merge
commits since v2.21.0, contributed by 58 people, 11 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-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.21.0 are as follows.
Welcome to the Git development community!

  Alexander Blesius, Baruch Siach, Clément Chigot, Corentin
  BOMPARD, Damien Robert, Michal Suchanek, Rohit Ashiwal, Sun Chao,
  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, Christian Couder,
  Daniels Umanovskis, David Aguilar, David Kastrup, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Wong, 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.


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.


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).

 * 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).


^ permalink raw reply	[relevance 2%]

Results 1-43 of 43 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-01-31  8:57     New command/tool: git filter-repo Elijah Newren
2019-02-08 18:53     ` Ævar Arnfjörð Bjarmason
2019-06-08 16:20  6%   ` Elijah Newren
2019-05-13 16:10  2% [ANNOUNCE] Git v2.22.0-rc0 Junio C Hamano
2019-05-14  9:00  0% ` Johannes Schindelin
2019-05-19  9:04  3% [ANNOUNCE] Git v2.22.0-rc1 Junio C Hamano
2019-05-19 20:30  0% ` Johannes Schindelin
2019-05-20 19:06  7% ` Bryan Turner
2019-05-20 22:27  0%   ` Ævar Arnfjörð Bjarmason
2019-05-19  9:04  1% What's cooking in git.git (May 2019, #03; Sun, 19) Junio C Hamano
2019-05-21 18:32  0% ` js/rebase-cleanup, was " Johannes Schindelin
2019-05-19  9:20  1% Junio C Hamano
2019-05-30 21:23  2% [ANNOUNCE] Git v2.22.0-rc2 Junio C Hamano
2019-05-31 12:13  0% ` Git for Windows v2.22.0-rc2, was " Johannes Schindelin
2019-06-01  0:35     [PATCH v2 0/9] Filter combination Matthew DeVore
2019-06-13 21:51     ` [PATCH v3 00/10] " Matthew DeVore
2019-06-14 19:50  8%   ` Junio C Hamano
2019-06-03 20:23  4% [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 10:08  8% [GIT PULL] l10n updates for 2.22.0 round 3 Jiang Xin
2019-06-07 16:36  0% ` Junio C Hamano
2019-06-07 21:31  4% [ANNOUNCE] Git v2.22.0 Junio C Hamano
2019-06-07 22:48  0% ` Bhaskar Chowdhury
2019-06-12 22:20  1% What's cooking in git.git (Jun 2019, #03; Wed, 12) Junio C Hamano
2019-06-13  2:05  0% ` Denton Liu
2019-06-13 22:15     [RFC PATCH] rev-list: clarify --abbrev and --abbrev-commit usage Emily Shaffer
2019-06-14 16:18     ` Jeff King
2019-06-14 20:59       ` Emily Shaffer
2019-06-14 21:27         ` Jeff King
2019-06-14 22:56 10%       ` Emily Shaffer
2019-06-14 10:54  7% advertised commit fetch using commit id fails Karen Arutyunov
2019-06-14 15:27  0% ` Jeff King
2019-06-24 16:01 14% Git 2.22 , --preserve-merges fails with custom commentChar Dmitriy Smirnov
2019-07-26  2:18 10% Warnings in gc.log can prevent gc --auto from running Gregory Szorc
2019-07-29 10:07  0% ` Jeff King
2019-07-29 12:50  0%   ` Ævar Arnfjörð Bjarmason
2019-07-26 20:15  7% 2.22 issue across samba Gary Poli
2019-07-29 10:10  8% ` Jeff King
2020-02-24  8:33     Git Rebase: test failing with GIT_TEST_STASH_USE_BUILTIN=false Son Luong Ngoc
2020-02-25 16:57     ` Junio C Hamano
2020-03-02 18:18       ` [PATCH 1/2] stash: get git_stash_config at the top level Thomas Gummerer
2020-03-02 18:19  2%     ` [PATCH 2/2] stash: remove the stash.useBuiltin setting Thomas Gummerer
2020-03-03 13:33  0%       ` Johannes Schindelin
2020-03-03 17:36  0%         ` Thomas Gummerer
2020-03-04 16:41  0%           ` Johannes Schindelin
     [not found]           ` <CA+P7+xqVyMnG6FiyL4hngPfEEMi5CKz1qN5Cy1TMMpLg3CmsBw@mail.gmail.com>
2020-03-06 17:29  0%         ` Thomas Gummerer
2020-03-03 17:46         ` [PATCH v2 1/2] stash: get git_stash_config at the top level Thomas Gummerer
2020-03-03 17:46  2%       ` [PATCH v2 2/2] stash: remove the stash.useBuiltin setting Thomas Gummerer
2020-03-23 14:37  8% git > 2.10.1 fails to update index on macOS 10.14.5 Jonathan Smalls
2020-03-23 23:13  0% ` brian m. carlson
2020-03-24  1:36  7%   ` Jonathan Smalls
2020-03-24 23:59  0%     ` brian m. carlson
     [not found]     <CAF8BazBFsR5yQ0M5wscCfE-KuXTGZ=i4-1gP9NZZvjCfAD5NrQ@mail.gmail.com>
     [not found]     ` <CAF8BazC1kEV+s7vDSAkqcvjYVTCyDaw8gi0ZHpH7K+3Q4CAczA@mail.gmail.com>
2021-01-11 14:44       ` Fwd: error: 'submodule' does not have a commit checked out Aleksey Midenkov
2021-01-11 15:36  7%     ` Philippe Blain

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).