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: Bugreport: Prefix - is ignored when sorting (on committerdate)
  2023-01-10 13:33  7%       ` Fredrik Öberg
@ 2023-01-10 13:47  0%         ` Jeff King
  0 siblings, 0 replies; 42+ results
From: Jeff King @ 2023-01-10 13:47 UTC (permalink / raw)
  To: Fredrik Öberg; +Cc: Martin Ågren, git

On Tue, Jan 10, 2023 at 02:33:14PM +0100, Fredrik Öberg wrote:

> I am trying to understand what I did wrong. I guess you are saying
> that I tried to use the field committerdate, which is not available on
> the tags?

Right. The committerdate of a tag is a blank string, so sorting on it
was not doing anything.

> And that the handling of this situation has changed since
> git/2.23? Hence I got different results?

Sort of. Your committerdate sort was always doing nothing, but due to
the buggy way that the sort handled ties in 2.23 and older, it happened
to do a reverse refname sort instead of a forward refname sort. Now it
does a forward refname sort to break ties.

But the most important change for you is to actually do a real date
sort, so the tie-breaking should not be important either way.

-Peff

^ permalink raw reply	[relevance 0%]

* Re: Bugreport: Prefix - is ignored when sorting (on committerdate)
  @ 2023-01-10 13:33  7%       ` Fredrik Öberg
  2023-01-10 13:47  0%         ` Jeff King
  0 siblings, 1 reply; 42+ results
From: Fredrik Öberg @ 2023-01-10 13:33 UTC (permalink / raw)
  To: Martin Ågren; +Cc: Jeff King, git

Thanks for the  quick response! I've been playing with creatordate and
it seems to work with with both older and newer versions of git.

I am trying to understand what I did wrong. I guess you are saying
that I tried to use the field committerdate, which is not available on
the tags? And that the handling of this situation has changed since
git/2.23? Hence I got different results?

/Fredrik

Den tis 10 jan. 2023 kl 14:05 skrev Martin Ågren <martin.agren@gmail.com>:
>
> On Tue, 10 Jan 2023 at 13:18, Jeff King <peff@peff.net> wrote:
> >
> > On Tue, Jan 10, 2023 at 11:54:16AM +0100, Martin Ågren wrote:
> >
> > > I suppose it could be argued that the '-' should be applied to the
> > > fallback as well, e.g., to uphold some sort of "using '-' should give
> > > the same result as piping the whole thing through tac" (i.e., respecting
> > > `s->reverse` in `compare_refs()`, if you're following along in
> > > 7c5045fc18). With multiple sort keys, some with '-' and some
> > > without, we'd grab the '-' from the first key. It seems like that could
> > > make sense, actually.
> >
> > I dunno. Just because you are reverse-sorting on one field doesn't
> > necessarily imply that you want the tie-breaker to reverse-sort, too. I
> [...]
>
> > I could see it depending on exactly what you're trying to do. Which
> > leads me to think the rule should be as simple as possible. You can
> > always do:
> >
> >   git for-each-ref --sort=-refname --sort=-committerdate
> >
> > to specify exactly what you want.
>
> Indeed. So probably best to leave it as-is, then.
>
> Martin

^ permalink raw reply	[relevance 7%]

* Re: Partial Clone, and a strange slow rev-list call on fetch
  2021-06-02  4:56  6% Partial Clone, and a strange slow rev-list call on fetch Tao Klerks
@ 2021-06-02 11:18  0% ` Derrick Stolee
  0 siblings, 0 replies; 42+ results
From: Derrick Stolee @ 2021-06-02 11:18 UTC (permalink / raw)
  To: Tao Klerks, git

On 6/2/21 12:56 AM, Tao Klerks wrote:
> Hi folks,
> 
> I'm learning to use Partial Clone, and finding a behavior that I don't
> know how to interpret or investigate:
> 
> Under some circumstances, doing a plain "git fetch <remote>" on a
> filtered repo results in a very long (6-30 min?) wait, during which I
> can see the following command being executed in the background:
> 
> /usr/libexec/git-core/git rev-list --objects --stdin
> --exclude-promisor-objects --not --all --quiet --alternate-refs
> 
> So far, I have noted this happening under two distinct circumstances:
> * Anytime I try to fetch on a filtered repo with a git 2.23 client -
> shorter pause
> * When I try to fetch with a recent (2.31) client in a repo where one
> large packfile has no *.promisor file (but the others do, and the
> remote I am fetching from has promisor=true) - looong pause

This makes me think that there was a bug fix for this situation
but the fix requires doing extra work. To help track this down,
could you re-run the scenario with GIT_TRACE2_PERF=1 which will
give the full Git process stack as we reach that rev-list call.

> Can anyone explain what this rev-list call intends, and/or any hints
> as to how I could see what the stdin content being fed to it from the
> parent process actually is?
> 
> For background, I ended up in the "missing promisor file" situation by
> trying to be (too?) clever about the blobs present in my clone: I
> cloned unfiltered shallow to a certain depth with certain refspecs,
> then added the promisor and filter config, and finally fetched with
> "--unshallow". This produced exactly the blob-population state I
> intended, but meant the original first packfile had no ".promisor"
> file.

This is the critical point: you first cloned without a filter,
and then converted the remote to a promisor remote without
marking the pack-files you received from that remote as promisor
pack-files. That means that Git needs to do some work to discover
which objects are reachable from promisor packs or not, and that
extra work is slowing you down.

Partial clone is designed to work where every remote is a
promisor remote, and always has been so. Any deviation from that
norm is venturing into uncharted territory and will have friction
like this. Another similar issue comes when you have multiple
remotes and one of them is a promisor remote and another is not.

The general advice right now is to use partial clone only if you
will use it for all remotes across the entire existence of the
repo.

Part of the difficulty here is that once you download that first
pack-file from the remote, Git has no way of knowing that the
pack came from that source or was created in another way. We
have no way to be sure that we can "upgrade" the remote in an
automated process.

This does make me wonder what happens when Git repacks objects
created locally and then starts fetching from a promisor remote.

There are some challenges here, for sure. Most likely also some
potential gains, but it is unlikely to create a seamless
experience for what you are trying to do.

Thanks,
-Stolee

^ permalink raw reply	[relevance 0%]

* Partial Clone, and a strange slow rev-list call on fetch
@ 2021-06-02  4:56  6% Tao Klerks
  2021-06-02 11:18  0% ` Derrick Stolee
  0 siblings, 1 reply; 42+ results
From: Tao Klerks @ 2021-06-02  4:56 UTC (permalink / raw)
  To: git

Hi folks,

I'm learning to use Partial Clone, and finding a behavior that I don't
know how to interpret or investigate:

Under some circumstances, doing a plain "git fetch <remote>" on a
filtered repo results in a very long (6-30 min?) wait, during which I
can see the following command being executed in the background:

/usr/libexec/git-core/git rev-list --objects --stdin
--exclude-promisor-objects --not --all --quiet --alternate-refs

So far, I have noted this happening under two distinct circumstances:
* Anytime I try to fetch on a filtered repo with a git 2.23 client -
shorter pause
* When I try to fetch with a recent (2.31) client in a repo where one
large packfile has no *.promisor file (but the others do, and the
remote I am fetching from has promisor=true) - looong pause

Can anyone explain what this rev-list call intends, and/or any hints
as to how I could see what the stdin content being fed to it from the
parent process actually is?

For background, I ended up in the "missing promisor file" situation by
trying to be (too?) clever about the blobs present in my clone: I
cloned unfiltered shallow to a certain depth with certain refspecs,
then added the promisor and filter config, and finally fetched with
"--unshallow". This produced exactly the blob-population state I
intended, but meant the original first packfile had no ".promisor"
file.

Creating an empty promisor file for that packfile *appears* to fix the
issue, and hasn't produced any weird side-effects that I've noted, and
from the "removing partial clone filtering" description from gitlab at
https://docs.gitlab.com/ee/topics/git/partial_clone.html#remove-partial-clone-filtering,
appears to be a reasonable thing to do (the implication there is that
a promisor packfile with no missing objects hs exactly the same
structure as a non-promisor packfile), but of course I would welcome
any validation or correction to that assumption.

Thanks for any info,
Tao Klerks

^ permalink raw reply	[relevance 6%]

* Re: Why won't git checkout a branch?
  @ 2020-07-01 15:13  7%     ` Chris Torek
  0 siblings, 0 replies; 42+ results
From: Chris Torek @ 2020-07-01 15:13 UTC (permalink / raw)
  To: noloader; +Cc: Andreas Schwab, Git List

On Wed, Jul 1, 2020 at 3:10 AM Jeffrey Walton <noloader@gmail.com> wrote:
> This does not look normal, either. I don't want to create a new
> branch. I want to work on the existing branch.

Technically, you *have to* create a new branch here: you do
not have an `m4` branch (yet). Your local repository's branches
are independent of the branches in the repository you cloned.

(You could work in detached HEAD state to avoid the technical
requirement here but that's not practical for normal humans. :-) )

The suffix-`--` trick works in old versions of Git, creating the `m4`
branch from the `origin/m4` name.  If you upgrade to Git 2.23 or
later and use `git switch`, I think you will find that it's generally
more user friendly.

Chris

^ permalink raw reply	[relevance 7%]

* Re: [BUG?] ls-files -o now traverses nested repo when given multiple pathspecs
  2019-12-08  5:42  6%   ` Elijah Newren
@ 2019-12-08  7:46  0%     ` Elijah Newren
  0 siblings, 0 replies; 42+ results
From: Elijah Newren @ 2019-12-08  7:46 UTC (permalink / raw)
  To: Kyle Meyer; +Cc: Git Mailing List

On Sat, Dec 7, 2019 at 9:42 PM Elijah Newren <newren@gmail.com> wrote:
>
> Hi Kyle,
>
> On Sat, Dec 7, 2019 at 9:31 PM Kyle Meyer <kyle@kyleam.com> wrote:
> >
> > Kyle Meyer <kyle@kyleam.com> writes:
> >
> > > Elijah Newren <newren@gmail.com> writes:
> > >> [...]
> > >> At least my changes in git-2.24.0 made the behavior consistent; it'll
> > >> always traverse into a directory that matches a given pathspec.
> > >
> > > I might be getting mixed up, but the changes in 2.24.0 did introduce
> > > some inconsistent behavior (in the no trailing slash case) with respect
> > > to giving a single pathspec and giving multiple pathspecs, no?  Using
> > > your example:
> > >
> > >     $ git --version
> > >     git version 2.24.0
> > >     $ git ls-files -o untracked_repo
> > >     untracked_repo/
> > >     $ git ls-files -o untracked_repo empty
> > >     empty
> > >     untracked_repo/
> > >     untracked_repo/empty
> >
> > It looks like the "multiple pathspecs trigger traversal" change isn't
> > limited to nested repositories.  It can also be observed with
> > --directory and plain untracked directories.  Assume the tree layout
> > from your example again.  With a single pathspec (and no slash),
> > 'ls-files -o --directory' will not expand the untracked directory's
> > contents:
> >
> >     $ git ls-files -o --directory untracked_dir
> >     untracked_dir/
> >
> > But, as of 89a1f4aaf7, tacking on an additional pathspec will cause
> > ls-files to traverse into the untracked directory:
> >
> >     $ git ls-files -o --directory untracked_dir empty
> >     empty
> >     untracked_dir/
> >     untracked_dir/empty
> >
> > In contrast, on 89a1f4aaf7^ the same command shows
> >
> >     $ git ls-files -o --directory untracked_dir empty
> >     empty
> >     untracked_dir/
>
> Yeah, I spotted that too.  You left out a case, a single pathspec with
> the trailing slash:
>
>    git ls-files -o --directory untracked_dir/
>
> That will traverse into the directory before or after my changes.  I
> also spotted a few other bugs, e.g. try out 'git ls-files -o .git/'
> (with either git-2.23 or git-2.24).  Whoops.  We do correctly avoid
> traversing into the .git directory if multiple pathspecs are provided.
> Anyway, this whole area seems to be a bug factory.  Every time I think
> I'm close to having some patches to send to the list to fix up the
> issues I've found, I find the fix isn't where I thought it was and/or
> find yet another bug.  Quite aggravating.
>
> I'm thinking of just sending the patches I have, since they fix up all
> the issues we've discussed so far (including the .git/ case I just
> mentioned), and ignoring the 2-3 other bugs I found that are still
> broken other than providing testcases documenting their breakage.

If you want to take an early look, I've got some patches up at
https://github.com/git/git/pull/676.  I plan to write a proper cover
letter and submit to the list on Monday.

^ permalink raw reply	[relevance 0%]

* Re: [BUG?] ls-files -o now traverses nested repo when given multiple pathspecs
  @ 2019-12-08  5:42  6%   ` Elijah Newren
  2019-12-08  7:46  0%     ` Elijah Newren
  0 siblings, 1 reply; 42+ results
From: Elijah Newren @ 2019-12-08  5:42 UTC (permalink / raw)
  To: Kyle Meyer; +Cc: Git Mailing List

Hi Kyle,

On Sat, Dec 7, 2019 at 9:31 PM Kyle Meyer <kyle@kyleam.com> wrote:
>
> Kyle Meyer <kyle@kyleam.com> writes:
>
> > Elijah Newren <newren@gmail.com> writes:
> >> [...]
> >> At least my changes in git-2.24.0 made the behavior consistent; it'll
> >> always traverse into a directory that matches a given pathspec.
> >
> > I might be getting mixed up, but the changes in 2.24.0 did introduce
> > some inconsistent behavior (in the no trailing slash case) with respect
> > to giving a single pathspec and giving multiple pathspecs, no?  Using
> > your example:
> >
> >     $ git --version
> >     git version 2.24.0
> >     $ git ls-files -o untracked_repo
> >     untracked_repo/
> >     $ git ls-files -o untracked_repo empty
> >     empty
> >     untracked_repo/
> >     untracked_repo/empty
>
> It looks like the "multiple pathspecs trigger traversal" change isn't
> limited to nested repositories.  It can also be observed with
> --directory and plain untracked directories.  Assume the tree layout
> from your example again.  With a single pathspec (and no slash),
> 'ls-files -o --directory' will not expand the untracked directory's
> contents:
>
>     $ git ls-files -o --directory untracked_dir
>     untracked_dir/
>
> But, as of 89a1f4aaf7, tacking on an additional pathspec will cause
> ls-files to traverse into the untracked directory:
>
>     $ git ls-files -o --directory untracked_dir empty
>     empty
>     untracked_dir/
>     untracked_dir/empty
>
> In contrast, on 89a1f4aaf7^ the same command shows
>
>     $ git ls-files -o --directory untracked_dir empty
>     empty
>     untracked_dir/

Yeah, I spotted that too.  You left out a case, a single pathspec with
the trailing slash:

   git ls-files -o --directory untracked_dir/

That will traverse into the directory before or after my changes.  I
also spotted a few other bugs, e.g. try out 'git ls-files -o .git/'
(with either git-2.23 or git-2.24).  Whoops.  We do correctly avoid
traversing into the .git directory if multiple pathspecs are provided.
Anyway, this whole area seems to be a bug factory.  Every time I think
I'm close to having some patches to send to the list to fix up the
issues I've found, I find the fix isn't where I thought it was and/or
find yet another bug.  Quite aggravating.

I'm thinking of just sending the patches I have, since they fix up all
the issues we've discussed so far (including the .git/ case I just
mentioned), and ignoring the 2-3 other bugs I found that are still
broken other than providing testcases documenting their breakage.

^ permalink raw reply	[relevance 6%]

* Re: git-rebase produces incorrect output
  2019-11-29  8:21  6% git-rebase produces incorrect output Pavel Roskin
  2019-11-29 13:31  0% ` Philip Oakley
@ 2019-11-30  4:22  0% ` Elijah Newren
  1 sibling, 0 replies; 42+ results
From: Elijah Newren @ 2019-11-30  4:22 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: Git Mailing List

On Fri, Nov 29, 2019 at 12:24 AM Pavel Roskin <plroskin@gmail.com> wrote:
>
> Hi!
>
> I've discovered an issue with "git rebase" producing a subtly
> incorrect file. In fact, that files even compiled but failed in unit
> tests! That's so scary that I'm going to stop using "git rebase" for
> now. Fortunately, "git rebase --merge" is working correctly, so I'll
> use it. Too bad there is no option to use "--merge" by default.

Indeed.  We really should fix that, if not just make it the default
for everyone.

> The issue was observed in git 2.23 and reproduced in today's next
> branch (2.24.0.449.g4c06f74957) on up-to-date Fedora 31 x86_64.
>
> I've created a repository that demonstrates the issue:
> https://github.com/proski/git-rebase-demo
>
> The branch names should be self-explanatory. "master" is the base,
> "branch1" and "branch2" contain one change each. If "branch1" is
> rebased on top of "branch2", the result is incorrect, saved in the
> "rebase-bad" branch. If "git rebase -m" is used, the result is
> correct, saved in the "merge-good" branch.
>
> The files in "rebase-bad" and "merge-good" have exactly the same lines
> but in a different order. Yet the changes on branch1 and branch2
> affect non-overlapping parts of the file. There should be no doubt how
> the merged code should look like.
>
> I believe the change on branch2 shifts the lines, so that the first
> change from branch1 is applies to a place below the intended location,
> and then git goes back to an earlier line to apply the next hunk. I
> can imagine that it would do the right thing in case of swapped blocks
> of code. Yet I have a real life example where it does a very wrong
> thing.
>
> Indeed, "git diff origin/branch2 origin/rebase-bad" and "git diff
> origin/branch2 origin/merge-good" both produce diffs of 9957 bytes
> long, different only in the order of the hunks.
>
> Another interesting data point - "git rebase --interactive" is working
> correctly.

Thanks for the detailed report and simple testcase.  Turns out the
--interactive isn't so interesting, because a few cycles back we
re-implemented the --merge behavior on top of the interactive
machinery so the two use the exact same engine.  Anyway, I can
duplicate the problem and noticed a few interesting things.  Since the
am-backend for rebase (the default) basically just uses diff and
apply, I tried duplicating with just those after looking at things and
noticing that it appeared to be applying patch hunks on the wrong
lines:

$ git switch branch2

$ git reset --hard origin/branch2
HEAD is now at 1331204 Change on branch 2
$ git diff -U3 origin/master origin/branch1 >diff.patch
$ git apply diff.patch
$ git diff --shortstat origin/merge-good
 1 file changed, 43 insertions(+), 43 deletions(-)
$ git diff --shortstat origin/rebase-bad

So, this reproduces your bad results.  Let's repeat with -U4:

$ git reset --hard origin/branch2
HEAD is now at 1331204 Change on branch 2
$ git diff -U4 origin/master origin/branch1 >diff.patch
$ git apply diff.patch
$ git diff --shortstat origin/merge-good
 1 file changed, 10 insertions(+), 10 deletions(-)
$ git diff --shortstat origin/rebase-bad
 1 file changed, 37 insertions(+), 37 deletions(-)

That gives us a result that matches neither merge-good nor rebase-bad,
but is closer to the good side.  Let's try again with -U5:

$ git reset --hard origin/branch2
HEAD is now at 1331204 Change on branch 2
$ git diff -U5 origin/master origin/branch1 >diff.patch
$ git apply diff.patch
$ git diff --shortstat origin/merge-good
$ git diff --shortstat origin/rebase-bad
 1 file changed, 43 insertions(+), 43 deletions(-)

Ahah!  With five lines of context, git diff & git apply can produce
the correct result.

Sadly, I tried to force this with git rebase, but -C5 only affected
the apply side and there's no option to pass to rebase to pass through
-U5 to the diff logic.  Also, although there is a diff.context config
option, git-am ignores it (Note that git_am_config() does not directly
check that value and it calls git_default_config(), not
git_diff_ui_config() or even git_diff_basic_config()).  So, it's not
possible to force the am-based rebase to get the right answer
currently even if you figure out what the problem is.

The merge-based rebase, by contrast, essentially benfits from having
the entire files of each version accessible so it automatically gets
it right.


So, to summarize here:
  * you have a case where the default 3 lines of context mess stuff
up; but rebase --merge works great
  * am doesn't have a -U option, and ignores the diff.context setting,
making it impossible to force the am backend to work on your case
and also:
  * rebase doesn't have an option to use the merge/interactive backend
by default (nor an --am option to override it)
Also,
  * The performance of the merge/interactive backend is slightly
better than the am-backend
(https://public-inbox.org/git/CABPp-BF=ev03WgODk6TMQmuNoatg2kiEe5DR__gJ0OTVqHSnfQ@mail.gmail.com/)
and will be getting better
  * The merge/interactive backend supports many more options than the
am-backend, though the am one still has a few the merge backend
doesn't.  Once the ra/rebase-i-more-options topic merges, --whitespace
will be the only consequential option that the am-backend supports
that the merge/interactive-backend doesn't.  (There's also -C, but as
noted above, the merge/interactive backend already have access to the
full file).

Maybe we should just switch the default, for everyone?  (And provide
an --am option to override it and a config setting to get the old
default?)

^ permalink raw reply	[relevance 0%]

* Re: git-rebase produces incorrect output
  2019-11-29  8:21  6% git-rebase produces incorrect output Pavel Roskin
@ 2019-11-29 13:31  0% ` Philip Oakley
  2019-11-30  4:22  0% ` Elijah Newren
  1 sibling, 0 replies; 42+ results
From: Philip Oakley @ 2019-11-29 13:31 UTC (permalink / raw)
  To: Pavel Roskin, git

On 29/11/2019 08:21, Pavel Roskin wrote:
> Hi!
>
> I've discovered an issue with "git rebase" producing a subtly
> incorrect file. In fact, that files even compiled but failed in unit
> tests! That's so scary that I'm going to stop using "git rebase" for
> now. Fortunately, "git rebase --merge" is working correctly, so I'll
> use it. Too bad there is no option to use "--merge" by default.
>
> The issue was observed in git 2.23 and reproduced in today's next
> branch (2.24.0.449.g4c06f74957) on up-to-date Fedora 31 x86_64.
>
> I've created a repository that demonstrates the issue:
> https://github.com/proski/git-rebase-demo
>
> The branch names should be self-explanatory. "master" is the base,
> "branch1" and "branch2" contain one change each. If "branch1" is
> rebased on top of "branch2", the result is incorrect, saved in the
> "rebase-bad" branch. If "git rebase -m" is used, the result is
> correct, saved in the "merge-good" branch.
>
> The files in "rebase-bad" and "merge-good" have exactly the same lines
> but in a different order. Yet the changes on branch1 and branch2
> affect non-overlapping parts of the file. There should be no doubt how
> the merged code should look like.
>
> I believe the change on branch2 shifts the lines, so that the first
> change from branch1 is applies to a place below the intended location,
> and then git goes back to an earlier line to apply the next hunk. I
> can imagine that it would do the right thing in case of swapped blocks
> of code. Yet I have a real life example where it does a very wrong
> thing.
>
> Indeed, "git diff origin/branch2 origin/rebase-bad" and "git diff
> origin/branch2 origin/merge-good" both produce diffs of 9957 bytes
> long, different only in the order of the hunks.
>
> Another interesting data point - "git rebase --interactive" is working
> correctly.
>
Which specific lines is this on?

Using the Github compare facility [1], I see multiple changes, some of 
which are probably just noise from the example.
  https://github.com/proski/git-rebase-demo/compare/merge-good...rebase-bad

Philip

[1] 
https://help.github.com/en/github/committing-changes-to-your-project/comparing-commits-across-time

^ permalink raw reply	[relevance 0%]

* git-rebase produces incorrect output
@ 2019-11-29  8:21  6% Pavel Roskin
  2019-11-29 13:31  0% ` Philip Oakley
  2019-11-30  4:22  0% ` Elijah Newren
  0 siblings, 2 replies; 42+ results
From: Pavel Roskin @ 2019-11-29  8:21 UTC (permalink / raw)
  To: git

Hi!

I've discovered an issue with "git rebase" producing a subtly
incorrect file. In fact, that files even compiled but failed in unit
tests! That's so scary that I'm going to stop using "git rebase" for
now. Fortunately, "git rebase --merge" is working correctly, so I'll
use it. Too bad there is no option to use "--merge" by default.

The issue was observed in git 2.23 and reproduced in today's next
branch (2.24.0.449.g4c06f74957) on up-to-date Fedora 31 x86_64.

I've created a repository that demonstrates the issue:
https://github.com/proski/git-rebase-demo

The branch names should be self-explanatory. "master" is the base,
"branch1" and "branch2" contain one change each. If "branch1" is
rebased on top of "branch2", the result is incorrect, saved in the
"rebase-bad" branch. If "git rebase -m" is used, the result is
correct, saved in the "merge-good" branch.

The files in "rebase-bad" and "merge-good" have exactly the same lines
but in a different order. Yet the changes on branch1 and branch2
affect non-overlapping parts of the file. There should be no doubt how
the merged code should look like.

I believe the change on branch2 shifts the lines, so that the first
change from branch1 is applies to a place below the intended location,
and then git goes back to an earlier line to apply the next hunk. I
can imagine that it would do the right thing in case of swapped blocks
of code. Yet I have a real life example where it does a very wrong
thing.

Indeed, "git diff origin/branch2 origin/rebase-bad" and "git diff
origin/branch2 origin/merge-good" both produce diffs of 9957 bytes
long, different only in the order of the hunks.

Another interesting data point - "git rebase --interactive" is working
correctly.

-- 
Regards,
Pavel Roskin

^ permalink raw reply	[relevance 6%]

* difftool fails with dangling symlinks, writes to targets outside of the repository
@ 2019-11-22 12:37  7% Philippe
  0 siblings, 0 replies; 42+ results
From: Philippe @ 2019-11-22 12:37 UTC (permalink / raw)
  To: Git mailing list

Hi all,


I'm using a git repository for configuration management which contains
several dangling symlinks (which only make sense on the to be deployed
system, fwiw). Now, using git 2.23, I ran into a problem regarding the
difftool, which fails when such a symlink is involved in a changeset.

The best way to describe that problem is probably to provide an example.

> #!/bin/bash
> tmp=$(mktemp -d)
> trap "rm -rf ${tmp}" 0 1 2 15
> 
> set -x
> 
> cd ${tmp}
> git init
> ln -s ../doesnot/exist myfile
> git add myfile ; git commit -m "initial checkin" myfile
> 
> git checkout -b mybranch
> rm -f myfile ; echo "foo" > myfile
> git commit -am "typechange"
> 
> git difftool -d master..mybranch

The last call fails with:

> fatal: could not open '/tmp/git-difftool.2wHaR9/left/myfile' for writing: No such file or directory

Neither specifying "--symlinks" nor "--no-symlinks" resolves that.

Playing around with this issue lead me to another strange behaviour.
Difftool might overwrite symlink targets that are not part of the
repository. Please take a look at the following script:

> #!/bin/bash
> tmp=$(mktemp -d)
> trap "rm -rf ${tmp}" 0 1 2 15
> 
> set -x
> 
> echo "hello world" > /tmp/testfile
> cat /tmp/testfile
> 
> cd ${tmp}
> git init
> ln -s /tmp/testfile myfile
> git add myfile ; git commit -m "initial checkin" myfile
> 
> git checkout -b mybranch
> rm -f myfile ; echo "foo" > myfile
> git commit -am "typechange"
> 
> git difftool -d master..mybranch
> 
> cat /tmp/testfile

Here, difftool overwrites the /tmp/testfile's content "hello world" with
"/tmp/testfile".

Did I run into a bug or is it a layer 8 problem?


Regards,

Philippe

^ permalink raw reply	[relevance 7%]

* [ANNOUNCE] Git v2.24.0
@ 2019-11-04  5:36  1% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-11-04  5:36 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.24.0 is now available at the
usual places.  It is comprised of 544 non-merge commits since
v2.23.0, contributed by 78 people, 21 of which are new faces.

The tarballs are found at:

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

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

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

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

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Christopher Diaz Riveros, Garima Singh,
  Hervé Beraud, Jakob Jarmar, kdnakt, Kunal Tyagi, Maxim
  Belsky, Max Rothman, Norman Rasmussen, Paul Wise, Pedro Sousa,
  Philip.McGraw, Pratyush Yadav, Thomas Klaeger, William Baker,
  and YanKe.

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

  Adam Roben, Ævar Arnfjörð Bjarmason, Alessandro Menti,
  Alexander Shopov, Alex Henrie, Andrey Mazo, Beat Bolli, Ben
  Wijen, Bert Wesarg, Birger Skogeng Pedersen, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Clément Chigot,
  Corentin BOMPARD, David Turner, Denton Liu, Derrick Stolee,
  Elijah Newren, Emily Shaffer, Eric Wong, Gabriele Mazzotta,
  Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons, Jordi Mas,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Matthias Rüster, Michael
  J Gruber, Mike Hommey, Mischa POSLAWSKY, Paul Mackerras,
  Peter Krefting, Phillip Wood, René Scharfe, Robert Luberda,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, Trần Ngọc Quân, and Varun Naik.

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

Git 2.24 Release Notes
======================

Updates since v2.23
-------------------

Backward compatibility note

 * "filter-branch" is showing its age and alternatives are available.
   From this release, we started to discourage its use and hint
   people about filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machinery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
   (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
   (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).

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

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alessandro Menti (2):
      l10n: it.po: update the Italian translation for Git 2.24.0
      l10n: it.po: update the Italian translation for Git 2.24.0 round #2

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (4693)
      l10n: bg.po: Updated Bulgarian translation (4694)

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (7):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      git-gui: use existing interface to query a path's attribute
      git-gui: support for diff3 conflict style
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Christopher Diaz Riveros (1):
      l10n: es: 2.24.0 round 2

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (17):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version
      t5510-fetch.sh: demonstrate fetch.writeCommitGraph bug
      commit-graph: fix writing first commit-graph during fetch

Elijah Newren (55):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label
      RelNotes/2.24.0: typofix
      RelNotes/2.24.0: fix self-contradictory note

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jean-Noël Avila (2):
      l10n: fr 2.24.0 rnd 1
      l10n: fr v2.24.0 rnd2

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Jiang Xin (3):
      l10n: git.pot: v2.24.0 round 1 (35 new, 16 removed)
      l10n: git.pot: v2.24.0 round 2 (1 new)
      l10n: zh_CN: for git v2.24.0 l10n round 1~2

Johannes Schindelin (46):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Fix build with core.autocrlf=true
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask
      mingw: avoid a buffer overrun in `needs_hiding()`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (7):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions
      fetch: delay fetch_if_missing=0 until after config

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (18):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1
      Git 2.24-rc2
      Git 2.24

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (16):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      treewide: correct several "up-to-date" to "up to date"
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor
      manpage-bold-literal.xsl: match for namespaced "d:literal" in template

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Matthias Rüster (1):
      l10n: de.po: Update German translation

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

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

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (7):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo
      git-gui: add a readme

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

Robert Luberda (1):
      gitweb: correctly store previous rev in javascript-actions mode

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Thomas Klaeger (1):
      git-gui (Windows): use git-bash.exe if it is available

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Trần Ngọc Quân (1):
      l10n: vi(4694t): Updated translation for v2.24.0

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (2):
      fsmonitor: don't fill bitmap with entries to be removed
      t7519-status-fsmonitor: improve comments

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

kdnakt (1):
      git-gui: improve Japanese translation

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 1%]

* [ANNOUNCE] Git v2.24.0-rc2
@ 2019-10-30  7:14  1% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-10-30  7:14 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.24.0-rc2 is now available for testing
at the usual places.  It is comprised of 515 non-merge commits
since v2.23.0, contributed by 67 people, 18 of which are new faces.

The tarballs are found at:

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

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

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

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

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Maxim Belsky, Max Rothman, Norman Rasmussen, Paul
  Wise, Pedro Sousa, Philip.McGraw, Pratyush Yadav, William Baker,
  and YanKe.

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

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Robert Luberda, Stephen Boyd, Stephen P. Smith, Sun Chao,
  SZEDER Gábor, Tanay Abhra, Taylor Blau, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, and Varun Naik.

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

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
   (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
   (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).

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

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (5):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (15):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (45):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask
      mingw: avoid a buffer overrun in `needs_hiding()`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (17):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1
      Git 2.24-rc2

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

Robert Luberda (1):
      gitweb: correctly store previous rev in javascript-actions mode

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (2):
      fsmonitor: don't fill bitmap with entries to be removed
      t7519-status-fsmonitor: improve comments

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 1%]

* [ANNOUNCE] Git v2.24.0-rc1
@ 2019-10-24  6:00  1% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-10-24  6:00 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.24.0-rc1 is now available for testing
at the usual places.  It is comprised of 511 non-merge commits
since v2.23.0, contributed by 66 people, 18 of which are new faces.

The tarballs are found at:

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

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

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

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

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Maxim Belsky, Max Rothman, Norman Rasmussen, Paul
  Wise, Pedro Sousa, Philip.McGraw, Pratyush Yadav, William Baker,
  and YanKe.

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

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, and Varun Naik.

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

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).

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

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (5):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (15):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (44):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (16):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (1):
      fsmonitor: don't fill bitmap with entries to be removed

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 1%]

* [ANNOUNCE] Git v2.24.0-rc0
@ 2019-10-18  6:29  1% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-10-18  6:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.24.0-rc0 is now available for
testing at the usual places.  It is comprised of 493 non-merge
commits since v2.23.0, contributed by 63 people, 15 of which are
new faces.

The tarballs are found at:

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

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

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

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

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Max Rothman, Paul Wise, Pedro Sousa, Philip.McGraw,
  Pratyush Yadav, and YanKe.

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

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, and Varun Naik.

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

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).

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

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (4):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (4):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (49):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target

Derrick Stolee (14):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (41):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (14):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

SZEDER Gábor (33):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow

Stephen Boyd (1):
      userdiff: add a builtin pattern for dts files

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (43):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 1%]

* Re: [PATCH v3 00/20] hashmap bug/safety/ease-of-use fixes
  2019-10-06 23:30  2% [PATCH v3 00/20] hashmap bug/safety/ease-of-use fixes Eric Wong
@ 2019-10-08  8:58  0% ` Johannes Schindelin
  0 siblings, 0 replies; 42+ results
From: Johannes Schindelin @ 2019-10-08  8:58 UTC (permalink / raw)
  To: Eric Wong; +Cc: Junio C Hamano, git, Derrick Stolee, Phillip Wood

Hi Eric & Junio,

On Sun, 6 Oct 2019, Eric Wong wrote:

> v3 changes:
> - use __typeof__ to avoid invalid clang warning on uninitialized var
> - formatting fixes recommended by Stolee
> - add Reviewed-by for Stolee
> - add patch 20 to update docs to drop first member requirement

This has quite a bit of fallout, even more than previous rounds, it
seems. I need at least these fixup???s to fix the build of `pu`:

https://github.com/git-for-windows/git/commit/f74259754971b427a14e6290681e18950824b99d
https://github.com/git-for-windows/git/commit/124c8bc08e974e76ca7d956dc07eb288e71d639e
https://github.com/git-for-windows/git/commit/45948433d1b48ff513fbd37f134c0f1491c78192

Junio, feel free to fetch and squash those into the appropriate merge
commit(s) (I feel that 4432e8b5f36 (Merge branch 'ds/sparse-cone' into
pu, 2019-10-08) may be the right spot).

Thanks,
Dscho

>
> v2 here:
>   https://public-inbox.org/git/20190924010324.22619-1-e@80x24.org/
>
> The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:
>
>   First batch after Git 2.23 (2019-08-22 12:41:04 -0700)
>
> are available in the Git repository at:
>
>   https://80x24.org/git-svn.git hashmap-wip-v3
>
> for you to fetch changes up to 4ec5200646d6b9363e64e2002eb374aa888a6c88:
>
>   hashmap_entry: remove first member requirement from docs (2019-10-06 23:05:22 +0000)
>
> ----------------------------------------------------------------
> Eric Wong (20):
>       diff: use hashmap_entry_init on moved_entry.ent
>       coccicheck: detect hashmap_entry.hash assignment
>       packfile: use hashmap_entry in delta_base_cache_entry
>       hashmap_entry_init takes "struct hashmap_entry *"
>       hashmap_get_next takes "const struct hashmap_entry *"
>       hashmap_add takes "struct hashmap_entry *"
>       hashmap_get takes "const struct hashmap_entry *"
>       hashmap_remove takes "const struct hashmap_entry *"
>       hashmap_put takes "struct hashmap_entry *"
>       introduce container_of macro
>       hashmap_get_next returns "struct hashmap_entry *"
>       hashmap: use *_entry APIs to wrap container_of
>       hashmap_get{,_from_hash} return "struct hashmap_entry *"
>       hashmap_cmp_fn takes hashmap_entry params
>       hashmap: use *_entry APIs for iteration
>       hashmap: hashmap_{put,remove} return hashmap_entry *
>       hashmap: introduce hashmap_free_entries
>       OFFSETOF_VAR macro to simplify hashmap iterators
>       hashmap: remove type arg from hashmap_{get,put,remove}_entry
>       hashmap_entry: remove first member requirement from docs
>
>  attr.c                              |  24 ++---
>  blame.c                             |  25 ++---
>  builtin/describe.c                  |  21 +++--
>  builtin/difftool.c                  |  56 +++++++-----
>  builtin/fast-export.c               |  15 ++-
>  builtin/fetch.c                     |  32 ++++---
>  config.c                            |  24 ++---
>  contrib/coccinelle/hashmap.cocci    |  16 ++++
>  diff.c                              |  31 ++++---
>  diffcore-rename.c                   |  15 ++-
>  git-compat-util.h                   |  38 ++++++++
>  hashmap.c                           |  58 +++++++-----
>  hashmap.h                           | 176 +++++++++++++++++++++++++++++-------
>  merge-recursive.c                   |  87 ++++++++++--------
>  merge-recursive.h                   |   4 +-
>  name-hash.c                         |  57 ++++++------
>  oidmap.c                            |  20 ++--
>  oidmap.h                            |   6 +-
>  packfile.c                          |  22 +++--
>  patch-ids.c                         |  18 ++--
>  range-diff.c                        |  10 +-
>  ref-filter.c                        |  33 ++++---
>  refs.c                              |  25 +++--
>  remote.c                            |  21 +++--
>  remote.h                            |   2 +-
>  revision.c                          |  28 +++---
>  sequencer.c                         |  44 ++++++---
>  sub-process.c                       |  20 ++--
>  sub-process.h                       |   6 +-
>  submodule-config.c                  |  52 ++++++-----
>  t/helper/test-hashmap.c             |  50 +++++-----
>  t/helper/test-lazy-init-name-hash.c |  12 +--
>  32 files changed, 667 insertions(+), 381 deletions(-)
>  create mode 100644 contrib/coccinelle/hashmap.cocci
>
> Range-diff against v2:
>  1:  51ba91d2f9 !  1:  0f530552de diff: use hashmap_entry_init on moved_entry.ent
>     @@ -10,6 +10,7 @@
>          hashmap_add callers to take "struct hashmap_entry *".
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/diff.c b/diff.c
>       --- a/diff.c
>  2:  be4071d33d !  2:  d12ddb4327 coccicheck: detect hashmap_entry.hash assignment
>     @@ -8,6 +8,7 @@
>          hashmap_entry_init, instead.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/contrib/coccinelle/hashmap.cocci b/contrib/coccinelle/hashmap.cocci
>       new file mode 100644
>  3:  ff40a39bad !  3:  624b89fbb4 packfile: use hashmap_entry in delta_base_cache_entry
>     @@ -15,6 +15,7 @@
>          systems.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/packfile.c b/packfile.c
>       --- a/packfile.c
>  4:  d1db0f6472 !  4:  7512f2f2f7 hashmap_entry_init takes "struct hashmap_entry *"
>     @@ -8,6 +8,7 @@
>          safety and readability.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>     @@ -212,8 +213,8 @@
>        * and if it is on stack, you can just let it go out of scope).
>        */
>      -static inline void hashmap_entry_init(void *entry, unsigned int hash)
>     -+static inline void
>     -+hashmap_entry_init(struct hashmap_entry *e, unsigned int hash)
>     ++static inline void hashmap_entry_init(struct hashmap_entry *e,
>     ++					unsigned int hash)
>       {
>      -	struct hashmap_entry *e = entry;
>       	e->hash = hash;
>  5:  a293445e97 !  5:  dd167a1113 hashmap_get_next takes "const struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          now detects invalid types being passed.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/diff.c b/diff.c
>       --- a/diff.c
>  6:  beabdab6fe !  6:  53f429ef6f hashmap_add takes "struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          detects invalid types being passed.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>  7:  99970934c7 !  7:  87739268dc hashmap_get takes "const struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          now detects invalid types being passed.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>  8:  8148ed70eb !  8:  22226b3bb4 hashmap_remove takes "const struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          now detects invalid types being passed.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/blame.c b/blame.c
>       --- a/blame.c
>  9:  3756dcc34e !  9:  0b64282a1f hashmap_put takes "struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          detects invalid types being passed.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/builtin/fast-export.c b/builtin/fast-export.c
>       --- a/builtin/fast-export.c
> 10:  ff586aa43c ! 10:  c2e9201838 introduce container_of macro
>     @@ -7,15 +7,16 @@
>          and chained hash tables while allowing the compiler to do
>          type checking.
>
>     -    I intend to use this to remove the limitation of "hashmap_entry"
>     -    being location-dependent and to allow more compile-time type
>     -    checking.
>     +    Later patches will use container_of() to remove the limitation
>     +    of "hashmap_entry" being location-dependent. This will complete
>     +    the transition to compile-time type checking for the hashmap API.
>
>          This macro already exists in our source as "list_entry" in
>          list.h and making "list_entry" an alias to "container_of"
>          as the Linux kernel has done is a possibility.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/git-compat-util.h b/git-compat-util.h
>       --- a/git-compat-util.h
> 11:  931356f061 ! 11:  c709e607b1 hashmap_get_next returns "struct hashmap_entry *"
>     @@ -6,6 +6,7 @@
>          hashmap_entry being the first field of a struct.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/diff.c b/diff.c
>       --- a/diff.c
>     @@ -14,10 +15,10 @@
>       {
>       	int i;
>       	char *got_match = xcalloc(1, pmb_nr);
>     -+	struct hashmap_entry *ent = &match->ent;
>     ++	struct hashmap_entry *ent;
>
>      -	for (; match; match = hashmap_get_next(hm, &match->ent)) {
>     -+	for (; ent; ent = hashmap_get_next(hm, ent)) {
>     ++	for (ent = &match->ent; ent; ent = hashmap_get_next(hm, ent)) {
>      +		match = container_of(ent, struct moved_entry, ent);
>       		for (i = 0; i < pmb_nr; i++) {
>       			struct moved_entry *prev = pmb[i].match;
> 12:  a748b9b0c4 ! 12:  27ba68a7b8 hashmap: use *_entry APIs to wrap container_of
>     @@ -11,6 +11,7 @@
>          extra parameter to specify the type.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/diff.c b/diff.c
>       --- a/diff.c
>     @@ -19,9 +20,9 @@
>       {
>       	int i;
>       	char *got_match = xcalloc(1, pmb_nr);
>     --	struct hashmap_entry *ent = &match->ent;
>     +-	struct hashmap_entry *ent;
>
>     --	for (; ent; ent = hashmap_get_next(hm, ent)) {
>     +-	for (ent = &match->ent; ent; ent = hashmap_get_next(hm, ent)) {
>      -		match = container_of(ent, struct moved_entry, ent);
>      +	hashmap_for_each_entry_from(hm, match, struct moved_entry, ent) {
>       		for (i = 0; i < pmb_nr; i++) {
>     @@ -125,7 +126,6 @@
>       #define container_of(ptr, type, member) \
>       	((type *) ((char *)(ptr) - offsetof(type, member)))
>
>     -+
>      +/*
>      + * helper function for `container_of_or_null' to avoid multiple
>      + * evaluation of @ptr
> 13:  e8faa5e12e ! 13:  222b1f07f3 hashmap_get{,_from_hash} return "struct hashmap_entry *"
>     @@ -9,6 +9,7 @@
>          hashmap_entry being the first field in a struct.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>     @@ -152,11 +153,13 @@
>       }
>
>      -void *hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
>     -+struct hashmap_entry *
>     -+hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
>     - 		const void *keydata)
>     +-		const void *keydata)
>     ++struct hashmap_entry *hashmap_get(const struct hashmap *map,
>     ++				const struct hashmap_entry *key,
>     ++				const void *keydata)
>       {
>       	return *find_entry_ptr(map, key, keydata);
>     + }
>      @@
>       	/* lookup interned string in pool */
>       	hashmap_entry_init(&key.ent, memhash(data, len));
>     @@ -175,21 +178,27 @@
>        * to `hashmap_cmp_fn` to decide whether the entry matches the key.
>        */
>      -void *hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
>     -+struct hashmap_entry *
>     -+hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
>     - 			 const void *keydata);
>     +-			 const void *keydata);
>     ++struct hashmap_entry *hashmap_get(const struct hashmap *map,
>     ++				const struct hashmap_entry *key,
>     ++				const void *keydata);
>
>       /*
>     +  * Returns the hashmap entry for the specified hash code and key data,
>      @@
>        * `entry_or_key` parameter of `hashmap_cmp_fn` points to a hashmap_entry
>        * structure that should not be used in the comparison.
>        */
>      -static inline void *hashmap_get_from_hash(const struct hashmap *map,
>     -+static inline struct hashmap_entry *
>     -+hashmap_get_from_hash(const struct hashmap *map,
>     - 					  unsigned int hash,
>     - 					  const void *keydata)
>     +-					  unsigned int hash,
>     +-					  const void *keydata)
>     ++static inline struct hashmap_entry *hashmap_get_from_hash(
>     ++					const struct hashmap *map,
>     ++					unsigned int hash,
>     ++					const void *keydata)
>       {
>     + 	struct hashmap_entry key;
>     + 	hashmap_entry_init(&key, hash);
>
>       diff --git a/merge-recursive.c b/merge-recursive.c
>       --- a/merge-recursive.c
> 14:  f84bd96b8e ! 14:  c789f98c81 hashmap_cmp_fn takes hashmap_entry params
>     @@ -6,6 +6,7 @@
>          being the first member of a struct.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
> 15:  23fbd888d9 ! 15:  57ae5b5142 hashmap: use *_entry APIs for iteration
>     @@ -7,6 +7,7 @@
>          by compilers lacking __typeof__ support.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
> 16:  6908364381 ! 16:  f1e35ba094 hashmap: hashmap_{put,remove} return hashmap_entry *
>     @@ -6,6 +6,7 @@
>          to simplify most callers.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/hashmap.c b/hashmap.c
>       --- a/hashmap.c
>     @@ -15,18 +16,20 @@
>       }
>
>      -void *hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
>     -+struct hashmap_entry *
>     -+hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
>     - 		const void *keydata)
>     +-		const void *keydata)
>     ++struct hashmap_entry *hashmap_remove(struct hashmap *map,
>     ++					const struct hashmap_entry *key,
>     ++					const void *keydata)
>       {
>       	struct hashmap_entry *old;
>     + 	struct hashmap_entry **e = find_entry_ptr(map, key, keydata);
>      @@
>       	return old;
>       }
>
>      -void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry)
>     -+struct hashmap_entry *
>     -+hashmap_put(struct hashmap *map, struct hashmap_entry *entry)
>     ++struct hashmap_entry *hashmap_put(struct hashmap *map,
>     ++				struct hashmap_entry *entry)
>       {
>       	struct hashmap_entry *old = hashmap_remove(map, entry, NULL);
>       	hashmap_add(map, entry);
>     @@ -39,8 +42,8 @@
>        * Returns the replaced entry, or NULL if not found (i.e. the entry was added).
>        */
>      -void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
>     -+struct hashmap_entry *
>     -+hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
>     ++struct hashmap_entry *hashmap_put(struct hashmap *map,
>     ++				struct hashmap_entry *entry);
>      +
>      +#define hashmap_put_entry(map, keyvar, type, member) \
>      +	container_of_or_null(hashmap_put(map, &(keyvar)->member), type, member)
>     @@ -52,17 +55,17 @@
>        * Argument explanation is the same as in `hashmap_get`.
>        */
>      -void *hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
>     -+struct hashmap_entry *
>     -+hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
>     - 		const void *keydata);
>     -
>     +-		const void *keydata);
>     ++struct hashmap_entry *hashmap_remove(struct hashmap *map,
>     ++					const struct hashmap_entry *key,
>     ++					const void *keydata);
>     ++
>      +#define hashmap_remove_entry(map, keyvar, keydata, type, member) \
>      +	container_of_or_null(hashmap_remove(map, &(keyvar)->member, keydata), \
>      +				type, member)
>     -+
>     +
>       /*
>        * Returns the `bucket` an entry is stored in.
>     -  * Useful for multithreaded read access.
>
>       diff --git a/range-diff.c b/range-diff.c
>       --- a/range-diff.c
> 17:  150944128b ! 17:  adc7cb5516 hashmap: introduce hashmap_free_entries
>     @@ -12,6 +12,7 @@
>          the hashmap itself.
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/blame.c b/blame.c
>       --- a/blame.c
> 18:  de212aa6d6 ! 18:  1a68e1645d OFFSETOF_VAR macro to simplify hashmap iterators
>     @@ -5,7 +5,7 @@
>          While we cannot rely on a `__typeof__' operator being portable
>          to use with `offsetof'; we can calculate the pointer offset
>          using an existing pointer and the address of a member using
>     -    pointer arithmetic.
>     +    pointer arithmetic for compilers without `__typeof__'.
>
>          This allows us to simplify usage of hashmap iterator macros
>          by not having to specify a type when a pointer of that type
>     @@ -16,7 +16,10 @@
>          trouble of using container_of/list_entry macros and without
>          relying on non-portable `__typeof__'.
>
>     +    v3: use `__typeof__' to avoid clang warnings
>     +
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>     @@ -141,11 +144,17 @@
>       	(type *)container_of_or_null_offset(ptr, offsetof(type, member))
>
>      +/*
>     -+ * like offsetof(), but takes a pointer to type instead of the type
>     -+ * @ptr is subject to multiple evaluation since we can't rely on TYPEOF()
>     ++ * like offsetof(), but takes a pointer to a a variable of type which
>     ++ * contains @member, instead of a specified type.
>     ++ * @ptr is subject to multiple evaluation since we can't rely on __typeof__
>     ++ * everywhere.
>      + */
>     ++#if defined(__GNUC__) /* clang sets this, too */
>     ++#define OFFSETOF_VAR(ptr, member) offsetof(__typeof__(*ptr), member)
>     ++#else /* !__GNUC__ */
>      +#define OFFSETOF_VAR(ptr, member) \
>      +	((uintptr_t)&(ptr)->member - (uintptr_t)(ptr))
>     ++#endif /* !__GNUC__ */
>      +
>       #endif
>
> 19:  212a596edd ! 19:  fe02b9f839 hashmap: remove type arg from hashmap_{get,put,remove}_entry
>     @@ -10,6 +10,7 @@
>          sequential as they are used as: `keyvar->member'
>
>          Signed-off-by: Eric Wong <e@80x24.org>
>     +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
>
>       diff --git a/attr.c b/attr.c
>       --- a/attr.c
>     @@ -147,8 +148,8 @@
>        *                 printf("first: %ld %s\n", e->key, e->value);
>        *                 while ((e = hashmap_get_next_entry(&map, e,
>      @@
>     - struct hashmap_entry *
>     - hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
>     + struct hashmap_entry *hashmap_put(struct hashmap *map,
>     + 				struct hashmap_entry *entry);
>
>      -#define hashmap_put_entry(map, keyvar, type, member) \
>      -	container_of_or_null(hashmap_put(map, &(keyvar)->member), type, member)
>     @@ -167,8 +168,8 @@
>       /*
>        * Removes a hashmap entry matching the specified key. If the hashmap contains
>      @@
>     - hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
>     - 		const void *keydata);
>     + 					const struct hashmap_entry *key,
>     + 					const void *keydata);
>
>      -#define hashmap_remove_entry(map, keyvar, keydata, type, member) \
>      -	container_of_or_null(hashmap_remove(map, &(keyvar)->member, keydata), \
>  -:  ---------- > 20:  4ec5200646 hashmap_entry: remove first member requirement from docs
>
>

^ permalink raw reply	[relevance 0%]

* [PATCH v3 00/20] hashmap bug/safety/ease-of-use fixes
@ 2019-10-06 23:30  2% Eric Wong
  2019-10-08  8:58  0% ` Johannes Schindelin
  0 siblings, 1 reply; 42+ results
From: Eric Wong @ 2019-10-06 23:30 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Derrick Stolee, Johannes Schindelin, Phillip Wood

v3 changes:
- use __typeof__ to avoid invalid clang warning on uninitialized var
- formatting fixes recommended by Stolee
- add Reviewed-by for Stolee
- add patch 20 to update docs to drop first member requirement

v2 here:
  https://public-inbox.org/git/20190924010324.22619-1-e@80x24.org/

The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:

  First batch after Git 2.23 (2019-08-22 12:41:04 -0700)

are available in the Git repository at:

  https://80x24.org/git-svn.git hashmap-wip-v3

for you to fetch changes up to 4ec5200646d6b9363e64e2002eb374aa888a6c88:

  hashmap_entry: remove first member requirement from docs (2019-10-06 23:05:22 +0000)

----------------------------------------------------------------
Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

 attr.c                              |  24 ++---
 blame.c                             |  25 ++---
 builtin/describe.c                  |  21 +++--
 builtin/difftool.c                  |  56 +++++++-----
 builtin/fast-export.c               |  15 ++-
 builtin/fetch.c                     |  32 ++++---
 config.c                            |  24 ++---
 contrib/coccinelle/hashmap.cocci    |  16 ++++
 diff.c                              |  31 ++++---
 diffcore-rename.c                   |  15 ++-
 git-compat-util.h                   |  38 ++++++++
 hashmap.c                           |  58 +++++++-----
 hashmap.h                           | 176 +++++++++++++++++++++++++++++-------
 merge-recursive.c                   |  87 ++++++++++--------
 merge-recursive.h                   |   4 +-
 name-hash.c                         |  57 ++++++------
 oidmap.c                            |  20 ++--
 oidmap.h                            |   6 +-
 packfile.c                          |  22 +++--
 patch-ids.c                         |  18 ++--
 range-diff.c                        |  10 +-
 ref-filter.c                        |  33 ++++---
 refs.c                              |  25 +++--
 remote.c                            |  21 +++--
 remote.h                            |   2 +-
 revision.c                          |  28 +++---
 sequencer.c                         |  44 ++++++---
 sub-process.c                       |  20 ++--
 sub-process.h                       |   6 +-
 submodule-config.c                  |  52 ++++++-----
 t/helper/test-hashmap.c             |  50 +++++-----
 t/helper/test-lazy-init-name-hash.c |  12 +--
 32 files changed, 667 insertions(+), 381 deletions(-)
 create mode 100644 contrib/coccinelle/hashmap.cocci

Range-diff against v2:
 1:  51ba91d2f9 !  1:  0f530552de diff: use hashmap_entry_init on moved_entry.ent
    @@ -10,6 +10,7 @@
         hashmap_add callers to take "struct hashmap_entry *".
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/diff.c b/diff.c
      --- a/diff.c
 2:  be4071d33d !  2:  d12ddb4327 coccicheck: detect hashmap_entry.hash assignment
    @@ -8,6 +8,7 @@
         hashmap_entry_init, instead.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/contrib/coccinelle/hashmap.cocci b/contrib/coccinelle/hashmap.cocci
      new file mode 100644
 3:  ff40a39bad !  3:  624b89fbb4 packfile: use hashmap_entry in delta_base_cache_entry
    @@ -15,6 +15,7 @@
         systems.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/packfile.c b/packfile.c
      --- a/packfile.c
 4:  d1db0f6472 !  4:  7512f2f2f7 hashmap_entry_init takes "struct hashmap_entry *"
    @@ -8,6 +8,7 @@
         safety and readability.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
    @@ -212,8 +213,8 @@
       * and if it is on stack, you can just let it go out of scope).
       */
     -static inline void hashmap_entry_init(void *entry, unsigned int hash)
    -+static inline void
    -+hashmap_entry_init(struct hashmap_entry *e, unsigned int hash)
    ++static inline void hashmap_entry_init(struct hashmap_entry *e,
    ++					unsigned int hash)
      {
     -	struct hashmap_entry *e = entry;
      	e->hash = hash;
 5:  a293445e97 !  5:  dd167a1113 hashmap_get_next takes "const struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         now detects invalid types being passed.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/diff.c b/diff.c
      --- a/diff.c
 6:  beabdab6fe !  6:  53f429ef6f hashmap_add takes "struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         detects invalid types being passed.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
 7:  99970934c7 !  7:  87739268dc hashmap_get takes "const struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         now detects invalid types being passed.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
 8:  8148ed70eb !  8:  22226b3bb4 hashmap_remove takes "const struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         now detects invalid types being passed.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/blame.c b/blame.c
      --- a/blame.c
 9:  3756dcc34e !  9:  0b64282a1f hashmap_put takes "struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         detects invalid types being passed.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/builtin/fast-export.c b/builtin/fast-export.c
      --- a/builtin/fast-export.c
10:  ff586aa43c ! 10:  c2e9201838 introduce container_of macro
    @@ -7,15 +7,16 @@
         and chained hash tables while allowing the compiler to do
         type checking.
     
    -    I intend to use this to remove the limitation of "hashmap_entry"
    -    being location-dependent and to allow more compile-time type
    -    checking.
    +    Later patches will use container_of() to remove the limitation
    +    of "hashmap_entry" being location-dependent. This will complete
    +    the transition to compile-time type checking for the hashmap API.
     
         This macro already exists in our source as "list_entry" in
         list.h and making "list_entry" an alias to "container_of"
         as the Linux kernel has done is a possibility.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/git-compat-util.h b/git-compat-util.h
      --- a/git-compat-util.h
11:  931356f061 ! 11:  c709e607b1 hashmap_get_next returns "struct hashmap_entry *"
    @@ -6,6 +6,7 @@
         hashmap_entry being the first field of a struct.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/diff.c b/diff.c
      --- a/diff.c
    @@ -14,10 +15,10 @@
      {
      	int i;
      	char *got_match = xcalloc(1, pmb_nr);
    -+	struct hashmap_entry *ent = &match->ent;
    ++	struct hashmap_entry *ent;
      
     -	for (; match; match = hashmap_get_next(hm, &match->ent)) {
    -+	for (; ent; ent = hashmap_get_next(hm, ent)) {
    ++	for (ent = &match->ent; ent; ent = hashmap_get_next(hm, ent)) {
     +		match = container_of(ent, struct moved_entry, ent);
      		for (i = 0; i < pmb_nr; i++) {
      			struct moved_entry *prev = pmb[i].match;
12:  a748b9b0c4 ! 12:  27ba68a7b8 hashmap: use *_entry APIs to wrap container_of
    @@ -11,6 +11,7 @@
         extra parameter to specify the type.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/diff.c b/diff.c
      --- a/diff.c
    @@ -19,9 +20,9 @@
      {
      	int i;
      	char *got_match = xcalloc(1, pmb_nr);
    --	struct hashmap_entry *ent = &match->ent;
    +-	struct hashmap_entry *ent;
      
    --	for (; ent; ent = hashmap_get_next(hm, ent)) {
    +-	for (ent = &match->ent; ent; ent = hashmap_get_next(hm, ent)) {
     -		match = container_of(ent, struct moved_entry, ent);
     +	hashmap_for_each_entry_from(hm, match, struct moved_entry, ent) {
      		for (i = 0; i < pmb_nr; i++) {
    @@ -125,7 +126,6 @@
      #define container_of(ptr, type, member) \
      	((type *) ((char *)(ptr) - offsetof(type, member)))
      
    -+
     +/*
     + * helper function for `container_of_or_null' to avoid multiple
     + * evaluation of @ptr
13:  e8faa5e12e ! 13:  222b1f07f3 hashmap_get{,_from_hash} return "struct hashmap_entry *"
    @@ -9,6 +9,7 @@
         hashmap_entry being the first field in a struct.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
    @@ -152,11 +153,13 @@
      }
      
     -void *hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
    -+struct hashmap_entry *
    -+hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
    - 		const void *keydata)
    +-		const void *keydata)
    ++struct hashmap_entry *hashmap_get(const struct hashmap *map,
    ++				const struct hashmap_entry *key,
    ++				const void *keydata)
      {
      	return *find_entry_ptr(map, key, keydata);
    + }
     @@
      	/* lookup interned string in pool */
      	hashmap_entry_init(&key.ent, memhash(data, len));
    @@ -175,21 +178,27 @@
       * to `hashmap_cmp_fn` to decide whether the entry matches the key.
       */
     -void *hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
    -+struct hashmap_entry *
    -+hashmap_get(const struct hashmap *map, const struct hashmap_entry *key,
    - 			 const void *keydata);
    +-			 const void *keydata);
    ++struct hashmap_entry *hashmap_get(const struct hashmap *map,
    ++				const struct hashmap_entry *key,
    ++				const void *keydata);
      
      /*
    +  * Returns the hashmap entry for the specified hash code and key data,
     @@
       * `entry_or_key` parameter of `hashmap_cmp_fn` points to a hashmap_entry
       * structure that should not be used in the comparison.
       */
     -static inline void *hashmap_get_from_hash(const struct hashmap *map,
    -+static inline struct hashmap_entry *
    -+hashmap_get_from_hash(const struct hashmap *map,
    - 					  unsigned int hash,
    - 					  const void *keydata)
    +-					  unsigned int hash,
    +-					  const void *keydata)
    ++static inline struct hashmap_entry *hashmap_get_from_hash(
    ++					const struct hashmap *map,
    ++					unsigned int hash,
    ++					const void *keydata)
      {
    + 	struct hashmap_entry key;
    + 	hashmap_entry_init(&key, hash);
     
      diff --git a/merge-recursive.c b/merge-recursive.c
      --- a/merge-recursive.c
14:  f84bd96b8e ! 14:  c789f98c81 hashmap_cmp_fn takes hashmap_entry params
    @@ -6,6 +6,7 @@
         being the first member of a struct.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
15:  23fbd888d9 ! 15:  57ae5b5142 hashmap: use *_entry APIs for iteration
    @@ -7,6 +7,7 @@
         by compilers lacking __typeof__ support.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
16:  6908364381 ! 16:  f1e35ba094 hashmap: hashmap_{put,remove} return hashmap_entry *
    @@ -6,6 +6,7 @@
         to simplify most callers.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/hashmap.c b/hashmap.c
      --- a/hashmap.c
    @@ -15,18 +16,20 @@
      }
      
     -void *hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
    -+struct hashmap_entry *
    -+hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
    - 		const void *keydata)
    +-		const void *keydata)
    ++struct hashmap_entry *hashmap_remove(struct hashmap *map,
    ++					const struct hashmap_entry *key,
    ++					const void *keydata)
      {
      	struct hashmap_entry *old;
    + 	struct hashmap_entry **e = find_entry_ptr(map, key, keydata);
     @@
      	return old;
      }
      
     -void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry)
    -+struct hashmap_entry *
    -+hashmap_put(struct hashmap *map, struct hashmap_entry *entry)
    ++struct hashmap_entry *hashmap_put(struct hashmap *map,
    ++				struct hashmap_entry *entry)
      {
      	struct hashmap_entry *old = hashmap_remove(map, entry, NULL);
      	hashmap_add(map, entry);
    @@ -39,8 +42,8 @@
       * Returns the replaced entry, or NULL if not found (i.e. the entry was added).
       */
     -void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
    -+struct hashmap_entry *
    -+hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
    ++struct hashmap_entry *hashmap_put(struct hashmap *map,
    ++				struct hashmap_entry *entry);
     +
     +#define hashmap_put_entry(map, keyvar, type, member) \
     +	container_of_or_null(hashmap_put(map, &(keyvar)->member), type, member)
    @@ -52,17 +55,17 @@
       * Argument explanation is the same as in `hashmap_get`.
       */
     -void *hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
    -+struct hashmap_entry *
    -+hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
    - 		const void *keydata);
    - 
    +-		const void *keydata);
    ++struct hashmap_entry *hashmap_remove(struct hashmap *map,
    ++					const struct hashmap_entry *key,
    ++					const void *keydata);
    ++
     +#define hashmap_remove_entry(map, keyvar, keydata, type, member) \
     +	container_of_or_null(hashmap_remove(map, &(keyvar)->member, keydata), \
     +				type, member)
    -+
    + 
      /*
       * Returns the `bucket` an entry is stored in.
    -  * Useful for multithreaded read access.
     
      diff --git a/range-diff.c b/range-diff.c
      --- a/range-diff.c
17:  150944128b ! 17:  adc7cb5516 hashmap: introduce hashmap_free_entries
    @@ -12,6 +12,7 @@
         the hashmap itself.
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/blame.c b/blame.c
      --- a/blame.c
18:  de212aa6d6 ! 18:  1a68e1645d OFFSETOF_VAR macro to simplify hashmap iterators
    @@ -5,7 +5,7 @@
         While we cannot rely on a `__typeof__' operator being portable
         to use with `offsetof'; we can calculate the pointer offset
         using an existing pointer and the address of a member using
    -    pointer arithmetic.
    +    pointer arithmetic for compilers without `__typeof__'.
     
         This allows us to simplify usage of hashmap iterator macros
         by not having to specify a type when a pointer of that type
    @@ -16,7 +16,10 @@
         trouble of using container_of/list_entry macros and without
         relying on non-portable `__typeof__'.
     
    +    v3: use `__typeof__' to avoid clang warnings
    +
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
    @@ -141,11 +144,17 @@
      	(type *)container_of_or_null_offset(ptr, offsetof(type, member))
      
     +/*
    -+ * like offsetof(), but takes a pointer to type instead of the type
    -+ * @ptr is subject to multiple evaluation since we can't rely on TYPEOF()
    ++ * like offsetof(), but takes a pointer to a a variable of type which
    ++ * contains @member, instead of a specified type.
    ++ * @ptr is subject to multiple evaluation since we can't rely on __typeof__
    ++ * everywhere.
     + */
    ++#if defined(__GNUC__) /* clang sets this, too */
    ++#define OFFSETOF_VAR(ptr, member) offsetof(__typeof__(*ptr), member)
    ++#else /* !__GNUC__ */
     +#define OFFSETOF_VAR(ptr, member) \
     +	((uintptr_t)&(ptr)->member - (uintptr_t)(ptr))
    ++#endif /* !__GNUC__ */
     +
      #endif
     
19:  212a596edd ! 19:  fe02b9f839 hashmap: remove type arg from hashmap_{get,put,remove}_entry
    @@ -10,6 +10,7 @@
         sequential as they are used as: `keyvar->member'
     
         Signed-off-by: Eric Wong <e@80x24.org>
    +    Reviewed-by: Derrick Stolee <stolee@gmail.com>
     
      diff --git a/attr.c b/attr.c
      --- a/attr.c
    @@ -147,8 +148,8 @@
       *                 printf("first: %ld %s\n", e->key, e->value);
       *                 while ((e = hashmap_get_next_entry(&map, e,
     @@
    - struct hashmap_entry *
    - hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
    + struct hashmap_entry *hashmap_put(struct hashmap *map,
    + 				struct hashmap_entry *entry);
      
     -#define hashmap_put_entry(map, keyvar, type, member) \
     -	container_of_or_null(hashmap_put(map, &(keyvar)->member), type, member)
    @@ -167,8 +168,8 @@
      /*
       * Removes a hashmap entry matching the specified key. If the hashmap contains
     @@
    - hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
    - 		const void *keydata);
    + 					const struct hashmap_entry *key,
    + 					const void *keydata);
      
     -#define hashmap_remove_entry(map, keyvar, keydata, type, member) \
     -	container_of_or_null(hashmap_remove(map, &(keyvar)->member, keydata), \
 -:  ---------- > 20:  4ec5200646 hashmap_entry: remove first member requirement from docs

^ permalink raw reply	[relevance 2%]

* Re: [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes
  2019-09-24  1:03  5% ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Eric Wong
  2019-09-26  8:39  0%   ` Johannes Schindelin
@ 2019-09-26 13:48  0%   ` Phillip Wood
  1 sibling, 0 replies; 42+ results
From: Phillip Wood @ 2019-09-26 13:48 UTC (permalink / raw)
  To: Eric Wong, Junio C Hamano
  Cc: Derrick Stolee, Johannes Schindelin, Phillip Wood, git

Hi Eric

On 24/09/2019 02:03, Eric Wong wrote:
> Patches 1-11 are largely unchanged from the original series with the
> exception of 2, which is new and posted at:
> 
> 	https://public-inbox.org/git/20190908074953.kux7zz4y7iolqko4@whir/
> 
> 12-17 take further steps to get us away from hashmap_entry being
> the first element, but they're also a bit ugly because __typeof__
> isn't portable
> 
> 18-19 finally brings me to the APIs I want to expose without
> relying on __typeof :)

Looking at the overall diff for this series looks a lot nicer with the 
extra patches that eliminate most of the explicit calls to 
container_of(). Thanks for the improved api and the cocci-check patch as 
well.

I've only had time for a quick look through but the patches seem well 
ordered and easy to follow. I think there are some line folding issues 
where you have wrapped a line when you added the type parameter and then 
removed it in a later path without re-flowing the line. Apart from that 
the only thing I noticed is that hashmap.h still starts with

   * struct long2string {
   *     struct hashmap_entry ent; // must be the first member!

Is that still the case now that hashmap_{get,put,remove}_entry() use 
container_of() and hashmap_init() takes a struct hashmap_entry? That 
comment is in a lot of our structure definitions as well.

Best Wishes

Phillip

> Apologies for the delays, been busy with other stuff...
> 
> Previous discussion starts at:
> 
> 	https://public-inbox.org/git/20190826024332.3403-1-e@80x24.org/
> 
> The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:
> 
>    First batch after Git 2.23 (2019-08-22 12:41:04 -0700)
> 
> are available in the Git repository at:
> 
>    https://80x24.org/git-svn.git hashmap-wip-v2
> 
> for you to fetch changes up to 212a596edd99169b284912b7b70b6280e2fb90e6:
> 
>    hashmap: remove type arg from hashmap_{get,put,remove}_entry (2019-09-24 00:42:22 +0000)
> 
> ----------------------------------------------------------------
> Eric Wong (19):
>        diff: use hashmap_entry_init on moved_entry.ent
>        coccicheck: detect hashmap_entry.hash assignment
>        packfile: use hashmap_entry in delta_base_cache_entry
>        hashmap_entry_init takes "struct hashmap_entry *"
>        hashmap_get_next takes "const struct hashmap_entry *"
>        hashmap_add takes "struct hashmap_entry *"
>        hashmap_get takes "const struct hashmap_entry *"
>        hashmap_remove takes "const struct hashmap_entry *"
>        hashmap_put takes "struct hashmap_entry *"
>        introduce container_of macro
>        hashmap_get_next returns "struct hashmap_entry *"
>        hashmap: use *_entry APIs to wrap container_of
>        hashmap_get{,_from_hash} return "struct hashmap_entry *"
>        hashmap_cmp_fn takes hashmap_entry params
>        hashmap: use *_entry APIs for iteration
>        hashmap: hashmap_{put,remove} return hashmap_entry *
>        hashmap: introduce hashmap_free_entries
>        OFFSETOF_VAR macro to simplify hashmap iterators
>        hashmap: remove type arg from hashmap_{get,put,remove}_entry
> 
>   attr.c                              |  22 ++---
>   blame.c                             |  25 +++---
>   builtin/describe.c                  |  21 +++--
>   builtin/difftool.c                  |  56 ++++++------
>   builtin/fast-export.c               |  15 ++--
>   builtin/fetch.c                     |  30 ++++---
>   config.c                            |  24 +++---
>   contrib/coccinelle/hashmap.cocci    |  16 ++++
>   diff.c                              |  31 ++++---
>   diffcore-rename.c                   |  15 ++--
>   git-compat-util.h                   |  33 ++++++++
>   hashmap.c                           |  58 ++++++++-----
>   hashmap.h                           | 164 +++++++++++++++++++++++++++++-------
>   merge-recursive.c                   |  87 ++++++++++---------
>   name-hash.c                         |  57 +++++++------
>   oidmap.c                            |  20 +++--
>   oidmap.h                            |   6 +-
>   packfile.c                          |  22 +++--
>   patch-ids.c                         |  18 ++--
>   range-diff.c                        |  10 +--
>   ref-filter.c                        |  31 ++++---
>   refs.c                              |  23 +++--
>   remote.c                            |  21 +++--
>   revision.c                          |  28 +++---
>   sequencer.c                         |  44 ++++++----
>   sub-process.c                       |  20 +++--
>   sub-process.h                       |   4 +-
>   submodule-config.c                  |  52 +++++++-----
>   t/helper/test-hashmap.c             |  49 ++++++-----
>   t/helper/test-lazy-init-name-hash.c |  12 +--
>   30 files changed, 647 insertions(+), 367 deletions(-)
>   create mode 100644 contrib/coccinelle/hashmap.cocci
> 
> Eric Wong (19):
>    diff: use hashmap_entry_init on moved_entry.ent
>    coccicheck: detect hashmap_entry.hash assignment
>    packfile: use hashmap_entry in delta_base_cache_entry
>    hashmap_entry_init takes "struct hashmap_entry *"
>    hashmap_get_next takes "const struct hashmap_entry *"
>    hashmap_add takes "struct hashmap_entry *"
>    hashmap_get takes "const struct hashmap_entry *"
>    hashmap_remove takes "const struct hashmap_entry *"
>    hashmap_put takes "struct hashmap_entry *"
>    introduce container_of macro
>    hashmap_get_next returns "struct hashmap_entry *"
>    hashmap: use *_entry APIs to wrap container_of
>    hashmap_get{,_from_hash} return "struct hashmap_entry *"
>    hashmap_cmp_fn takes hashmap_entry params
>    hashmap: use *_entry APIs for iteration
>    hashmap: hashmap_{put,remove} return hashmap_entry *
>    hashmap: introduce hashmap_free_entries
>    OFFSETOF_VAR macro to simplify hashmap iterators
>    hashmap: remove type arg from hashmap_{get,put,remove}_entry
> 
>   attr.c                              |  22 ++--
>   blame.c                             |  25 +++--
>   builtin/describe.c                  |  21 ++--
>   builtin/difftool.c                  |  56 ++++++----
>   builtin/fast-export.c               |  15 ++-
>   builtin/fetch.c                     |  30 ++---
>   config.c                            |  24 ++--
>   contrib/coccinelle/hashmap.cocci    |  16 +++
>   diff.c                              |  31 +++---
>   diffcore-rename.c                   |  15 ++-
>   git-compat-util.h                   |  33 ++++++
>   hashmap.c                           |  58 ++++++----
>   hashmap.h                           | 164 +++++++++++++++++++++++-----
>   merge-recursive.c                   |  87 ++++++++-------
>   name-hash.c                         |  57 +++++-----
>   oidmap.c                            |  20 ++--
>   oidmap.h                            |   6 +-
>   packfile.c                          |  22 ++--
>   patch-ids.c                         |  18 +--
>   range-diff.c                        |  10 +-
>   ref-filter.c                        |  31 ++++--
>   refs.c                              |  23 +++-
>   remote.c                            |  21 ++--
>   revision.c                          |  28 +++--
>   sequencer.c                         |  44 +++++---
>   sub-process.c                       |  20 ++--
>   sub-process.h                       |   4 +-
>   submodule-config.c                  |  52 +++++----
>   t/helper/test-hashmap.c             |  49 +++++----
>   t/helper/test-lazy-init-name-hash.c |  12 +-
>   30 files changed, 647 insertions(+), 367 deletions(-)
>   create mode 100644 contrib/coccinelle/hashmap.cocci
> 
> 
> base-commit: 745f6812895b31c02b29bdfe4ae8e5498f776c26
> 

^ permalink raw reply	[relevance 0%]

* Re: [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes
  2019-09-24  1:03  5% ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Eric Wong
@ 2019-09-26  8:39  0%   ` Johannes Schindelin
  2019-09-26 13:48  0%   ` Phillip Wood
  1 sibling, 0 replies; 42+ results
From: Johannes Schindelin @ 2019-09-26  8:39 UTC (permalink / raw)
  To: Eric Wong; +Cc: Junio C Hamano, Derrick Stolee, Phillip Wood, git

Hi Eric,

On Tue, 24 Sep 2019, Eric Wong wrote:

> Patches 1-11 are largely unchanged from the original series with the
> exception of 2, which is new and posted at:
>
> 	https://public-inbox.org/git/20190908074953.kux7zz4y7iolqko4@whir/
>
> 12-17 take further steps to get us away from hashmap_entry being
> the first element, but they're also a bit ugly because __typeof__
> isn't portable
>
> 18-19 finally brings me to the APIs I want to expose without
> relying on __typeof :)

I won't have time to review this patch series, but I wanted to throw out
the idea of storing the offset in `struct hashmap`, i.e. the offset of
the `struct hashmap_entry` in the actual entry struct?

Example:

	struct erics_entry {
		const char *i_want_this_to_be_the_first_field;
		struct hashmap_entry e;
		[...]
	};

	[...]

	struct erics_entry *dummy = NULL;
	size_t offset = ((char *)dummy->e) - ((char *)dummy);
	[... store that offset in the hashmap and subtract it from the
	stored pointers before returning an entry...]

IOW rather than assuming that it is the first field, we could allow an
offset other than 0. I'm just not sure how to implement this elegantly,
but it should be much easier to do this portably than the `typeof()`
approach.

Ciao,
Dscho

>
> Apologies for the delays, been busy with other stuff...
>
> Previous discussion starts at:
>
> 	https://public-inbox.org/git/20190826024332.3403-1-e@80x24.org/
>
> The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:
>
>   First batch after Git 2.23 (2019-08-22 12:41:04 -0700)
>
> are available in the Git repository at:
>
>   https://80x24.org/git-svn.git hashmap-wip-v2
>
> for you to fetch changes up to 212a596edd99169b284912b7b70b6280e2fb90e6:
>
>   hashmap: remove type arg from hashmap_{get,put,remove}_entry (2019-09-24 00:42:22 +0000)
>
> ----------------------------------------------------------------
> Eric Wong (19):
>       diff: use hashmap_entry_init on moved_entry.ent
>       coccicheck: detect hashmap_entry.hash assignment
>       packfile: use hashmap_entry in delta_base_cache_entry
>       hashmap_entry_init takes "struct hashmap_entry *"
>       hashmap_get_next takes "const struct hashmap_entry *"
>       hashmap_add takes "struct hashmap_entry *"
>       hashmap_get takes "const struct hashmap_entry *"
>       hashmap_remove takes "const struct hashmap_entry *"
>       hashmap_put takes "struct hashmap_entry *"
>       introduce container_of macro
>       hashmap_get_next returns "struct hashmap_entry *"
>       hashmap: use *_entry APIs to wrap container_of
>       hashmap_get{,_from_hash} return "struct hashmap_entry *"
>       hashmap_cmp_fn takes hashmap_entry params
>       hashmap: use *_entry APIs for iteration
>       hashmap: hashmap_{put,remove} return hashmap_entry *
>       hashmap: introduce hashmap_free_entries
>       OFFSETOF_VAR macro to simplify hashmap iterators
>       hashmap: remove type arg from hashmap_{get,put,remove}_entry
>
>  attr.c                              |  22 ++---
>  blame.c                             |  25 +++---
>  builtin/describe.c                  |  21 +++--
>  builtin/difftool.c                  |  56 ++++++------
>  builtin/fast-export.c               |  15 ++--
>  builtin/fetch.c                     |  30 ++++---
>  config.c                            |  24 +++---
>  contrib/coccinelle/hashmap.cocci    |  16 ++++
>  diff.c                              |  31 ++++---
>  diffcore-rename.c                   |  15 ++--
>  git-compat-util.h                   |  33 ++++++++
>  hashmap.c                           |  58 ++++++++-----
>  hashmap.h                           | 164 +++++++++++++++++++++++++++++-------
>  merge-recursive.c                   |  87 ++++++++++---------
>  name-hash.c                         |  57 +++++++------
>  oidmap.c                            |  20 +++--
>  oidmap.h                            |   6 +-
>  packfile.c                          |  22 +++--
>  patch-ids.c                         |  18 ++--
>  range-diff.c                        |  10 +--
>  ref-filter.c                        |  31 ++++---
>  refs.c                              |  23 +++--
>  remote.c                            |  21 +++--
>  revision.c                          |  28 +++---
>  sequencer.c                         |  44 ++++++----
>  sub-process.c                       |  20 +++--
>  sub-process.h                       |   4 +-
>  submodule-config.c                  |  52 +++++++-----
>  t/helper/test-hashmap.c             |  49 ++++++-----
>  t/helper/test-lazy-init-name-hash.c |  12 +--
>  30 files changed, 647 insertions(+), 367 deletions(-)
>  create mode 100644 contrib/coccinelle/hashmap.cocci
>
> Eric Wong (19):
>   diff: use hashmap_entry_init on moved_entry.ent
>   coccicheck: detect hashmap_entry.hash assignment
>   packfile: use hashmap_entry in delta_base_cache_entry
>   hashmap_entry_init takes "struct hashmap_entry *"
>   hashmap_get_next takes "const struct hashmap_entry *"
>   hashmap_add takes "struct hashmap_entry *"
>   hashmap_get takes "const struct hashmap_entry *"
>   hashmap_remove takes "const struct hashmap_entry *"
>   hashmap_put takes "struct hashmap_entry *"
>   introduce container_of macro
>   hashmap_get_next returns "struct hashmap_entry *"
>   hashmap: use *_entry APIs to wrap container_of
>   hashmap_get{,_from_hash} return "struct hashmap_entry *"
>   hashmap_cmp_fn takes hashmap_entry params
>   hashmap: use *_entry APIs for iteration
>   hashmap: hashmap_{put,remove} return hashmap_entry *
>   hashmap: introduce hashmap_free_entries
>   OFFSETOF_VAR macro to simplify hashmap iterators
>   hashmap: remove type arg from hashmap_{get,put,remove}_entry
>
>  attr.c                              |  22 ++--
>  blame.c                             |  25 +++--
>  builtin/describe.c                  |  21 ++--
>  builtin/difftool.c                  |  56 ++++++----
>  builtin/fast-export.c               |  15 ++-
>  builtin/fetch.c                     |  30 ++---
>  config.c                            |  24 ++--
>  contrib/coccinelle/hashmap.cocci    |  16 +++
>  diff.c                              |  31 +++---
>  diffcore-rename.c                   |  15 ++-
>  git-compat-util.h                   |  33 ++++++
>  hashmap.c                           |  58 ++++++----
>  hashmap.h                           | 164 +++++++++++++++++++++++-----
>  merge-recursive.c                   |  87 ++++++++-------
>  name-hash.c                         |  57 +++++-----
>  oidmap.c                            |  20 ++--
>  oidmap.h                            |   6 +-
>  packfile.c                          |  22 ++--
>  patch-ids.c                         |  18 +--
>  range-diff.c                        |  10 +-
>  ref-filter.c                        |  31 ++++--
>  refs.c                              |  23 +++-
>  remote.c                            |  21 ++--
>  revision.c                          |  28 +++--
>  sequencer.c                         |  44 +++++---
>  sub-process.c                       |  20 ++--
>  sub-process.h                       |   4 +-
>  submodule-config.c                  |  52 +++++----
>  t/helper/test-hashmap.c             |  49 +++++----
>  t/helper/test-lazy-init-name-hash.c |  12 +-
>  30 files changed, 647 insertions(+), 367 deletions(-)
>  create mode 100644 contrib/coccinelle/hashmap.cocci
>
>
> base-commit: 745f6812895b31c02b29bdfe4ae8e5498f776c26
>

^ permalink raw reply	[relevance 0%]

* [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes
  2019-08-26  2:43  6% [PATCH 00/11] hashmap: bugfixes, safety fixes, and WIP improvements Eric Wong
@ 2019-09-24  1:03  5% ` Eric Wong
  2019-09-26  8:39  0%   ` Johannes Schindelin
  2019-09-26 13:48  0%   ` Phillip Wood
  0 siblings, 2 replies; 42+ results
From: Eric Wong @ 2019-09-24  1:03 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Derrick Stolee, Johannes Schindelin, Phillip Wood, git

Patches 1-11 are largely unchanged from the original series with the
exception of 2, which is new and posted at:

	https://public-inbox.org/git/20190908074953.kux7zz4y7iolqko4@whir/

12-17 take further steps to get us away from hashmap_entry being
the first element, but they're also a bit ugly because __typeof__
isn't portable

18-19 finally brings me to the APIs I want to expose without
relying on __typeof :)

Apologies for the delays, been busy with other stuff...

Previous discussion starts at:

	https://public-inbox.org/git/20190826024332.3403-1-e@80x24.org/

The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:

  First batch after Git 2.23 (2019-08-22 12:41:04 -0700)

are available in the Git repository at:

  https://80x24.org/git-svn.git hashmap-wip-v2

for you to fetch changes up to 212a596edd99169b284912b7b70b6280e2fb90e6:

  hashmap: remove type arg from hashmap_{get,put,remove}_entry (2019-09-24 00:42:22 +0000)

----------------------------------------------------------------
Eric Wong (19):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry

 attr.c                              |  22 ++---
 blame.c                             |  25 +++---
 builtin/describe.c                  |  21 +++--
 builtin/difftool.c                  |  56 ++++++------
 builtin/fast-export.c               |  15 ++--
 builtin/fetch.c                     |  30 ++++---
 config.c                            |  24 +++---
 contrib/coccinelle/hashmap.cocci    |  16 ++++
 diff.c                              |  31 ++++---
 diffcore-rename.c                   |  15 ++--
 git-compat-util.h                   |  33 ++++++++
 hashmap.c                           |  58 ++++++++-----
 hashmap.h                           | 164 +++++++++++++++++++++++++++++-------
 merge-recursive.c                   |  87 ++++++++++---------
 name-hash.c                         |  57 +++++++------
 oidmap.c                            |  20 +++--
 oidmap.h                            |   6 +-
 packfile.c                          |  22 +++--
 patch-ids.c                         |  18 ++--
 range-diff.c                        |  10 +--
 ref-filter.c                        |  31 ++++---
 refs.c                              |  23 +++--
 remote.c                            |  21 +++--
 revision.c                          |  28 +++---
 sequencer.c                         |  44 ++++++----
 sub-process.c                       |  20 +++--
 sub-process.h                       |   4 +-
 submodule-config.c                  |  52 +++++++-----
 t/helper/test-hashmap.c             |  49 ++++++-----
 t/helper/test-lazy-init-name-hash.c |  12 +--
 30 files changed, 647 insertions(+), 367 deletions(-)
 create mode 100644 contrib/coccinelle/hashmap.cocci

Eric Wong (19):
  diff: use hashmap_entry_init on moved_entry.ent
  coccicheck: detect hashmap_entry.hash assignment
  packfile: use hashmap_entry in delta_base_cache_entry
  hashmap_entry_init takes "struct hashmap_entry *"
  hashmap_get_next takes "const struct hashmap_entry *"
  hashmap_add takes "struct hashmap_entry *"
  hashmap_get takes "const struct hashmap_entry *"
  hashmap_remove takes "const struct hashmap_entry *"
  hashmap_put takes "struct hashmap_entry *"
  introduce container_of macro
  hashmap_get_next returns "struct hashmap_entry *"
  hashmap: use *_entry APIs to wrap container_of
  hashmap_get{,_from_hash} return "struct hashmap_entry *"
  hashmap_cmp_fn takes hashmap_entry params
  hashmap: use *_entry APIs for iteration
  hashmap: hashmap_{put,remove} return hashmap_entry *
  hashmap: introduce hashmap_free_entries
  OFFSETOF_VAR macro to simplify hashmap iterators
  hashmap: remove type arg from hashmap_{get,put,remove}_entry

 attr.c                              |  22 ++--
 blame.c                             |  25 +++--
 builtin/describe.c                  |  21 ++--
 builtin/difftool.c                  |  56 ++++++----
 builtin/fast-export.c               |  15 ++-
 builtin/fetch.c                     |  30 ++---
 config.c                            |  24 ++--
 contrib/coccinelle/hashmap.cocci    |  16 +++
 diff.c                              |  31 +++---
 diffcore-rename.c                   |  15 ++-
 git-compat-util.h                   |  33 ++++++
 hashmap.c                           |  58 ++++++----
 hashmap.h                           | 164 +++++++++++++++++++++++-----
 merge-recursive.c                   |  87 ++++++++-------
 name-hash.c                         |  57 +++++-----
 oidmap.c                            |  20 ++--
 oidmap.h                            |   6 +-
 packfile.c                          |  22 ++--
 patch-ids.c                         |  18 +--
 range-diff.c                        |  10 +-
 ref-filter.c                        |  31 ++++--
 refs.c                              |  23 +++-
 remote.c                            |  21 ++--
 revision.c                          |  28 +++--
 sequencer.c                         |  44 +++++---
 sub-process.c                       |  20 ++--
 sub-process.h                       |   4 +-
 submodule-config.c                  |  52 +++++----
 t/helper/test-hashmap.c             |  49 +++++----
 t/helper/test-lazy-init-name-hash.c |  12 +-
 30 files changed, 647 insertions(+), 367 deletions(-)
 create mode 100644 contrib/coccinelle/hashmap.cocci


base-commit: 745f6812895b31c02b29bdfe4ae8e5498f776c26

^ permalink raw reply	[relevance 5%]

* Re: error: cannot cherry-pick during a revert
  2019-08-28 23:25  7% error: cannot cherry-pick during a revert Mike Hommey
@ 2019-08-29 15:27  0% ` Phillip Wood
  0 siblings, 0 replies; 42+ results
From: Phillip Wood @ 2019-08-29 15:27 UTC (permalink / raw)
  To: Mike Hommey, git

Hi Mike

On 29/08/2019 00:25, Mike Hommey wrote:
> Hi,
> 
> This just happened to me while cherry-pick'ing:
> 
> $ git cherry-pick HEAD@{1}
> error: could not apply 614fe5e629b84... try
> hint: after resolving the conflicts, mark the corrected paths
> hint: with 'git add <paths>' or 'git rm <paths>'
> hint: and commit the result with 'git commit'
> Recorded preimage for 'taskcluster/ci/build/linux.yml'
> 
> (... this is where I fix my conflict ...)
> 
> $ git add -u
> $ git cherry-pick --continue
> error: cannot cherry-pick during a revert.
> fatal: cherry-pick failed

Oh dear that's not good

> So apparently, cherry-pick thinks it was doing a revert when it hit a
> conflict?
> 
> (This is with git 2.23)

I wondered if this was due to some of the recent changes adding --skip 
to cherry-pick and revert but I can't see anything obvious at the 
moment. To get that error the sequencer has loaded a todo file (in 
read_populate_todo()) which starts with a revert command. Is it possible 
you were reverting a sequence of commits before you ran the cherry-pick? 
(a single pick or revert does not create a todo list). It could be that 
there was an old todo list left over from a while ago - historically the 
sequencer hasn't been all that good at cleaning up after itself if the 
user committed the final pick or revert with 'git commit' and forgot to 
run 'cherry-pick/revert --continue' afterwards.

Best Wishes

Phillip

> Mike
> 

^ permalink raw reply	[relevance 0%]

* error: cannot cherry-pick during a revert
@ 2019-08-28 23:25  7% Mike Hommey
  2019-08-29 15:27  0% ` Phillip Wood
  0 siblings, 1 reply; 42+ results
From: Mike Hommey @ 2019-08-28 23:25 UTC (permalink / raw)
  To: git

Hi,

This just happened to me while cherry-pick'ing:

$ git cherry-pick HEAD@{1}
error: could not apply 614fe5e629b84... try
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Recorded preimage for 'taskcluster/ci/build/linux.yml'

(... this is where I fix my conflict ...)

$ git add -u
$ git cherry-pick --continue 
error: cannot cherry-pick during a revert.
fatal: cherry-pick failed

So apparently, cherry-pick thinks it was doing a revert when it hit a
conflict?

(This is with git 2.23)

Mike

^ permalink raw reply	[relevance 7%]

* Re: Missing file in 2.23 (p5302-pack-index.subtests)?
  2019-08-26 20:50  0% ` Jeff King
  2019-08-26 20:51  0%   ` Jeff King
@ 2019-08-27  1:29  5%   ` Theodore Y. Ts'o
  1 sibling, 0 replies; 42+ results
From: Theodore Y. Ts'o @ 2019-08-27  1:29 UTC (permalink / raw)
  To: Jeff King; +Cc: git

On Mon, Aug 26, 2019 at 04:50:13PM -0400, Jeff King wrote:
> On Sun, Aug 18, 2019 at 12:03:17PM -0400, Theodore Y. Ts'o wrote:
> 
> > I was trying to run "make profile" on the master branch (commit
> > 5fa0f5238b: "Git 2.23") and it died in the
> > 
> > 	$(MAKE) PROFILE=GEN perf
> > 
> > dies with:
> > 
> > 	cannot open test-results/p5302-pack-index.subtests: No such file or directory at ./aggregate.perl line 153.
> > 
> > I presume that's becuase the file t/perf/test-results/p5302-pack-index.subtests is missing?
> 
> That file should be created by running p5302. If you do:
> 
>   cd t/perf
>   rm -rf test-results
>   ./run p5302-pack-index.sh
> 
> is it generated?

No, it wasn't.  See below....

					- Ted

<tytso@lambda> {/usr/projects/git/git-core/t/perf}   (master)
1140% git show
commit 5fa0f5238b0cd46cfe7f6fa76c3f526ea98148d9 (HEAD -> master, tag: v2.23.0, origin/master, origin/HEAD)
Author: Junio C Hamano <gitster@pobox.com>
Date:   Fri Aug 16 10:28:23 2019 -0700

    Git 2.23
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 551e607e73..a1539a7ce6 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.23.0-rc2
+DEF_VER=v2.23.0
 
 LF='
 '
<tytso@lambda> {/usr/projects/git/git-core/t/perf}   (master)
1141% rm -rf test-results ; ./run p5302-pack-index.sh
=== Running 1 tests in this tree ===
warning: $GIT_PERF_LARGE_REPO is $GIT_BUILD_DIR.
warning: This will work, but may not be a sufficiently large repo
warning: for representative measurements.
not ok 1 - repack
#	
#		git repack -ad &&
#		PACK=$(ls .git/objects/pack/*.pack | head -n1) &&
#		test -f "$PACK" &&
#		export PACK
#	
cannot open test-results/p5302-pack-index.subtests: No such file or directory at ./aggregate.perl line 153.
<tytso@lambda> {/usr/projects/git/git-core/t/perf}   (master)
1142% git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	../../MAKELOG
	../../MAKELOG.1
	../../common-cmds.h
	../../git-lost-found
	../../git-peek-remote
	../../git-rebase--am
	../../git-rebase--common
	../../git-rebase--helper
	../../git-rebase--interactive
	../../git-rebase--merge
	../../git-relink
	../../git-remote-testgit
	../../git-repo-config
	../../git-tar-tree
	../../git_remote_helpers/
	../../perl/MYMETA.json
	../../perl/MYMETA.yml
	../../perl/PM.stamp
	../../perl/blib/
	../../perl/perl.mak
	../../perl/pm_to_blib
	../../test-chmtime
	../../test-config
	../../test-credential
	../../test-ctype
	../../test-date
	../../test-delta
	../../test-dump-cache-tree
	../../test-dump-split-index
	../../test-dump-untracked-cache
	../../test-fake-ssh
	../../test-genrandom
	../../test-hashmap
	../../test-index-version
	../../test-line-buffer
	../../test-match-trees
	../../test-mergesort
	../../test-mktemp
	../../test-obj-pool
	../../test-parse-options
	../../test-path-utils
	../../test-prio-queue
	../../test-read-cache
	../../test-regex
	../../test-revision-walking
	../../test-run-command
	../../test-scrap-cache-tree
	../../test-sha1
	../../test-sha1-array
	../../test-sigchain
	../../test-string-list
	../../test-string-pool
	../../test-submodule-config
	../../test-subprocess
	../../test-svn-fe
	../../test-treap
	../../test-urlmatch-normalization
	../../test-wildmatch

nothing added to commit but untracked files present (use "git add" to track)

^ permalink raw reply related	[relevance 5%]

* Re: Missing file in 2.23 (p5302-pack-index.subtests)?
  2019-08-26 20:50  0% ` Jeff King
@ 2019-08-26 20:51  0%   ` Jeff King
  2019-08-27  1:29  5%   ` Theodore Y. Ts'o
  1 sibling, 0 replies; 42+ results
From: Jeff King @ 2019-08-26 20:51 UTC (permalink / raw)
  To: Theodore Y. Ts'o; +Cc: git

On Mon, Aug 26, 2019 at 04:50:13PM -0400, Jeff King wrote:

> On Sun, Aug 18, 2019 at 12:03:17PM -0400, Theodore Y. Ts'o wrote:
> 
> > I was trying to run "make profile" on the master branch (commit
> > 5fa0f5238b: "Git 2.23") and it died in the
> > 
> > 	$(MAKE) PROFILE=GEN perf
> > 
> > dies with:
> > 
> > 	cannot open test-results/p5302-pack-index.subtests: No such file or directory at ./aggregate.perl line 153.
> > 
> > I presume that's becuase the file t/perf/test-results/p5302-pack-index.subtests is missing?
> 
> That file should be created by running p5302. If you do:

By the way, I tried "make perf" as you specified above, and it worked
fine for me. And I don't think there are any changes in v2.23 that
should touch this area. But certainly it would be interesting to know if
it fails consistently for you, and if so, whether older versions work
(so we can bisect).

-Peff

^ permalink raw reply	[relevance 0%]

* Re: Missing file in 2.23 (p5302-pack-index.subtests)?
  2019-08-18 16:03  7% Missing file in 2.23 (p5302-pack-index.subtests)? Theodore Y. Ts'o
@ 2019-08-26 20:50  0% ` Jeff King
  2019-08-26 20:51  0%   ` Jeff King
  2019-08-27  1:29  5%   ` Theodore Y. Ts'o
  0 siblings, 2 replies; 42+ results
From: Jeff King @ 2019-08-26 20:50 UTC (permalink / raw)
  To: Theodore Y. Ts'o; +Cc: git

On Sun, Aug 18, 2019 at 12:03:17PM -0400, Theodore Y. Ts'o wrote:

> I was trying to run "make profile" on the master branch (commit
> 5fa0f5238b: "Git 2.23") and it died in the
> 
> 	$(MAKE) PROFILE=GEN perf
> 
> dies with:
> 
> 	cannot open test-results/p5302-pack-index.subtests: No such file or directory at ./aggregate.perl line 153.
> 
> I presume that's becuase the file t/perf/test-results/p5302-pack-index.subtests is missing?

That file should be created by running p5302. If you do:

  cd t/perf
  rm -rf test-results
  ./run p5302-pack-index.sh

is it generated?

If so, then perhaps something removed it while the perf tests were
running. Did you run perhaps run "make clean" simultaneously?

-Peff

^ permalink raw reply	[relevance 0%]

* [PATCH 00/11] hashmap: bugfixes, safety fixes, and WIP improvements
@ 2019-08-26  2:43  6% Eric Wong
  2019-09-24  1:03  5% ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Eric Wong
  0 siblings, 1 reply; 42+ results
From: Eric Wong @ 2019-08-26  2:43 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

This started out as yak-shaving exercise to introduce the
"container_of" macro to make hashmap more flexible and
less error-prone.

So far I've ended up finding and fixing two real bugs in
patches 1/11 and 2/11 which should be fast-tracked.

Patches 3-9 are straightforward safety fixes to prevent future
bugs of the same type.

10-11 are work-in-progress changes to remove the limitation
of hashmap_entry being the first member of a struct.  It's
also part of my ongoing agenda to spread Linux kernel idioms
into userspace and maybe get git.git hackers more comfortable
with kernel hacking (and vice-versa :>)

I'll try to continue the rest within the next few days.


The following changes since commit 745f6812895b31c02b29bdfe4ae8e5498f776c26:

  First batch after Git 2.23 (2019-08-22 12:41:04 -0700)

are available in the Git repository at:

  https://80x24.org/git-svn.git hashmap-wip-v1

for you to fetch changes up to 4d9857917670218cba447caddec15a2734c86e2c:

  hashmap_get_next returns "struct hashmap_entry *" (2019-08-26 02:25:35 +0000)

----------------------------------------------------------------
Eric Wong (11):
      diff: use hashmap_entry_init on moved_entry.ent
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_entry: detect improper initialization
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"

 attr.c                              |  8 +++----
 blame.c                             | 12 +++++-----
 builtin/describe.c                  |  4 ++--
 builtin/difftool.c                  | 17 +++++++-------
 builtin/fast-export.c               |  9 ++++----
 builtin/fetch.c                     |  4 ++--
 config.c                            |  8 +++----
 diff.c                              | 23 ++++++++++++-------
 diffcore-rename.c                   | 15 ++++++++-----
 git-compat-util.h                   | 10 +++++++++
 hashmap.c                           | 30 ++++++++++++++-----------
 hashmap.h                           | 45 +++++++++++++++++++++----------------
 merge-recursive.c                   | 27 +++++++++++-----------
 name-hash.c                         | 41 +++++++++++++++++----------------
 oidmap.c                            |  2 +-
 packfile.c                          |  8 +++----
 patch-ids.c                         |  6 ++---
 range-diff.c                        |  8 +++----
 ref-filter.c                        |  5 +++--
 refs.c                              |  7 ++++--
 remote.c                            |  8 ++++---
 revision.c                          |  9 ++++----
 sequencer.c                         |  9 ++++----
 sub-process.c                       | 10 ++++-----
 submodule-config.c                  | 20 ++++++++---------
 t/helper/test-hashmap.c             | 24 +++++++++++---------
 t/helper/test-lazy-init-name-hash.c |  4 ++--
 27 files changed, 210 insertions(+), 163 deletions(-)

^ permalink raw reply	[relevance 6%]

* Re: git log --graph with a sort of local revision number
  2019-08-18 19:00  6% ` Rafael Ascensão
@ 2019-08-18 20:46  5%   ` Uwe Brauer
  0 siblings, 0 replies; 42+ results
From: Uwe Brauer @ 2019-08-18 20:46 UTC (permalink / raw)
  To: Rafael Ascensão; +Cc: Uwe Brauer, git, Alban Gruin

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

>>> "RA" == Rafael Ascensão <rafa.almas@gmail.com> writes:

   > You can achieve something close (on small repos, more on that later) with:
   > $ git log --graph --color \
   >   --format='%C(auto)changeset: %h:%H%nuser:      %an%ndate:      %ad%nsummary:   %s%n' \
   >   | git name-rev --refs=$(git rev-parse --abbrev-ref HEAD) --name-only --stdin

Ok I see this is bash syntaxes.

In that case it works, but I see

* changeset: f40c01e:f40c01e41afbb87c7321147242354d46ddaee231
| user:      Uwe Brauer
| date:      Thu Aug 15 15:13:00 2019 +0200
| summary:   This is a test.
|
* changeset: 4dcf721:4dcf721042cd8f73d78876caf8f4796153c07023
| user:      Uwe Brauer
| date:      Wed Aug 14 14:33:29 2019 +0200
| summary:   Third
|
* changeset: 93083c8:93083c8b65141047c8346765fb663d5962076246
| user:      Uwe Brauer
| date:      Wed Aug 14 14:33:29 2019 +0200
| summary:   Second
|
* changeset: f59470f:f59470feb19d325accaad634025c229d6977df65
  user:      Uwe Brauer
  date:      Wed Aug 14 14:33:29 2019 +0200
  summary:   First commit

But on the GNU emacs repository which is reasonable old (has about 130
000 commits) and is around 700 MB, your command gives:


* changeset: ee1c638:master
| user:      Lars Ingebrigtsen
| date:      Sat Aug 17 17:30:42 2019 -0700
| summary:   Make `browse-url-of-buffer' work from zip files
|
* changeset: 3d1c9a7:master~1
| user:      Paul Eggert
| date:      Sat Aug 17 17:19:13 2019 -0700
| summary:   Fix org-timer-show-remaining-time > 1 hour
|
* changeset: f38a16e:master~2
| user:      Lars Ingebrigtsen
| date:      Sat Aug 17 16:56:13 2019 -0700
| summary:   Make `describe-function' say that disabled functions are disabled
|
* changeset: 3efe59a:master~3
| user:      Lars Ingebrigtsen
| date:      Sat Aug 17 16:47:16 2019 -0700
| summary:   Make newline-and-indent take a numeric prefix

Which is precisely what you said.


What did I do wrong in my test repo?

Which I generated via the following script


git init
echo "First" > test.org
git add test.org
git add create.sh
git commit -a -m "First commit"
echo "Second" >> test.org
git commit -a -m "Second"
echo "Third" >> test.org
git commit -a -m "Third"
echo "Forth" >> test.org
git commit  -a -m "Fourth"
echo "Fifth" >> test.org
git commit  -a -m "Fifth"
echo "Six" >> test.org
git commit  -a -m "Six"


   >     * changeset: 5fa0f52:master
   >     | user:      Junio C Hamano
   >     | date:      Fri Aug 16 10:28:23 2019 -0700
   >     | summary:   Git 2.23
   >     |
   >     *   changeset: 8e0fa0e:master~1
   >     |\  user:      Junio C Hamano
   >     | | date:      Fri Aug 16 10:22:51 2019 -0700
   >     | | summary:   Merge tag 'l10n-2.23.0-rnd2' of git://github.com/git-l10n/git-po
   >     | | 
   >     | * changeset: a6cd2cc:master~1^2
   >     | | user:      Jiang Xin
   >     | | date:      Tue Jul 30 10:02:22 2019 +0800
   >     | | summary:   l10n: zh_CN: for git v2.23.0 l10n round 1~2

   > And in this case, since we are using HEAD to describe the commits by
   > using --refs=$(git rev-parse --abbrev-ref HEAD), you can refer to
   > a6cd2cc either as master~1^2 or HEAD~1^2.

   > Now, git-name-rev has some memory/performance problems in repos with a
   > high number of references. Alban Gruin was working on this issue[1], but
   > I don't know what's the status of it.

   > [1]:https://github.com/agrn/git/tree/ag/fix-name-rev-leak

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5025 bytes --]

^ permalink raw reply	[relevance 5%]

* Re: git log --graph with a sort of local revision number
  @ 2019-08-18 19:00  6% ` Rafael Ascensão
  2019-08-18 20:46  5%   ` Uwe Brauer
  0 siblings, 1 reply; 42+ results
From: Rafael Ascensão @ 2019-08-18 19:00 UTC (permalink / raw)
  To: Uwe Brauer; +Cc: git, Alban Gruin

You can achieve something close (on small repos, more on that later) with:

$ git log --graph --color \
  --format='%C(auto)changeset: %h:%H%nuser:      %an%ndate:      %ad%nsummary:   %s%n' \
  | git name-rev --refs=$(git rev-parse --abbrev-ref HEAD) --name-only --stdin


    * changeset: 5fa0f52:master
    | user:      Junio C Hamano
    | date:      Fri Aug 16 10:28:23 2019 -0700
    | summary:   Git 2.23
    |
    *   changeset: 8e0fa0e:master~1
    |\  user:      Junio C Hamano
    | | date:      Fri Aug 16 10:22:51 2019 -0700
    | | summary:   Merge tag 'l10n-2.23.0-rnd2' of git://github.com/git-l10n/git-po
    | | 
    | * changeset: a6cd2cc:master~1^2
    | | user:      Jiang Xin
    | | date:      Tue Jul 30 10:02:22 2019 +0800
    | | summary:   l10n: zh_CN: for git v2.23.0 l10n round 1~2

And in this case, since we are using HEAD to describe the commits by
using --refs=$(git rev-parse --abbrev-ref HEAD), you can refer to
a6cd2cc either as master~1^2 or HEAD~1^2.

Now, git-name-rev has some memory/performance problems in repos with a
high number of references. Alban Gruin was working on this issue[1], but
I don't know what's the status of it.

[1]:https://github.com/agrn/git/tree/ag/fix-name-rev-leak

^ permalink raw reply	[relevance 6%]

* Missing file in 2.23 (p5302-pack-index.subtests)?
@ 2019-08-18 16:03  7% Theodore Y. Ts'o
  2019-08-26 20:50  0% ` Jeff King
  0 siblings, 1 reply; 42+ results
From: Theodore Y. Ts'o @ 2019-08-18 16:03 UTC (permalink / raw)
  To: git

I was trying to run "make profile" on the master branch (commit
5fa0f5238b: "Git 2.23") and it died in the

	$(MAKE) PROFILE=GEN perf

dies with:

	cannot open test-results/p5302-pack-index.subtests: No such file or directory at ./aggregate.perl line 153.

I presume that's becuase the file t/perf/test-results/p5302-pack-index.subtests is missing?

						- Ted

^ permalink raw reply	[relevance 7%]

* Re: [ANNOUNCE] Git v2.23.0
  2019-08-16 21:00  4% [ANNOUNCE] Git v2.23.0 Junio C Hamano
@ 2019-08-16 21:30  0% ` Bhaskar Chowdhury
  0 siblings, 0 replies; 42+ results
From: Bhaskar Chowdhury @ 2019-08-16 21:30 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Linux Kernel, git-packagers

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


Thanks, a bunch Junio! :)

On 14:00 Fri 16 Aug 2019, Junio C Hamano wrote:
>The latest feature release Git v2.23.0 is now available at the
>usual places.  It is comprised of 505 non-merge commits since
>v2.22.0, contributed by 77 people, 26 of which are new faces.
>
>The tarballs are found at:
>
>    https://www.kernel.org/pub/software/scm/git/
>
>The following public repositories all have a copy of the 'v2.23.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.22.0 are as follows.
>Welcome to the Git development community!
>
>  Ariadne Conill, Barret Rhoden, Ben Avison, Carmine Zaccagnino,
>  Daniel Ferreira, Doug Ilijev, Dr. Adam Nielsen, Jakub Wilk,
>  John Lin, Mark Rushakoff, Matheus Tavares, Mazo, Andrey,
>  Michael Osipov, Michael Platings, Miguel Ojeda, Mike Mueller,
>  Morian Sonnet, Philipp Weißmann, Quentin Nerden, Robert Morgan,
>  Simon Williams, Steven Roberts, Tigran Mkrtchyan, Varun Naik,
>  Vishal Verma, and Xin Li.
>
>Returning contributors who helped this release are as follows.
>Thanks for your continued support.
>
>  Ævar Arnfjörð Bjarmason, Alessandro Menti, Alexander
>  Shopov, Beat Bolli, Boxuan Li, brian m. carlson, Carlo Marcelo
>  Arenas Belón, Cesar Eduardo Barros, Chris Mayo, Christian
>  Couder, Christopher Díaz Riveros, Denton Liu, Derrick Stolee,
>  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
>  Emily Shaffer, Eric Wong, Felipe Contreras, Jean-Noël Avila,
>  Jeff Hostetler, Jeff King, Jiang Xin, Johannes Schindelin,
>  Johannes Sixt, Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh
>  Steadmon, Junio C Hamano, Karsten Blees, Marc-André Lureau,
>  Martin Ågren, Matthew DeVore, Matthias Rüster, Mike Hommey,
>  Nguyễn Thái Ngọc Duy, Nickolai Belakovski, Paolo Bonzini,
>  Peter Krefting, Philip Oakley, Phillip Wood, Ramsay Jones, René
>  Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor, Taylor Blau,
>  Thomas Gummerer, Trần Ngọc Quân, and William Chargin.
>
>----------------------------------------------------------------
>
>Git 2.23 Release Notes
>======================
>
>Updates since v2.22
>-------------------
>
>Backward compatibility note
>
> * 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".
>
> * The "git log" command by default behaves as if the --mailmap option
>   was given.
>
>
>UI, Workflows & Features
>
> * The "git fast-export/import" pair has been taught to handle commits
>   with log messages in encoding other than UTF-8 better.
>
> * 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.
>
> * "git merge" learned "--quit" option that cleans up the in-progress
>   merge while leaving the working tree and the index still in a mess.
>
> * "git format-patch" learns a configuration to set the default for
>   its --notes=<ref> option.
>
> * The code to show args with potential typo that cannot be
>   interpreted as a commit-ish has been improved.
>
> * "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.
>
> * 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.
>
> * "git help git" was hard to discover (well, at least for some
>   people).
>
> * The pattern "git diff/grep" use to extract funcname and words
>   boundary for Rust has been added.
>
> * "git status" can be told a non-standard default value for the
>   "--[no-]ahead-behind" option with a new configuration variable
>   status.aheadBehind.
>
> * "git fetch" and "git pull" reports when a fetch results in
>   non-fast-forward updates to let the user notice unusual situation.
>   The commands learned "--no-show-forced-updates" option to disable
>   this safety feature.
>
> * 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.
>
> * "git branch --list" learned to always output the detached HEAD as
>   the first item (when the HEAD is detached, of course), regardless
>   of the locale.
>
> * The conditional inclusion mechanism learned to base the choice on
>   the branch the HEAD currently is on.
>
> * "git rev-list --objects" learned the "--no-object-names" option to
>   squelch the path to the object that is used as a grouping hint for
>   pack-objects.
>
> * A new tag.gpgSign configuration variable turns "git tag -a" into
>   "git tag -s".
>
> * "git multi-pack-index" learned expire and repack subcommands.
>
> * "git blame" learned to "ignore" commits in the history, whose
>   effects (as well as their presence) get ignored.
>
> * "git cherry-pick/revert" learned a new "--skip" action.
>
> * The tips of refs from the alternate object store can be used as
>   starting point for reachability computation now.
>
> * Extra blank lines in "git status" output have been reduced.
>
> * The commits in a repository can be described by multiple
>   commit-graph files now, which allows the commit-graph files to be
>   updated incrementally.
>
> * "git range-diff" output has been tweaked for easier identification
>   of which part of what file the patch shown is about.
>
>
>Performance, Internal Implementation, Development Support etc.
>
> * Update supporting parts of "git rebase" to remove code that should
>   no longer be used.
>
> * Developer support to emulate unsatisfied prerequisites in tests to
>   ensure that the remainder of the tests still succeeds when tests
>   with prerequisites are skipped.
>
> * "git update-server-info" learned not to rewrite the file with the
>   same contents.
>
> * 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"
>
> * Prepare use of reachability index in topological walker that works
>   on a range (A..B).
>
> * A new tutorial targeting specifically aspiring git-core
>   developers has been added.
>
> * Auto-detect how to tell HP-UX aCC where to use dynamically linked
>   libraries from at runtime.
>
> * "git mergetool" and its tests now spawn fewer subprocesses.
>
> * Dev support update to help tracing out tests.
>
> * Support to build with MSVC has been updated.
>
> * "git fetch" that grabs from a group of remotes learned to run the
>   auto-gc only once at the very end.
>
> * A handful of Windows build patches have been upstreamed.
>
> * The code to read state files used by the sequencer machinery for
>   "git status" has been made more robust against a corrupt or stale
>   state files.
>
> * "git for-each-ref" with multiple patterns have been optimized.
>
> * The tree-walk API learned to pass an in-core repository
>   instance throughout more codepaths.
>
> * When one step in multi step cherry-pick or revert is reset or
>   committed, the command line prompt script failed to notice the
>   current status, which has been improved.
>
> * Many GIT_TEST_* environment variables control various aspects of
>   how our tests are run, but a few followed "non-empty is true, empty
>   or unset is false" while others followed the usual "there are a few
>   ways to spell true, like yes, on, etc., and also ways to spell
>   false, like no, off, etc." convention.
>
> * Adjust the dir-iterator API and apply it to the local clone
>   optimization codepath.
>
> * We have been trying out a few language features outside c89; the
>   coding guidelines document did not talk about them and instead had
>   a blanket ban against them.
>
> * A test helper has been introduced to optimize preparation of test
>   repositories with many simple commits, and a handful of test
>   scripts have been updated to use it.
>
>
>Fixes since v2.22
>-----------------
>
> * 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.
>
> * "git worktree add" used to fail when another worktree connected to
>   the same repository was corrupt, which has been corrected.
>
> * The ownership rule for the file descriptor to fast-import remote
>   backend was mixed up, leading to an unrelated file descriptor getting
>   closed, which has been fixed.
>
> * 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.
>
> * Code cleanup and futureproof.
>
> * More parameter validation.
>
> * "git update-server-info" used to leave stale packfiles in its
>   output, which has been corrected.
>
> * 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.
>
> * "git am -i --resolved" segfaulted after trying to see a commit as
>   if it were a tree, which has been corrected.
>
> * "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.
>
> * "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.
>
> * The data collected by fsmonitor was not properly written back to
>   the on-disk index file, breaking t7519 tests occasionally, which
>   has been corrected.
>
> * Update to Unicode 12.1 width table.
>
> * 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.
>
> * "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.
>
> * 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.
>
> * "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.
>
> * 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.
>
> * The description about slashes in gitignore patterns (used to
>   indicate things like "anchored to this level only" and "only
>   matches directories") has been revamped.
>
> * The URL decoding code has been updated to avoid going past the end
>   of the string while parsing %-<hex>-<hex> sequence.
>
> * The list of for-each like macros used by clang-format has been
>   updated.
>
> * "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.
>   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).
>
> * Code restructuring during 2.20 period broke fetching tags via
>   "import" based transports.
>
> * 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.
>
> * "git checkout -p" needs to selectively apply a patch in reverse,
>   which did not work well.
>
> * Code clean-up to avoid signed integer wraparounds during binary search.
>
> * "git interpret-trailers" always treated '#' as the comment
>   character, regardless of core.commentChar setting, which has been
>   corrected.
>
> * "git stash show 23" used to work, but no more after getting
>   rewritten in C; this regression has been corrected.
>
> * "git rebase --abort" used to leave refs/rewritten/ when concluding
>   "git rebase -r", which has been corrected.
>
> * 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.
>
> * The code to parse scaled numbers out of configuration files has
>   been made more robust and also easier to follow.
>
> * The codepath to compute delta islands used to spew progress output
>   without giving the callers any way to squelch it, which has been
>   fixed.
>
> * Protocol capabilities that go over wire should never be translated,
>   but it was incorrectly marked for translation, which has been
>   corrected.  The output of protocol capabilities for debugging has
>   been tweaked a bit.
>
> * Use "Erase in Line" CSI sequence that is already used in the editor
>   support to clear cruft in the progress output.
>
> * "git submodule foreach" did not protect command line options passed
>   to the command to be run in each submodule correctly, when the
>   "--recursive" option was in use.
>
> * The configuration variable rebase.rescheduleFailedExec should be
>   effective only while running an interactive rebase and should not
>   affect anything when running a non-interactive one, which was not
>   the case.  This has been corrected.
>
> * The "git clone" documentation refers to command line options in its
>   description in the short form; they have been replaced with long
>   forms to make them more recognisable.
>
> * Generation of pack bitmaps are now disabled when .keep files exist,
>   as these are mutually exclusive features.
>   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).
>
> * "git rm" to resolve a conflicted path leaked an internal message
>   "needs merge" before actually removing the path, which was
>   confusing.  This has been corrected.
>
> * "git stash --keep-index" did not work correctly on paths that have
>   been removed, which has been fixed.
>   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).
>
> * Window 7 update ;-)
>
> * A codepath that reads from GPG for signed object verification read
>   past the end of allocated buffer, which has been fixed.
>
> * "git clean" silently skipped a path when it cannot lstat() it; now
>   it gives a warning.
>
> * "git push --atomic" that goes over the transport-helper (namely,
>   the smart http transport) failed to prevent refs to be pushed when
>   it can locally tell that one of the ref update will fail without
>   having to consult the other end, which has been corrected.
>
> * The internal diff machinery can be made to read out of bounds while
>   looking for --function-context line in a corner case, which has been
>   corrected.
>   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).
>
> * Other code cleanup, docfix, build fix, etc.
>   (merge fbec05c210 cc/test-oidmap later to maint).
>   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
>   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
>   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).
>
>----------------------------------------------------------------
>
>Changes since v2.22.0 are as follows:
>
>Alessandro Menti (3):
>      l10n: it.po: update the Italian translation
>      l10n: it.po: update the Italian translation for v2.23.0
>      l10n: it.po: update the Italian localization for v2.23.0 round 2
>
>Alexander Shopov (1):
>      l10n: bg.po: Updated Bulgarian translation (4674t)
>
>Ariadne Conill (3):
>      log: add warning for unspecified log.mailmap setting
>      documentation: mention --no-use-mailmap and log.mailmap false setting
>      tests: defang pager tests by explicitly disabling the log.mailmap warning
>
>Barret Rhoden (8):
>      fsck: rename and touch up init_skiplist()
>      Move oidset_parse_file() to oidset.c
>      blame: use a helper function in blame_chunk()
>      blame: add the ability to ignore commits and their changes
>      blame: add config options for the output of ignored or unblamable lines
>      blame: optionally track line fingerprints during fill_blame_origin()
>      blame: use the fingerprint heuristic to match ignored lines
>      blame: add a test to cover blame_coalesce()
>
>Beat Bolli (2):
>      unicode: update the width tables to Unicode 12.1
>      grep: print the pcre2_jit_on value
>
>Ben Avison (1):
>      clone: add `--remote-submodules` flag
>
>Boxuan Li (2):
>      userdiff: add Octave
>      userdiff: fix grammar and style issues
>
>Carlo Marcelo Arenas Belón (6):
>      fsmonitor: avoid signed integer overflow / infinite loop
>      wrapper: avoid undefined behaviour in macOS
>      trace2: correct typo in technical documentation
>      xdiff: drop system includes in xutils.c
>      xdiff: remove duplicate headers from xhistogram.c
>      xdiff: remove duplicate headers from xpatience.c
>
>Carmine Zaccagnino (1):
>      l10n: it.po: remove an extra space
>
>Cesar Eduardo Barros (1):
>      mingw: embed a manifest to trick UAC into Doing The Right Thing
>
>Chris Mayo (1):
>      send-email: update documentation of required Perl modules
>
>Christian Couder (7):
>      t/helper: add test-oidmap.c
>      t: add t0016-oidmap.sh
>      oidmap: use sha1hash() instead of static hash() function
>      test-hashmap: remove 'hash' command
>      doc: improve usage string in MyFirstContribution
>      test-oidmap: remove 'add' subcommand
>      t0016: add 'remove' subcommand test
>
>Christopher Díaz Riveros (1):
>      l10n: es: 2.23.0 round 2
>
>Daniel Ferreira (1):
>      dir-iterator: add tests for dir-iterator API
>
>Denton Liu (5):
>      git-format-patch.txt: document --no-notes option
>      format-patch: teach format.notes config option
>      config: learn the "onbranch:" includeIf condition
>      config/alias.txt: change " and ' to `
>      config/alias.txt: document alias accepting non-command first word
>
>Derrick Stolee (51):
>      commit-graph: fix the_repository reference
>      revision: use generation for A..B --topo-order queries
>      revision: keep topo-walk free of unintersting commits
>      sha1-file: split OBJECT_INFO_FOR_PREFETCH
>      repack: refactor pack deletion for future use
>      Docs: rearrange subcommands for multi-pack-index
>      multi-pack-index: prepare for 'expire' subcommand
>      midx: simplify computation of pack name lengths
>      midx: refactor permutation logic and pack sorting
>      multi-pack-index: implement 'expire' subcommand
>      multi-pack-index: prepare 'repack' subcommand
>      midx: implement midx_repack()
>      multi-pack-index: test expire while adding packs
>      midx: add test that 'expire' respects .keep files
>      t5319-multi-pack-index.sh: test batch size zero
>      commit-graph: return with errors during write
>      commit-graph: collapse parameters into flags
>      commit-graph: remove Future Work section
>      commit-graph: create write_commit_graph_context
>      commit-graph: extract fill_oids_from_packs()
>      commit-graph: extract fill_oids_from_commit_hex()
>      commit-graph: extract fill_oids_from_all_packs()
>      commit-graph: extract count_distinct_commits()
>      commit-graph: extract copy_oids_to_commits()
>      commit-graph: extract write_commit_graph_file()
>      commit-graph: use raw_object_store when closing
>      packfile: close commit-graph in close_all_packs
>      packfile: rename close_all_packs to close_object_store
>      commit-graph: document commit-graph chains
>      commit-graph: prepare for commit-graph chains
>      commit-graph: rename commit_compare to oid_compare
>      commit-graph: load commit-graph chains
>      commit-graph: add base graphs chunk
>      commit-graph: rearrange chunk count logic
>      commit-graph: write commit-graph chains
>      commit-graph: add --split option to builtin
>      commit-graph: merge commit-graph chains
>      commit-graph: allow cross-alternate chains
>      commit-graph: expire commit-graph files
>      commit-graph: create options for split files
>      commit-graph: verify chains with --shallow mode
>      commit-graph: clean up chains after flattened write
>      commit-graph: test octopus merges with --split
>      commit-graph: test --split across alternate without --split
>      commit-graph: normalize commit-graph filenames
>      commit-graph: test verify across alternates
>      fetch: add --[no-]show-forced-updates argument
>      fetch: warn about forced updates in branch listing
>      pull: add --[no-]show-forced-updates passthrough
>      t5319: use 'test-tool path-utils' instead of 'ls -l'
>      commit-graph: fix bug around octopus merges
>
>Dimitriy Ryazantcev (2):
>      l10n: ru.po: update Russian translation
>      l10n: localizable upload progress messages
>
>Doug Ilijev (1):
>      README: fix rendering of text in angle brackets
>
>Dr. Adam Nielsen (1):
>      gitignore.txt: make slash-rules more readable
>
>Edmundo Carmona Antoranz (1):
>      builtin/merge.c - cleanup of code in for-cycle that tests strategies
>
>Elijah Newren (6):
>      t9350: fix encoding test to actually test reencoding
>      fast-import: support 'encoding' commit header
>      fast-export: avoid stripping encoding header if we cannot reencode
>      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
>      fast-export: do automatic reencoding of commit messages only if requested
>      merge-recursive: avoid directory rename detection in recursive case
>
>Emily Shaffer (7):
>      documentation: add tutorial for first contribution
>      documentation: add anchors to MyFirstContribution
>      grep: fail if call could output and name is null
>      doc: hint about GIT_DEBUGGER in CodingGuidelines
>      doc: add some nit fixes to MyFirstContribution
>      rev-list: teach --no-object-names to enable piping
>      transport-helper: enforce atomic in push_refs_with_push
>
>Eric Wong (3):
>      update-server-info: avoid needless overwrites
>      server-info: do not list unlinked packs
>      repack: disable bitmaps-by-default if .keep files exist
>
>Felipe Contreras (5):
>      t5801 (remote-helpers): cleanup refspec stuff
>      t5801 (remote-helpers): add test to fetch tags
>      fetch: trivial cleanup
>      fetch: make the code more understandable
>      fetch: fix regression with transport helpers
>
>Jakub Wilk (1):
>      doc: don't use git.kernel.org as example gitweb URL
>
>Jean-Noël Avila (2):
>      l10n: reformat some localized strings for v2.23.0
>      l10n: fr v2.23.0 round 2
>
>Jeff Hostetler (13):
>      cache-tree/blame: avoid reusing the DEBUG constant
>      msvc: mark a variable as non-const
>      msvc: do not re-declare the timespec struct
>      msvc: define ftello()
>      msvc: fix detect_msys_tty()
>      msvc: update Makefile to allow for spaces in the compiler path
>      status: add status.aheadbehind setting
>      status: warn when a/b calculation takes too long
>      status: ignore status.aheadbehind in porcelain formats
>      msvc: support building Git using MS Visual C++
>      msvc: add a compile-time flag to allow detailed heap debugging
>      msvc: do not pretend to support all signals
>      msvc: ignore .dll and incremental compile output
>
>Jeff King (57):
>      cmd_{read,write}_tree: rename "unused" variable that is used
>      builtin: consistently pass cmd_* prefix to parse_options
>      submodule: drop unused prefix parameter from some functions
>      clone: drop dest parameter from copy_alternates()
>      read-cache: drop unused parameter from threaded load
>      wt-status: drop unused status parameter
>      mktree: drop unused length parameter
>      name-rev: drop unused parameters from is_better_name()
>      pack-objects: drop unused rev_info parameters
>      receive-pack: drop unused "commands" from prepare_shallow_update()
>      remove_all_fetch_refspecs(): drop unused "remote" parameter
>      rev-list: drop unused void pointer from finish_commit()
>      show-branch: drop unused parameter from show_independent()
>      verify-commit: simplify parameters to run_gpg_verify()
>      help_unknown_ref(): duplicate collected refnames
>      help_unknown_ref(): check for refname ambiguity
>      upload-pack: strip namespace from symref data
>      am: simplify prompt response handling
>      am: read interactive input from stdin
>      am: drop tty requirement for --interactive
>      am: fix --interactive HEAD tree resolution
>      interpret-trailers: load default config
>      verify-tag: drop signal.h include
>      wt-status.h: drop stdio.h include
>      describe: fix accidental oid/hash type-punning
>      upload-pack: rename a "sha1" variable to "oid"
>      pack-bitmap-write: convert some helpers to use object_id
>      pack-objects: convert packlist_find() to use object_id
>      pack-objects: convert locate_object_entry_hash() to object_id
>      object: convert lookup_unknown_object() to use object_id
>      object: convert lookup_object() to use object_id
>      object: convert internal hash_obj() to object_id
>      object: convert create_object() to use object_id
>      khash: drop broken oid_map typedef
>      khash: rename kh_oid_t to kh_oid_set
>      delta-islands: convert island_marks khash to use oids
>      pack-bitmap: convert khash_sha1 maps into kh_oid_map
>      khash: drop sha1-specific map types
>      khash: rename oid helper functions
>      hash.h: move object_id definition from cache.h
>      hashmap: convert sha1hash() to oidhash()
>      delta-islands: respect progress flag
>      blame: drop some unused function parameters
>      object-store.h: move for_each_alternate_ref() from transport.h
>      check_everything_connected: assume alternate ref tips are valid
>      test-lib: introduce test_commit_bulk
>      t5310: increase the number of bitmapped commits
>      t3311: use test_commit_bulk
>      t5702: use test_commit_bulk
>      t5703: use test_commit_bulk
>      t6200: use test_commit_bulk
>      xdiff: clamp function context indices in post-image
>      t: sort output of hashmap iteration
>      t7700: clean up .keep file in bitmap-writing test
>      repack: silence warnings when auto-enabled bitmaps cannot be built
>      repack: simplify handling of auto-bitmaps and .keep files
>      t0000: reword comments for "local" test
>
>Jiang Xin (3):
>      l10n: git.pot: v2.23.0 round 1 (130 new, 35 removed)
>      l10n: git.pot: v2.23.0 round 2 (4 new, 6 removed)
>      l10n: zh_CN: for git v2.23.0 l10n round 1~2
>
>Johannes Schindelin (47):
>      Drop unused git-rebase--am.sh
>      t3400: stop referring to the scripted rebase
>      .gitignore: there is no longer a built-in `git-rebase--interactive`
>      sequencer: the `am` and `rebase--interactive` scripts are gone
>      rebase: fold git-rebase--common into the -p backend
>      bisect--helper: verify HEAD could be parsed before continuing
>      fill_stat_cache_info(): prepare for an fsmonitor fix
>      mark_fsmonitor_valid(): mark the index as changed if needed
>      bundle verify: error out if called without an object database
>      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
>      kwset: allow building with GCC 8
>      winansi: simplify loading the GetCurrentConsoleFontEx() function
>      config: avoid calling `labs()` on too-large data type
>      t3404: fix a typo
>      mingw: fix a typo in the msysGit-specific section
>      Mark .bat files as requiring CR/LF endings
>      t0001 (mingw): do not expect a specific order of stdout/stderr
>      obstack: fix compiler warning
>      mingw: replace mingw_startup() hack
>      msvc: fix dependencies of compat/msvc.c
>      t0001: fix on case-insensitive filesystems
>      msvc: avoid debug assertion windows in Debug Mode
>      mingw: enable stack smashing protector
>      mingw: get pw_name in UTF-8 format
>      mingw: use Unicode functions explicitly
>      rebase --am: ignore rebase.rescheduleFailedExec
>      mingw: fix possible buffer overrun when calling `GetUserNameW()`
>      diff: munmap() file contents before running external diff
>      mingw: support spawning programs containing spaces in their names
>      clean: show an error message when the path is too long
>      rebase: fix white-space
>      git: mark cmd_rebase as requiring a worktree
>      Vcproj.pm: auto-generate GUIDs
>      Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
>      Vcproj.pm: urlencode '<' and '>' when generating VC projects
>      contrib/buildsystems: ignore irrelevant files in Generators/
>      contrib/buildsystems: error out on unknown option
>      contrib/buildsystems: handle libiconv, too
>      contrib/buildsystems: also handle -lexpat
>      contrib/buildsystems: handle options starting with a slash
>      contrib/buildsystems: add a backend for modern Visual Studio versions
>      msvc: add a Makefile target to pre-generate the Visual Studio solution
>      vcxproj: also link-or-copy builtins
>      .gitignore: ignore Visual Studio's temporary/generated files
>      bin-wrappers: append `.exe` to target paths if necessary
>      git: avoid calling aliased builtins via their dashed form
>      config: work around bug with includeif:onbranch and early config
>
>Johannes Sixt (5):
>      userdiff: two simplifications of patterns for rust
>      t7610-mergetool: do not place pipelines headed by `yes` in subshells
>      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
>      mergetool: dissect strings with shell variable magic instead of `expr`
>      mergetool: use shell variable magic instead of `awk`
>
>John Lin (1):
>      status: remove the empty line after hints
>
>Jonathan Nieder (1):
>      t: decrease nesting in test_oid_to_path
>
>Jonathan Tan (5):
>      t5616: refactor packfile replacement
>      index-pack: prefetch missing REF_DELTA bases
>      t5616: use correct flag to check object is missing
>      t5616: cover case of client having delta base
>      t5551: test usage of chunked encoding explicitly
>
>Jordi Mas (2):
>      l10n: Update Catalan translation
>      l10n: Update Catalan translation
>
>Josh Steadmon (1):
>      trace2: correct trace2 field name documentation
>
>Junio C Hamano (21):
>      The first batch after 2.22
>      The second batch
>      The third batch
>      The fourth batch
>      The fifth batch
>      transport-helper: avoid var decl in for () loop control
>      rm: resolving by removal is not a warning-worthy event
>      CodingGuidelines: spell out post-C89 rules
>      The sixth batch
>      The seventh batch
>      Flush fixes up to the third batch post 2.22.0
>      Merge fixes made on the 'master' front
>      Git 2.23-rc0
>      test-dir-iterator: do not assume errno values
>      A few more last-minute fixes
>      log: flip the --mailmap default unconditionally
>      log: really flip the --mailmap default
>      Git 2.23-rc1
>      Git 2.23-rc2
>      Git 2.22.1
>      Git 2.23
>
>Karsten Blees (2):
>      gettext: always use UTF-8 on native Windows
>      mingw: initialize HOME on startup
>
>Marc-André Lureau (1):
>      userdiff: add built-in pattern for rust
>
>Mark Rushakoff (2):
>      doc: typo: s/can not/cannot/ and s/is does/does/
>      doc: fix repeated words
>
>Martin Ågren (3):
>      ref-filter: fix memory leak in `free_array_item()`
>      RelNotes/2.21.1: typofix
>      RelNotes/2.23.0: fix a few typos and other minor issues
>
>Matheus Tavares (8):
>      clone: better handle symlinked files at .git/objects/
>      dir-iterator: use warning_errno when possible
>      dir-iterator: refactor state machine model
>      dir-iterator: add flags parameter to dir_iterator_begin
>      clone: copy hidden paths at local clone
>      clone: extract function from copy_or_link_directory
>      clone: use dir-iterator to avoid explicit dir traversal
>      clone: replace strcmp by fspathcmp
>
>Matthew DeVore (5):
>      list-objects-filter-options: error is localizeable
>      list-objects-filter: correct usage of ALLOC_GROW
>      url: do not read past end of buffer
>      url: do not allow %00 to represent NUL in URLs
>      ref-filter: sort detached HEAD lines firstly
>
>Matthias Rüster (1):
>      l10n: de.po: Update German translation
>
>Mazo, Andrey (8):
>      git-p4: detect/prevent infinite loop in gitCommitByP4Change()
>      git-p4: add failing test for "git-p4: match branches case insensitively if configured"
>      git-p4: match branches case insensitively if configured
>      git-p4: don't groom exclude path list on every commit
>      git-p4: add failing test for "don't exclude other files with same prefix"
>      git-p4: don't exclude other files with same prefix
>      git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
>      git-p4: respect excluded paths when detecting branches
>
>Michael Osipov (1):
>      configure: Detect linking style for HP aCC on HP-UX
>
>Michael Platings (2):
>      blame: add a fingerprint heuristic to match ignored lines
>      t8014: remove unnecessary braces
>
>Miguel Ojeda (1):
>      clang-format: use git grep to generate the ForEachMacros list
>
>Mike Hommey (2):
>      dup() the input fd for fast-import used for remote helpers
>      Use xmmap_gently instead of xmmap in use_pack
>
>Mike Mueller (1):
>      p4 unshelve: fix "Not a valid object name HEAD0" on Windows
>
>Morian Sonnet (1):
>      submodule foreach: fix recursion of options
>
>Nguyễn Thái Ngọc Duy (63):
>      git-checkout.txt: spell out --no-option
>      git-checkout.txt: fix one syntax line
>      doc: document --overwrite-ignore
>      git-checkout.txt: fix monospace typeset
>      t: rename t2014-switch.sh to t2014-checkout-switch.sh
>      checkout: advice how to get out of detached HEAD mode
>      checkout: inform the user when removing branch state
>      checkout: keep most #include sorted
>      checkout: factor out some code in parse_branchname_arg()
>      checkout: make "opts" in cmd_checkout() a pointer
>      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
>      checkout: split options[] array in three pieces
>      checkout: split part of it to new command 'switch'
>      switch: better names for -b and -B
>      switch: add --discard-changes
>      switch: remove -l
>      switch: stop accepting pathspec
>      switch: reject "do nothing" case
>      switch: only allow explicit detached HEAD
>      switch: add short option for --detach
>      switch: implicit dwim, use --no-guess to disable it
>      switch: no worktree status unless real branch switch happens
>      switch: reject if some operation is in progress
>      switch: make --orphan switch to an empty tree
>      t: add tests for switch
>      completion: support switch
>      doc: promote "git switch"
>      checkout: split part of it to new command 'restore'
>      restore: take tree-ish from --source option instead
>      restore: make pathspec mandatory
>      restore: disable overlay mode by default
>      checkout: factor out worktree checkout code
>      restore: add --worktree and --staged
>      restore: reject invalid combinations with --staged
>      restore: default to --source=HEAD when only --staged is specified
>      restore: replace --force with --ignore-unmerged
>      restore: support --patch
>      t: add tests for restore
>      completion: support restore
>      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
>      doc: promote "git restore"
>      help: move git-diff and git-reset to different groups
>      Declare both git-switch and git-restore experimental
>      merge: remove drop_save() in favor of remove_merge_branch_state()
>      init: make --template path relative to $CWD
>      worktree add: sanitize worktree names
>      worktree add: be tolerant of corrupt worktrees
>      merge: add --quit
>      completion: do not cache if --git-completion-helper fails
>      fetch: only run 'gc' once when fetching multiple remotes
>      t2027: use test_must_be_empty
>      switch: allow to switch in the middle of bisect
>      completion: disable dwim on "git switch -d"
>      fetch-pack: move capability names out of i18n strings
>      fetch-pack: print all relevant supported capabilities with -v -v
>      fetch-pack: print server version at the top in -v -v
>      sha1-file.c: remove the_repo from read_object_with_reference()
>      tree-walk.c: remove the_repo from fill_tree_descriptor()
>      tree-walk.c: remove the_repo from get_tree_entry()
>      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
>      match-trees.c: remove the_repo from shift_tree*()
>      Use the right 'struct repository' instead of the_repository
>      t7814: do not generate same commits in different repos
>
>Nickolai Belakovski (3):
>      ref-filter: add worktreepath atom
>      branch: update output to include worktree info
>      branch: add worktree info on verbose output
>
>Paolo Bonzini (2):
>      request-pull: quote regex metacharacters in local ref
>      request-pull: warn if the remote object is not the same as the local one
>
>Peter Krefting (1):
>      l10n: sv.po: Update Swedish translation (4676t0f0u)
>
>Philip Oakley (16):
>      git.c: show usage for accessing the git(1) help page
>      Doc: git.txt: remove backticks from link and add git-scm.com/docs
>      doc branch: provide examples for listing remote tracking branches
>      msvc: include sigset_t definition
>      msvc: define O_ACCMODE
>      msvc: add pragmas for common warnings
>      Vcproj.pm: list git.exe first to be startup project
>      contrib/buildsystems: ignore invalidcontinue.obj
>      contrib/buildsystems: fix misleading error message
>      contrib/buildsystems: handle quoted spaces in filenames
>      contrib/buildsystems: ignore gettext stuff
>      contrib/buildsystems: redirect errors of the dry run into a log file
>      contrib/buildsystems: optionally capture the dry-run in a file
>      contrib/buildsystems: handle the curl library option
>      .gitignore: touch up the entries regarding Visual Studio
>      .mailmap: update email address of Philip Oakley
>
>Philipp Weißmann (1):
>      l10n: de.po: Fix typo in German translation
>
>Phillip Wood (12):
>      rebase: fix a memory leak
>      rebase: warn if state directory cannot be removed
>      sequencer: return errors from sequencer_remove_state()
>      rebase --abort/--quit: cleanup refs/rewritten
>      rebase -r: always reword merge -c
>      add -p: fix checkout -p with pathological context
>      show --continue/skip etc. consistently in synopsis
>      sequencer: always allow tab after command name
>      sequencer: factor out todo command name parsing
>      status: do not report errors in sequencer/todo
>      git-prompt: improve cherry-pick/revert detection
>      t3420: remove progress lines before comparing output
>
>Quentin Nerden (2):
>      docs: git-clone: refer to long form of options
>      docs: git-clone: list short form of options first
>
>Ramsay Jones (1):
>      env--helper: mark a file-local symbol as static
>
>René Scharfe (10):
>      cleanup: fix possible overflow errors in binary search, part 2
>      coccinelle: use COPY_ARRAY for copying arrays
>      use COPY_ARRAY for copying arrays
>      config: use unsigned_mult_overflows to check for overflows
>      config: don't multiply in parse_unit_factor()
>      config: simplify parsing of unit factors
>      commit-graph: release strbufs after use
>      dir-iterator: release strbuf after use
>      test-dir-iterator: use path argument directly
>      sha1-file: release strbuf after use
>
>Robert Morgan (1):
>      gpg(docs): use correct --verify syntax
>
>Rohit Ashiwal (5):
>      sequencer: add advice for revert
>      sequencer: rename reset_for_rollback to reset_merge
>      sequencer: use argv_array in reset_merge
>      cherry-pick/revert: add --skip option
>      cherry-pick/revert: advise using --skip
>
>SZEDER Gábor (12):
>      t3404: modernize here doc style
>      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
>      pager: add a helper function to clear the last line in the terminal
>      t5551: use 'test_i18ngrep' to check translated output
>      rebase: fix garbled progress display with '-x'
>      progress: use term_clear_line()
>      Document that 'git -C ""' works and doesn't change directory
>      ci: don't update Homebrew
>      ci: disable Homebrew's auto cleanup
>      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
>      travis-ci: build with GCC 4.8 as well
>      Documentation/git-fsck.txt: include fsck.* config variables
>
>Simon Williams (1):
>      git-p4: allow unshelving of branched files
>
>Stephen Boyd (2):
>      format-patch: inform user that patch-id generation is unstable
>      format-patch: make --base patch-id output stable
>
>Steven Roberts (1):
>      gpg-interface: do not scan past the end of buffer
>
>Taylor Blau (1):
>      ref-filter.c: find disjoint pattern prefixes
>
>Thomas Gummerer (16):
>      stash: fix show referencing stash index
>      apply: replace marc.info link with public-inbox
>      apply: only pass required data to skip_tree_prefix
>      apply: only pass required data to git_header_name
>      apply: only pass required data to check_header_line
>      apply: only pass required data to find_name_*
>      apply: only pass required data to gitdiff_* functions
>      apply: make parse_git_diff_header public
>      range-diff: fix function parameter indentation
>      range-diff: split lines manually
>      range-diff: don't remove funcname from inner diff
>      range-diff: suppress line count in outer diff
>      range-diff: add section header instead of diff header
>      range-diff: add filename to inner diff
>      range-diff: add headers to the outer hunk header
>      stash: fix handling removed files with --keep-index
>
>Tigran Mkrtchyan (1):
>      tag: add tag.gpgSign config option to force all tags be GPG-signed
>
>Trần Ngọc Quân (2):
>      l10n: vi.po (4676t): Updated Vietnamese translation
>      l10n: vi(4674t): Updated translation for Vietnamese
>
>Varun Naik (1):
>      read-cache.c: do not die if mmap fails
>
>Vishal Verma (1):
>      merge: refuse --commit with --squash
>
>William Chargin (1):
>      restore: fix typo in docs
>
>Xin Li (1):
>      clone: respect user supplied origin name when setting up partial clone
>
>brian m. carlson (10):
>      t: add helper to convert object IDs to paths
>      t1410: make hash size independent
>      t1450: make hash size independent
>      t5000: make hash independent
>      t6030: make test work with SHA-256
>      t0027: make hash size independent
>      t0090: make test pass with SHA-256
>      t1007: remove SHA1 prerequisites
>      t1710: make hash independent
>      t2203: avoid hard-coded object ID values
>
>Ævar Arnfjörð Bjarmason (21):
>      send-email: move the read_config() function above getopts
>      send-email: rename the @bcclist variable for consistency
>      send-email: do defaults -> config -> getopt in that order
>      tests: add a special setup where prerequisites fail
>      Makefile: remove the NO_R_TO_GCC_LINKER flag
>      send-email: remove cargo-culted multi-patch pattern in tests
>      send-email: fix broken transferEncoding tests
>      send-email: document --no-[to|cc|bcc]
>      hash-object doc: stop mentioning git-cvsimport
>      send-email: fix regression in sendemail.identity parsing
>      Revert "test-lib: whitelist GIT_TR2_* in the environment"
>      config tests: simplify include cycle test
>      env--helper: new undocumented builtin wrapping git_env_*()
>      config.c: refactor die_bad_number() to not call gettext() early
>      t6040 test: stop using global "script" variable
>      tests: make GIT_TEST_GETTEXT_POISON a boolean
>      tests README: re-flow a previously changed paragraph
>      tests: replace test_tristate with "git env--helper"
>      tests: make GIT_TEST_FAIL_PREREQS a boolean
>      tests: mark two failing tests under FAIL_PREREQS
>      clone: test for our behavior on odd objects/* content
>

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

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.23.0
@ 2019-08-16 21:00  4% Junio C Hamano
  2019-08-16 21:30  0% ` Bhaskar Chowdhury
  0 siblings, 1 reply; 42+ results
From: Junio C Hamano @ 2019-08-16 21:00 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.23.0 is now available at the
usual places.  It is comprised of 505 non-merge commits since
v2.22.0, contributed by 77 people, 26 of which are new faces.

The tarballs are found at:

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

The following public repositories all have a copy of the 'v2.23.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.22.0 are as follows.
Welcome to the Git development community!

  Ariadne Conill, Barret Rhoden, Ben Avison, Carmine Zaccagnino,
  Daniel Ferreira, Doug Ilijev, Dr. Adam Nielsen, Jakub Wilk,
  John Lin, Mark Rushakoff, Matheus Tavares, Mazo, Andrey,
  Michael Osipov, Michael Platings, Miguel Ojeda, Mike Mueller,
  Morian Sonnet, Philipp Weißmann, Quentin Nerden, Robert Morgan,
  Simon Williams, Steven Roberts, Tigran Mkrtchyan, Varun Naik,
  Vishal Verma, and Xin Li.

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

  Ævar Arnfjörð Bjarmason, Alessandro Menti, Alexander
  Shopov, Beat Bolli, Boxuan Li, brian m. carlson, Carlo Marcelo
  Arenas Belón, Cesar Eduardo Barros, Chris Mayo, Christian
  Couder, Christopher Díaz Riveros, Denton Liu, Derrick Stolee,
  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
  Emily Shaffer, Eric Wong, Felipe Contreras, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh
  Steadmon, Junio C Hamano, Karsten Blees, Marc-André Lureau,
  Martin Ågren, Matthew DeVore, Matthias Rüster, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Nickolai Belakovski, Paolo Bonzini,
  Peter Krefting, Philip Oakley, Phillip Wood, Ramsay Jones, René
  Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor, Taylor Blau,
  Thomas Gummerer, Trần Ngọc Quân, and William Chargin.

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

Git 2.23 Release Notes
======================

Updates since v2.22
-------------------

Backward compatibility note

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

 * The "git log" command by default behaves as if the --mailmap option
   was given.


UI, Workflows & Features

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

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

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

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

 * The code to show args with potential typo that cannot be
   interpreted as a commit-ish has been improved.

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

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

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

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

 * "git status" can be told a non-standard default value for the
   "--[no-]ahead-behind" option with a new configuration variable
   status.aheadBehind.

 * "git fetch" and "git pull" reports when a fetch results in
   non-fast-forward updates to let the user notice unusual situation.
   The commands learned "--no-show-forced-updates" option to disable
   this safety feature.

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

 * "git branch --list" learned to always output the detached HEAD as
   the first item (when the HEAD is detached, of course), regardless
   of the locale.

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

 * "git rev-list --objects" learned the "--no-object-names" option to
   squelch the path to the object that is used as a grouping hint for
   pack-objects.

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

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

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

 * "git cherry-pick/revert" learned a new "--skip" action.

 * The tips of refs from the alternate object store can be used as
   starting point for reachability computation now.

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

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

 * "git range-diff" output has been tweaked for easier identification
   of which part of what file the patch shown is about.


Performance, Internal Implementation, Development Support etc.

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

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

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

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

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

 * A new tutorial targeting specifically aspiring git-core
   developers has been added.

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

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

 * Dev support update to help tracing out tests.

 * Support to build with MSVC has been updated.

 * "git fetch" that grabs from a group of remotes learned to run the
   auto-gc only once at the very end.

 * A handful of Windows build patches have been upstreamed.

 * The code to read state files used by the sequencer machinery for
   "git status" has been made more robust against a corrupt or stale
   state files.

 * "git for-each-ref" with multiple patterns have been optimized.

 * The tree-walk API learned to pass an in-core repository
   instance throughout more codepaths.

 * When one step in multi step cherry-pick or revert is reset or
   committed, the command line prompt script failed to notice the
   current status, which has been improved.

 * Many GIT_TEST_* environment variables control various aspects of
   how our tests are run, but a few followed "non-empty is true, empty
   or unset is false" while others followed the usual "there are a few
   ways to spell true, like yes, on, etc., and also ways to spell
   false, like no, off, etc." convention.

 * Adjust the dir-iterator API and apply it to the local clone
   optimization codepath.

 * We have been trying out a few language features outside c89; the
   coding guidelines document did not talk about them and instead had
   a blanket ban against them.

 * A test helper has been introduced to optimize preparation of test
   repositories with many simple commits, and a handful of test
   scripts have been updated to use it.


Fixes since v2.22
-----------------

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

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

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

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

 * Code cleanup and futureproof.

 * More parameter validation.

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

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

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

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

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

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

 * Update to Unicode 12.1 width table.

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

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

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

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

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

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

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

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

 * "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.
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).

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

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

 * "git checkout -p" needs to selectively apply a patch in reverse,
   which did not work well.

 * Code clean-up to avoid signed integer wraparounds during binary search.

 * "git interpret-trailers" always treated '#' as the comment
   character, regardless of core.commentChar setting, which has been
   corrected.

 * "git stash show 23" used to work, but no more after getting
   rewritten in C; this regression has been corrected.

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

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

 * The code to parse scaled numbers out of configuration files has
   been made more robust and also easier to follow.

 * The codepath to compute delta islands used to spew progress output
   without giving the callers any way to squelch it, which has been
   fixed.

 * Protocol capabilities that go over wire should never be translated,
   but it was incorrectly marked for translation, which has been
   corrected.  The output of protocol capabilities for debugging has
   been tweaked a bit.

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

 * "git submodule foreach" did not protect command line options passed
   to the command to be run in each submodule correctly, when the
   "--recursive" option was in use.

 * The configuration variable rebase.rescheduleFailedExec should be
   effective only while running an interactive rebase and should not
   affect anything when running a non-interactive one, which was not
   the case.  This has been corrected.

 * The "git clone" documentation refers to command line options in its
   description in the short form; they have been replaced with long
   forms to make them more recognisable.

 * Generation of pack bitmaps are now disabled when .keep files exist,
   as these are mutually exclusive features.
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).

 * "git rm" to resolve a conflicted path leaked an internal message
   "needs merge" before actually removing the path, which was
   confusing.  This has been corrected.

 * "git stash --keep-index" did not work correctly on paths that have
   been removed, which has been fixed.
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).

 * Window 7 update ;-)

 * A codepath that reads from GPG for signed object verification read
   past the end of allocated buffer, which has been fixed.

 * "git clean" silently skipped a path when it cannot lstat() it; now
   it gives a warning.

 * "git push --atomic" that goes over the transport-helper (namely,
   the smart http transport) failed to prevent refs to be pushed when
   it can locally tell that one of the ref update will fail without
   having to consult the other end, which has been corrected.

 * The internal diff machinery can be made to read out of bounds while
   looking for --function-context line in a corner case, which has been
   corrected.
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge fbec05c210 cc/test-oidmap later to maint).
   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).

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

Changes since v2.22.0 are as follows:

Alessandro Menti (3):
      l10n: it.po: update the Italian translation
      l10n: it.po: update the Italian translation for v2.23.0
      l10n: it.po: update the Italian localization for v2.23.0 round 2

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

Ariadne Conill (3):
      log: add warning for unspecified log.mailmap setting
      documentation: mention --no-use-mailmap and log.mailmap false setting
      tests: defang pager tests by explicitly disabling the log.mailmap warning

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

Beat Bolli (2):
      unicode: update the width tables to Unicode 12.1
      grep: print the pcre2_jit_on value

Ben Avison (1):
      clone: add `--remote-submodules` flag

Boxuan Li (2):
      userdiff: add Octave
      userdiff: fix grammar and style issues

Carlo Marcelo Arenas Belón (6):
      fsmonitor: avoid signed integer overflow / infinite loop
      wrapper: avoid undefined behaviour in macOS
      trace2: correct typo in technical documentation
      xdiff: drop system includes in xutils.c
      xdiff: remove duplicate headers from xhistogram.c
      xdiff: remove duplicate headers from xpatience.c

Carmine Zaccagnino (1):
      l10n: it.po: remove an extra space

Cesar Eduardo Barros (1):
      mingw: embed a manifest to trick UAC into Doing The Right Thing

Chris Mayo (1):
      send-email: update documentation of required Perl modules

Christian Couder (7):
      t/helper: add test-oidmap.c
      t: add t0016-oidmap.sh
      oidmap: use sha1hash() instead of static hash() function
      test-hashmap: remove 'hash' command
      doc: improve usage string in MyFirstContribution
      test-oidmap: remove 'add' subcommand
      t0016: add 'remove' subcommand test

Christopher Díaz Riveros (1):
      l10n: es: 2.23.0 round 2

Daniel Ferreira (1):
      dir-iterator: add tests for dir-iterator API

Denton Liu (5):
      git-format-patch.txt: document --no-notes option
      format-patch: teach format.notes config option
      config: learn the "onbranch:" includeIf condition
      config/alias.txt: change " and ' to `
      config/alias.txt: document alias accepting non-command first word

Derrick Stolee (51):
      commit-graph: fix the_repository reference
      revision: use generation for A..B --topo-order queries
      revision: keep topo-walk free of unintersting commits
      sha1-file: split OBJECT_INFO_FOR_PREFETCH
      repack: refactor pack deletion for future use
      Docs: rearrange subcommands for multi-pack-index
      multi-pack-index: prepare for 'expire' subcommand
      midx: simplify computation of pack name lengths
      midx: refactor permutation logic and pack sorting
      multi-pack-index: implement 'expire' subcommand
      multi-pack-index: prepare 'repack' subcommand
      midx: implement midx_repack()
      multi-pack-index: test expire while adding packs
      midx: add test that 'expire' respects .keep files
      t5319-multi-pack-index.sh: test batch size zero
      commit-graph: return with errors during write
      commit-graph: collapse parameters into flags
      commit-graph: remove Future Work section
      commit-graph: create write_commit_graph_context
      commit-graph: extract fill_oids_from_packs()
      commit-graph: extract fill_oids_from_commit_hex()
      commit-graph: extract fill_oids_from_all_packs()
      commit-graph: extract count_distinct_commits()
      commit-graph: extract copy_oids_to_commits()
      commit-graph: extract write_commit_graph_file()
      commit-graph: use raw_object_store when closing
      packfile: close commit-graph in close_all_packs
      packfile: rename close_all_packs to close_object_store
      commit-graph: document commit-graph chains
      commit-graph: prepare for commit-graph chains
      commit-graph: rename commit_compare to oid_compare
      commit-graph: load commit-graph chains
      commit-graph: add base graphs chunk
      commit-graph: rearrange chunk count logic
      commit-graph: write commit-graph chains
      commit-graph: add --split option to builtin
      commit-graph: merge commit-graph chains
      commit-graph: allow cross-alternate chains
      commit-graph: expire commit-graph files
      commit-graph: create options for split files
      commit-graph: verify chains with --shallow mode
      commit-graph: clean up chains after flattened write
      commit-graph: test octopus merges with --split
      commit-graph: test --split across alternate without --split
      commit-graph: normalize commit-graph filenames
      commit-graph: test verify across alternates
      fetch: add --[no-]show-forced-updates argument
      fetch: warn about forced updates in branch listing
      pull: add --[no-]show-forced-updates passthrough
      t5319: use 'test-tool path-utils' instead of 'ls -l'
      commit-graph: fix bug around octopus merges

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      l10n: localizable upload progress messages

Doug Ilijev (1):
      README: fix rendering of text in angle brackets

Dr. Adam Nielsen (1):
      gitignore.txt: make slash-rules more readable

Edmundo Carmona Antoranz (1):
      builtin/merge.c - cleanup of code in for-cycle that tests strategies

Elijah Newren (6):
      t9350: fix encoding test to actually test reencoding
      fast-import: support 'encoding' commit header
      fast-export: avoid stripping encoding header if we cannot reencode
      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
      fast-export: do automatic reencoding of commit messages only if requested
      merge-recursive: avoid directory rename detection in recursive case

Emily Shaffer (7):
      documentation: add tutorial for first contribution
      documentation: add anchors to MyFirstContribution
      grep: fail if call could output and name is null
      doc: hint about GIT_DEBUGGER in CodingGuidelines
      doc: add some nit fixes to MyFirstContribution
      rev-list: teach --no-object-names to enable piping
      transport-helper: enforce atomic in push_refs_with_push

Eric Wong (3):
      update-server-info: avoid needless overwrites
      server-info: do not list unlinked packs
      repack: disable bitmaps-by-default if .keep files exist

Felipe Contreras (5):
      t5801 (remote-helpers): cleanup refspec stuff
      t5801 (remote-helpers): add test to fetch tags
      fetch: trivial cleanup
      fetch: make the code more understandable
      fetch: fix regression with transport helpers

Jakub Wilk (1):
      doc: don't use git.kernel.org as example gitweb URL

Jean-Noël Avila (2):
      l10n: reformat some localized strings for v2.23.0
      l10n: fr v2.23.0 round 2

Jeff Hostetler (13):
      cache-tree/blame: avoid reusing the DEBUG constant
      msvc: mark a variable as non-const
      msvc: do not re-declare the timespec struct
      msvc: define ftello()
      msvc: fix detect_msys_tty()
      msvc: update Makefile to allow for spaces in the compiler path
      status: add status.aheadbehind setting
      status: warn when a/b calculation takes too long
      status: ignore status.aheadbehind in porcelain formats
      msvc: support building Git using MS Visual C++
      msvc: add a compile-time flag to allow detailed heap debugging
      msvc: do not pretend to support all signals
      msvc: ignore .dll and incremental compile output

Jeff King (57):
      cmd_{read,write}_tree: rename "unused" variable that is used
      builtin: consistently pass cmd_* prefix to parse_options
      submodule: drop unused prefix parameter from some functions
      clone: drop dest parameter from copy_alternates()
      read-cache: drop unused parameter from threaded load
      wt-status: drop unused status parameter
      mktree: drop unused length parameter
      name-rev: drop unused parameters from is_better_name()
      pack-objects: drop unused rev_info parameters
      receive-pack: drop unused "commands" from prepare_shallow_update()
      remove_all_fetch_refspecs(): drop unused "remote" parameter
      rev-list: drop unused void pointer from finish_commit()
      show-branch: drop unused parameter from show_independent()
      verify-commit: simplify parameters to run_gpg_verify()
      help_unknown_ref(): duplicate collected refnames
      help_unknown_ref(): check for refname ambiguity
      upload-pack: strip namespace from symref data
      am: simplify prompt response handling
      am: read interactive input from stdin
      am: drop tty requirement for --interactive
      am: fix --interactive HEAD tree resolution
      interpret-trailers: load default config
      verify-tag: drop signal.h include
      wt-status.h: drop stdio.h include
      describe: fix accidental oid/hash type-punning
      upload-pack: rename a "sha1" variable to "oid"
      pack-bitmap-write: convert some helpers to use object_id
      pack-objects: convert packlist_find() to use object_id
      pack-objects: convert locate_object_entry_hash() to object_id
      object: convert lookup_unknown_object() to use object_id
      object: convert lookup_object() to use object_id
      object: convert internal hash_obj() to object_id
      object: convert create_object() to use object_id
      khash: drop broken oid_map typedef
      khash: rename kh_oid_t to kh_oid_set
      delta-islands: convert island_marks khash to use oids
      pack-bitmap: convert khash_sha1 maps into kh_oid_map
      khash: drop sha1-specific map types
      khash: rename oid helper functions
      hash.h: move object_id definition from cache.h
      hashmap: convert sha1hash() to oidhash()
      delta-islands: respect progress flag
      blame: drop some unused function parameters
      object-store.h: move for_each_alternate_ref() from transport.h
      check_everything_connected: assume alternate ref tips are valid
      test-lib: introduce test_commit_bulk
      t5310: increase the number of bitmapped commits
      t3311: use test_commit_bulk
      t5702: use test_commit_bulk
      t5703: use test_commit_bulk
      t6200: use test_commit_bulk
      xdiff: clamp function context indices in post-image
      t: sort output of hashmap iteration
      t7700: clean up .keep file in bitmap-writing test
      repack: silence warnings when auto-enabled bitmaps cannot be built
      repack: simplify handling of auto-bitmaps and .keep files
      t0000: reword comments for "local" test

Jiang Xin (3):
      l10n: git.pot: v2.23.0 round 1 (130 new, 35 removed)
      l10n: git.pot: v2.23.0 round 2 (4 new, 6 removed)
      l10n: zh_CN: for git v2.23.0 l10n round 1~2

Johannes Schindelin (47):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      bisect--helper: verify HEAD could be parsed before continuing
      fill_stat_cache_info(): prepare for an fsmonitor fix
      mark_fsmonitor_valid(): mark the index as changed if needed
      bundle verify: error out if called without an object database
      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
      kwset: allow building with GCC 8
      winansi: simplify loading the GetCurrentConsoleFontEx() function
      config: avoid calling `labs()` on too-large data type
      t3404: fix a typo
      mingw: fix a typo in the msysGit-specific section
      Mark .bat files as requiring CR/LF endings
      t0001 (mingw): do not expect a specific order of stdout/stderr
      obstack: fix compiler warning
      mingw: replace mingw_startup() hack
      msvc: fix dependencies of compat/msvc.c
      t0001: fix on case-insensitive filesystems
      msvc: avoid debug assertion windows in Debug Mode
      mingw: enable stack smashing protector
      mingw: get pw_name in UTF-8 format
      mingw: use Unicode functions explicitly
      rebase --am: ignore rebase.rescheduleFailedExec
      mingw: fix possible buffer overrun when calling `GetUserNameW()`
      diff: munmap() file contents before running external diff
      mingw: support spawning programs containing spaces in their names
      clean: show an error message when the path is too long
      rebase: fix white-space
      git: mark cmd_rebase as requiring a worktree
      Vcproj.pm: auto-generate GUIDs
      Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
      Vcproj.pm: urlencode '<' and '>' when generating VC projects
      contrib/buildsystems: ignore irrelevant files in Generators/
      contrib/buildsystems: error out on unknown option
      contrib/buildsystems: handle libiconv, too
      contrib/buildsystems: also handle -lexpat
      contrib/buildsystems: handle options starting with a slash
      contrib/buildsystems: add a backend for modern Visual Studio versions
      msvc: add a Makefile target to pre-generate the Visual Studio solution
      vcxproj: also link-or-copy builtins
      .gitignore: ignore Visual Studio's temporary/generated files
      bin-wrappers: append `.exe` to target paths if necessary
      git: avoid calling aliased builtins via their dashed form
      config: work around bug with includeif:onbranch and early config

Johannes Sixt (5):
      userdiff: two simplifications of patterns for rust
      t7610-mergetool: do not place pipelines headed by `yes` in subshells
      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
      mergetool: dissect strings with shell variable magic instead of `expr`
      mergetool: use shell variable magic instead of `awk`

John Lin (1):
      status: remove the empty line after hints

Jonathan Nieder (1):
      t: decrease nesting in test_oid_to_path

Jonathan Tan (5):
      t5616: refactor packfile replacement
      index-pack: prefetch missing REF_DELTA bases
      t5616: use correct flag to check object is missing
      t5616: cover case of client having delta base
      t5551: test usage of chunked encoding explicitly

Jordi Mas (2):
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (1):
      trace2: correct trace2 field name documentation

Junio C Hamano (21):
      The first batch after 2.22
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      transport-helper: avoid var decl in for () loop control
      rm: resolving by removal is not a warning-worthy event
      CodingGuidelines: spell out post-C89 rules
      The sixth batch
      The seventh batch
      Flush fixes up to the third batch post 2.22.0
      Merge fixes made on the 'master' front
      Git 2.23-rc0
      test-dir-iterator: do not assume errno values
      A few more last-minute fixes
      log: flip the --mailmap default unconditionally
      log: really flip the --mailmap default
      Git 2.23-rc1
      Git 2.23-rc2
      Git 2.22.1
      Git 2.23

Karsten Blees (2):
      gettext: always use UTF-8 on native Windows
      mingw: initialize HOME on startup

Marc-André Lureau (1):
      userdiff: add built-in pattern for rust

Mark Rushakoff (2):
      doc: typo: s/can not/cannot/ and s/is does/does/
      doc: fix repeated words

Martin Ågren (3):
      ref-filter: fix memory leak in `free_array_item()`
      RelNotes/2.21.1: typofix
      RelNotes/2.23.0: fix a few typos and other minor issues

Matheus Tavares (8):
      clone: better handle symlinked files at .git/objects/
      dir-iterator: use warning_errno when possible
      dir-iterator: refactor state machine model
      dir-iterator: add flags parameter to dir_iterator_begin
      clone: copy hidden paths at local clone
      clone: extract function from copy_or_link_directory
      clone: use dir-iterator to avoid explicit dir traversal
      clone: replace strcmp by fspathcmp

Matthew DeVore (5):
      list-objects-filter-options: error is localizeable
      list-objects-filter: correct usage of ALLOC_GROW
      url: do not read past end of buffer
      url: do not allow %00 to represent NUL in URLs
      ref-filter: sort detached HEAD lines firstly

Matthias Rüster (1):
      l10n: de.po: Update German translation

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

Michael Osipov (1):
      configure: Detect linking style for HP aCC on HP-UX

Michael Platings (2):
      blame: add a fingerprint heuristic to match ignored lines
      t8014: remove unnecessary braces

Miguel Ojeda (1):
      clang-format: use git grep to generate the ForEachMacros list

Mike Hommey (2):
      dup() the input fd for fast-import used for remote helpers
      Use xmmap_gently instead of xmmap in use_pack

Mike Mueller (1):
      p4 unshelve: fix "Not a valid object name HEAD0" on Windows

Morian Sonnet (1):
      submodule foreach: fix recursion of options

Nguyễn Thái Ngọc Duy (63):
      git-checkout.txt: spell out --no-option
      git-checkout.txt: fix one syntax line
      doc: document --overwrite-ignore
      git-checkout.txt: fix monospace typeset
      t: rename t2014-switch.sh to t2014-checkout-switch.sh
      checkout: advice how to get out of detached HEAD mode
      checkout: inform the user when removing branch state
      checkout: keep most #include sorted
      checkout: factor out some code in parse_branchname_arg()
      checkout: make "opts" in cmd_checkout() a pointer
      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
      checkout: split options[] array in three pieces
      checkout: split part of it to new command 'switch'
      switch: better names for -b and -B
      switch: add --discard-changes
      switch: remove -l
      switch: stop accepting pathspec
      switch: reject "do nothing" case
      switch: only allow explicit detached HEAD
      switch: add short option for --detach
      switch: implicit dwim, use --no-guess to disable it
      switch: no worktree status unless real branch switch happens
      switch: reject if some operation is in progress
      switch: make --orphan switch to an empty tree
      t: add tests for switch
      completion: support switch
      doc: promote "git switch"
      checkout: split part of it to new command 'restore'
      restore: take tree-ish from --source option instead
      restore: make pathspec mandatory
      restore: disable overlay mode by default
      checkout: factor out worktree checkout code
      restore: add --worktree and --staged
      restore: reject invalid combinations with --staged
      restore: default to --source=HEAD when only --staged is specified
      restore: replace --force with --ignore-unmerged
      restore: support --patch
      t: add tests for restore
      completion: support restore
      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
      doc: promote "git restore"
      help: move git-diff and git-reset to different groups
      Declare both git-switch and git-restore experimental
      merge: remove drop_save() in favor of remove_merge_branch_state()
      init: make --template path relative to $CWD
      worktree add: sanitize worktree names
      worktree add: be tolerant of corrupt worktrees
      merge: add --quit
      completion: do not cache if --git-completion-helper fails
      fetch: only run 'gc' once when fetching multiple remotes
      t2027: use test_must_be_empty
      switch: allow to switch in the middle of bisect
      completion: disable dwim on "git switch -d"
      fetch-pack: move capability names out of i18n strings
      fetch-pack: print all relevant supported capabilities with -v -v
      fetch-pack: print server version at the top in -v -v
      sha1-file.c: remove the_repo from read_object_with_reference()
      tree-walk.c: remove the_repo from fill_tree_descriptor()
      tree-walk.c: remove the_repo from get_tree_entry()
      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
      match-trees.c: remove the_repo from shift_tree*()
      Use the right 'struct repository' instead of the_repository
      t7814: do not generate same commits in different repos

Nickolai Belakovski (3):
      ref-filter: add worktreepath atom
      branch: update output to include worktree info
      branch: add worktree info on verbose output

Paolo Bonzini (2):
      request-pull: quote regex metacharacters in local ref
      request-pull: warn if the remote object is not the same as the local one

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

Philip Oakley (16):
      git.c: show usage for accessing the git(1) help page
      Doc: git.txt: remove backticks from link and add git-scm.com/docs
      doc branch: provide examples for listing remote tracking branches
      msvc: include sigset_t definition
      msvc: define O_ACCMODE
      msvc: add pragmas for common warnings
      Vcproj.pm: list git.exe first to be startup project
      contrib/buildsystems: ignore invalidcontinue.obj
      contrib/buildsystems: fix misleading error message
      contrib/buildsystems: handle quoted spaces in filenames
      contrib/buildsystems: ignore gettext stuff
      contrib/buildsystems: redirect errors of the dry run into a log file
      contrib/buildsystems: optionally capture the dry-run in a file
      contrib/buildsystems: handle the curl library option
      .gitignore: touch up the entries regarding Visual Studio
      .mailmap: update email address of Philip Oakley

Philipp Weißmann (1):
      l10n: de.po: Fix typo in German translation

Phillip Wood (12):
      rebase: fix a memory leak
      rebase: warn if state directory cannot be removed
      sequencer: return errors from sequencer_remove_state()
      rebase --abort/--quit: cleanup refs/rewritten
      rebase -r: always reword merge -c
      add -p: fix checkout -p with pathological context
      show --continue/skip etc. consistently in synopsis
      sequencer: always allow tab after command name
      sequencer: factor out todo command name parsing
      status: do not report errors in sequencer/todo
      git-prompt: improve cherry-pick/revert detection
      t3420: remove progress lines before comparing output

Quentin Nerden (2):
      docs: git-clone: refer to long form of options
      docs: git-clone: list short form of options first

Ramsay Jones (1):
      env--helper: mark a file-local symbol as static

René Scharfe (10):
      cleanup: fix possible overflow errors in binary search, part 2
      coccinelle: use COPY_ARRAY for copying arrays
      use COPY_ARRAY for copying arrays
      config: use unsigned_mult_overflows to check for overflows
      config: don't multiply in parse_unit_factor()
      config: simplify parsing of unit factors
      commit-graph: release strbufs after use
      dir-iterator: release strbuf after use
      test-dir-iterator: use path argument directly
      sha1-file: release strbuf after use

Robert Morgan (1):
      gpg(docs): use correct --verify syntax

Rohit Ashiwal (5):
      sequencer: add advice for revert
      sequencer: rename reset_for_rollback to reset_merge
      sequencer: use argv_array in reset_merge
      cherry-pick/revert: add --skip option
      cherry-pick/revert: advise using --skip

SZEDER Gábor (12):
      t3404: modernize here doc style
      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
      pager: add a helper function to clear the last line in the terminal
      t5551: use 'test_i18ngrep' to check translated output
      rebase: fix garbled progress display with '-x'
      progress: use term_clear_line()
      Document that 'git -C ""' works and doesn't change directory
      ci: don't update Homebrew
      ci: disable Homebrew's auto cleanup
      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
      travis-ci: build with GCC 4.8 as well
      Documentation/git-fsck.txt: include fsck.* config variables

Simon Williams (1):
      git-p4: allow unshelving of branched files

Stephen Boyd (2):
      format-patch: inform user that patch-id generation is unstable
      format-patch: make --base patch-id output stable

Steven Roberts (1):
      gpg-interface: do not scan past the end of buffer

Taylor Blau (1):
      ref-filter.c: find disjoint pattern prefixes

Thomas Gummerer (16):
      stash: fix show referencing stash index
      apply: replace marc.info link with public-inbox
      apply: only pass required data to skip_tree_prefix
      apply: only pass required data to git_header_name
      apply: only pass required data to check_header_line
      apply: only pass required data to find_name_*
      apply: only pass required data to gitdiff_* functions
      apply: make parse_git_diff_header public
      range-diff: fix function parameter indentation
      range-diff: split lines manually
      range-diff: don't remove funcname from inner diff
      range-diff: suppress line count in outer diff
      range-diff: add section header instead of diff header
      range-diff: add filename to inner diff
      range-diff: add headers to the outer hunk header
      stash: fix handling removed files with --keep-index

Tigran Mkrtchyan (1):
      tag: add tag.gpgSign config option to force all tags be GPG-signed

Trần Ngọc Quân (2):
      l10n: vi.po (4676t): Updated Vietnamese translation
      l10n: vi(4674t): Updated translation for Vietnamese

Varun Naik (1):
      read-cache.c: do not die if mmap fails

Vishal Verma (1):
      merge: refuse --commit with --squash

William Chargin (1):
      restore: fix typo in docs

Xin Li (1):
      clone: respect user supplied origin name when setting up partial clone

brian m. carlson (10):
      t: add helper to convert object IDs to paths
      t1410: make hash size independent
      t1450: make hash size independent
      t5000: make hash independent
      t6030: make test work with SHA-256
      t0027: make hash size independent
      t0090: make test pass with SHA-256
      t1007: remove SHA1 prerequisites
      t1710: make hash independent
      t2203: avoid hard-coded object ID values

Ævar Arnfjörð Bjarmason (21):
      send-email: move the read_config() function above getopts
      send-email: rename the @bcclist variable for consistency
      send-email: do defaults -> config -> getopt in that order
      tests: add a special setup where prerequisites fail
      Makefile: remove the NO_R_TO_GCC_LINKER flag
      send-email: remove cargo-culted multi-patch pattern in tests
      send-email: fix broken transferEncoding tests
      send-email: document --no-[to|cc|bcc]
      hash-object doc: stop mentioning git-cvsimport
      send-email: fix regression in sendemail.identity parsing
      Revert "test-lib: whitelist GIT_TR2_* in the environment"
      config tests: simplify include cycle test
      env--helper: new undocumented builtin wrapping git_env_*()
      config.c: refactor die_bad_number() to not call gettext() early
      t6040 test: stop using global "script" variable
      tests: make GIT_TEST_GETTEXT_POISON a boolean
      tests README: re-flow a previously changed paragraph
      tests: replace test_tristate with "git env--helper"
      tests: make GIT_TEST_FAIL_PREREQS a boolean
      tests: mark two failing tests under FAIL_PREREQS
      clone: test for our behavior on odd objects/* content


^ permalink raw reply	[relevance 4%]

* Re: [GIT PULL] l10n updates for 2.23.0 round 2
  2019-08-16  9:16  5% [GIT PULL] l10n updates for 2.23.0 round 2 Jiang Xin
@ 2019-08-16 20:06  0% ` Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-08-16 20:06 UTC (permalink / raw)
  To: Jiang Xin
  Cc: Git List, Alessandro Menti, Alexander Shopov, Carmine Zaccagnino,
	Christopher Díaz, Christopher Diaz Riveros,
	Dimitriy Ryazantcev, Gwan-gyeong Mun, Jean-Noël Avila,
	Jimmy Angelakos, Jordi Mas, Matthias Ruester, Peter Krefting,
	Philipp Weißmann, Trần Ngọc Quân,
	Vasco Almeida

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

> Hi Junio,
>
> Please pull the following l10n updates for Git 2.23.0.
>
> The following changes since commit 2e27de94d485a6da0c8e264c165e55100f1a13a8:
>
>   Git 2.23-rc2 (2019-08-09 10:15:39 -0700)
>
> are available in the Git repository at:
>
>   git://github.com/git-l10n/git-po tags/l10n-2.23.0-rnd2
>
> for you to fetch changes up to a6cd2cc485b9ba73934a059245aa9de7e68a2d4c:
>
>   l10n: zh_CN: for git v2.23.0 l10n round 1~2 (2019-08-16 16:59:17 +0800)

Thanks, pulled.

^ permalink raw reply	[relevance 0%]

* [GIT PULL] l10n updates for 2.23.0 round 2
@ 2019-08-16  9:16  5% Jiang Xin
  2019-08-16 20:06  0% ` Junio C Hamano
  0 siblings, 1 reply; 42+ results
From: Jiang Xin @ 2019-08-16  9:16 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Jiang Xin, Git List, Alessandro Menti, Alexander Shopov,
	Carmine Zaccagnino, Christopher Díaz,
	Christopher Diaz Riveros, Dimitriy Ryazantcev, Gwan-gyeong Mun,
	Jean-Noël Avila, Jimmy Angelakos, Jordi Mas,
	Matthias Ruester, Peter Krefting, Philipp Weißmann,
	Trần Ngọc Quân, Vasco Almeida

Hi Junio,

Please pull the following l10n updates for Git 2.23.0.

The following changes since commit 2e27de94d485a6da0c8e264c165e55100f1a13a8:

  Git 2.23-rc2 (2019-08-09 10:15:39 -0700)

are available in the Git repository at:

  git://github.com/git-l10n/git-po tags/l10n-2.23.0-rnd2

for you to fetch changes up to a6cd2cc485b9ba73934a059245aa9de7e68a2d4c:

  l10n: zh_CN: for git v2.23.0 l10n round 1~2 (2019-08-16 16:59:17 +0800)

----------------------------------------------------------------
l10n-2.23.0-rnd2

----------------------------------------------------------------
Alessandro Menti (3):
      l10n: it.po: update the Italian translation
      l10n: it.po: update the Italian translation for v2.23.0
      l10n: it.po: update the Italian localization for v2.23.0 round 2

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

Carmine Zaccagnino (1):
      l10n: it.po: remove an extra space

Christopher Díaz Riveros (1):
      l10n: es: 2.23.0 round 2

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Jean-Noël Avila (1):
      l10n: fr v2.23.0 round 2

Jiang Xin (11):
      Merge branch 'master' of https://github.com/Softcatala/git-po
      Merge tag 'v2.23.0-rc0' of git://git.kernel.org/pub/scm/git/git
      l10n: git.pot: v2.23.0 round 1 (130 new, 35 removed)
      Merge branch 'update-italian-translation' of github.com:AlessandroMenti/git-po
      Merge branch 'master' of https://github.com/Softcatala/git-po
      Merge tag 'v2.23.0-rc2' of git://git.kernel.org/pub/scm/git/git
      l10n: git.pot: v2.23.0 round 2 (4 new, 6 removed)
      Merge branch 'next' of https://github.com/ChrisADR/git-po
      Merge branch 'update-italian-translation' of github.com:AlessandroMenti/git-po
      Merge branch 'master' of https://github.com/vnwildman/git
      l10n: zh_CN: for git v2.23.0 l10n round 1~2

Jordi Mas (2):
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Matthias Rüster (1):
      l10n: de.po: Update German translation

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

Philipp Weißmann (1):
      l10n: de.po: Fix typo in German translation

Trần Ngọc Quân (2):
      l10n: vi.po (4676t): Updated Vietnamese translation
      l10n: vi(4674t): Updated translation for Vietnamese

 po/bg.po    |  6418 ++++++++--------
 po/ca.po    | 11579 +++++++++++++++++------------
 po/de.po    |  6445 ++++++++--------
 po/es.po    |  6628 +++++++++--------
 po/fr.po    |  6333 ++++++++--------
 po/git.pot  |  6200 ++++++++--------
 po/it.po    |  8426 +++++++++++----------
 po/ru.po    | 23280 +++++++++++++++++++++++++++++++++-------------------------
 po/sv.po    |  6565 +++++++++--------
 po/vi.po    |  6847 +++++++++--------
 po/zh_CN.po |  6323 ++++++++--------
 11 files changed, 52890 insertions(+), 42154 deletions(-)

--
Jiang Xin

^ permalink raw reply	[relevance 5%]

* Git for Windows v2.23.0-rc2, was Re: [ANNOUNCE] Git v2.23.0-rc2
  2019-08-09 19:29  3% [ANNOUNCE] Git v2.23.0-rc2 Junio C Hamano
  2019-08-09 21:20  0% ` Bhaskar Chowdhury
@ 2019-08-09 21:31  0% ` Johannes Schindelin
  1 sibling, 0 replies; 42+ results
From: Johannes Schindelin @ 2019-08-09 21:31 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git-for-windows, git, git-packagers

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

Team,

On Fri, 9 Aug 2019, Junio C Hamano wrote:

> A release candidate Git v2.23.0-rc2 is now available for testing
> at the usual places.  It is comprised of 483 non-merge commits
> since v2.22.0, contributed by 67 people, 24 of which are new faces.
>
> The tarballs are found at:
>
>     https://www.kernel.org/pub/software/scm/git/testing/
>
> The following public repositories all have a copy of the
> 'v2.23.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

The corresponding Git for Windows v2.23.0-rc2 can be found here:

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

Please test as much as you can.

Thanks!
Johannes

>
> New contributors whose contributions weren't in v2.22.0 are as follows.
> Welcome to the Git development community!
>
>   Ariadne Conill, Barret Rhoden, Ben Avison, Daniel Ferreira,
>   Doug Ilijev, Dr. Adam Nielsen, Jakub Wilk, John Lin, Mark
>   Rushakoff, Matheus Tavares, Mazo, Andrey, Michael Osipov,
>   Michael Platings, Miguel Ojeda, Mike Mueller, Morian Sonnet,
>   Quentin Nerden, Robert Morgan, Simon Williams, Steven Roberts,
>   Tigran Mkrtchyan, Varun Naik, Vishal Verma, and Xin Li.
>
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
>
>   Ævar Arnfjörð Bjarmason, Beat Bolli, Boxuan Li, brian
>   m. carlson, Carlo Marcelo Arenas Belón, Cesar Eduardo Barros,
>   Chris Mayo, Christian Couder, Denton Liu, Derrick Stolee,
>   Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
>   Emily Shaffer, Eric Wong, Felipe Contreras, Jean-Noël Avila,
>   Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
>   Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
>   Karsten Blees, Marc-André Lureau, Martin Ågren, Matthew DeVore,
>   Mike Hommey, Nguyễn Thái Ngọc Duy, Nickolai Belakovski,
>   Paolo Bonzini, Philip Oakley, Phillip Wood, Ramsay Jones,
>   René Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor,
>   Taylor Blau, Thomas Gummerer, and William Chargin.
>
> ----------------------------------------------------------------
>
> Git 2.23 Release Notes (draft)
> ==============================
>
> Updates since v2.22
> -------------------
>
> Backward compatibility note
>
>  * 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".
>
>  * The "git log" command by default behaves as if the --mailmap option
>    was given.
>
>
> UI, Workflows & Features
>
>  * The "git fast-export/import" pair has been taught to handle commits
>    with log messages in encoding other than UTF-8 better.
>
>  * 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.
>
>  * "git merge" learned "--quit" option that cleans up the in-progress
>    merge while leaving the working tree and the index still in a mess.
>
>  * "git format-patch" learns a configuration to set the default for
>    its --notes=<ref> option.
>
>  * The code to show args with potential typo that cannot be
>    interpreted as a commit-ish has been improved.
>
>  * "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.
>
>  * 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.
>
>  * "git help git" was hard to discover (well, at least for some
>    people).
>
>  * The pattern "git diff/grep" use to extract funcname and words
>    boundary for Rust has been added.
>
>  * "git status" can be told a non-standard default value for the
>    "--[no-]ahead-behind" option with a new configuration variable
>    status.aheadBehind.
>
>  * "git fetch" and "git pull" reports when a fetch results in
>    non-fast-forward updates to let the user notice unusual situation.
>    The commands learned "--no-show-forced-updates" option to disable
>    this safety feature.
>
>  * 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.
>
>  * "git branch --list" learned to always output the detached HEAD as
>    the first item (when the HEAD is detached, of course), regardless
>    of the locale.
>
>  * The conditional inclusion mechanism learned to base the choice on
>    the branch the HEAD currently is on.
>
>  * "git rev-list --objects" learned the "--no-object-names" option to
>    squelch the path to the object that is used as a grouping hint for
>    pack-objects.
>
>  * A new tag.gpgSign configuration variable turns "git tag -a" into
>    "git tag -s".
>
>  * "git multi-pack-index" learned expire and repack subcommands.
>
>  * "git blame" learned to "ignore" commits in the history, whose
>    effects (as well as their presence) get ignored.
>
>  * "git cherry-pick/revert" learned a new "--skip" action.
>
>  * The tips of refs from the alternate object store can be used as
>    starting point for reachability computation now.
>
>  * Extra blank lines in "git status" output have been reduced.
>
>  * The commits in a repository can be described by multiple
>    commit-graph files now, which allows the commit-graph files to be
>    updated incrementally.
>
>  * "git range-diff" output has been tweaked for easier identification
>    of which part of what file the patch shown is about.
>
>
> Performance, Internal Implementation, Development Support etc.
>
>  * Update supporting parts of "git rebase" to remove code that should
>    no longer be used.
>
>  * Developer support to emulate unsatisfied prerequisites in tests to
>    ensure that the remainder of the tests still succeeds when tests
>    with prerequisites are skipped.
>
>  * "git update-server-info" learned not to rewrite the file with the
>    same contents.
>
>  * 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"
>
>  * Prepare use of reachability index in topological walker that works
>    on a range (A..B).
>
>  * A new tutorial targeting specifically aspiring git-core
>    developers has been added.
>
>  * Auto-detect how to tell HP-UX aCC where to use dynamically linked
>    libraries from at runtime.
>
>  * "git mergetool" and its tests now spawn fewer subprocesses.
>
>  * Dev support update to help tracing out tests.
>
>  * Support to build with MSVC has been updated.
>
>  * "git fetch" that grabs from a group of remotes learned to run the
>    auto-gc only once at the very end.
>
>  * A handful of Windows build patches have been upstreamed.
>
>  * The code to read state files used by the sequencer machinery for
>    "git status" has been made more robust against a corrupt or stale
>    state files.
>
>  * "git for-each-ref" with multiple patterns have been optimized.
>
>  * The tree-walk API learned to pass an in-core repository
>    instance throughout more codepaths.
>
>  * When one step in multi step cherry-pick or revert is reset or
>    committed, the command line prompt script failed to notice the
>    current status, which has been improved.
>
>  * Many GIT_TEST_* environment variables control various aspects of
>    how our tests are run, but a few followed "non-empty is true, empty
>    or unset is false" while others followed the usual "there are a few
>    ways to spell true, like yes, on, etc., and also ways to spell
>    false, like no, off, etc." convention.
>
>  * Adjust the dir-iterator API and apply it to the local clone
>    optimization codepath.
>
>  * We have been trying out a few language features outside c89; the
>    coding guidelines document did not talk about them and instead had
>    a blanket ban against them.
>
>  * A test helper has been introduced to optimize preparation of test
>    repositories with many simple commits, and a handful of test
>    scripts have been updated to use it.
>
>
> Fixes since v2.22
> -----------------
>
>  * 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.
>
>  * "git worktree add" used to fail when another worktree connected to
>    the same repository was corrupt, which has been corrected.
>
>  * The ownership rule for the file descriptor to fast-import remote
>    backend was mixed up, leading to an unrelated file descriptor getting
>    closed, which has been fixed.
>
>  * 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.
>
>  * Code cleanup and futureproof.
>
>  * More parameter validation.
>
>  * "git update-server-info" used to leave stale packfiles in its
>    output, which has been corrected.
>
>  * 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.
>
>  * "git am -i --resolved" segfaulted after trying to see a commit as
>    if it were a tree, which has been corrected.
>
>  * "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.
>
>  * "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.
>
>  * The data collected by fsmonitor was not properly written back to
>    the on-disk index file, breaking t7519 tests occasionally, which
>    has been corrected.
>
>  * Update to Unicode 12.1 width table.
>
>  * 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.
>
>  * "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.
>
>  * 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.
>
>  * "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.
>
>  * 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.
>
>  * The description about slashes in gitignore patterns (used to
>    indicate things like "anchored to this level only" and "only
>    matches directories") has been revamped.
>
>  * The URL decoding code has been updated to avoid going past the end
>    of the string while parsing %-<hex>-<hex> sequence.
>
>  * The list of for-each like macros used by clang-format has been
>    updated.
>
>  * "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.
>    (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).
>
>  * Code restructuring during 2.20 period broke fetching tags via
>    "import" based transports.
>
>  * 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.
>
>  * "git checkout -p" needs to selectively apply a patch in reverse,
>    which did not work well.
>
>  * Code clean-up to avoid signed integer wraparounds during binary search.
>
>  * "git interpret-trailers" always treated '#' as the comment
>    character, regardless of core.commentChar setting, which has been
>    corrected.
>
>  * "git stash show 23" used to work, but no more after getting
>    rewritten in C; this regression has been corrected.
>
>  * "git rebase --abort" used to leave refs/rewritten/ when concluding
>    "git rebase -r", which has been corrected.
>
>  * 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.
>
>  * The code to parse scaled numbers out of configuration files has
>    been made more robust and also easier to follow.
>
>  * The codepath to compute delta islands used to spew progress output
>    without giving the callers any way to squelch it, which has been
>    fixed.
>
>  * Protocol capabilities that go over wire should never be translated,
>    but it was incorrectly marked for translation, which has been
>    corrected.  The output of protocol capabilities for debugging has
>    been tweaked a bit.
>
>  * Use "Erase in Line" CSI sequence that is already used in the editor
>    support to clear cruft in the progress output.
>
>  * "git submodule foreach" did not protect command line options passed
>    to the command to be run in each submodule correctly, when the
>    "--recursive" option was in use.
>
>  * The configuration variable rebase.rescheduleFailedExec should be
>    effective only while running an interactive rebase and should not
>    affect anything when running a non-interactive one, which was not
>    the case.  This has been corrected.
>
>  * The "git clone" documentation refers to command line options in its
>    description in the short form; they have been replaced with long
>    forms to make them more recognisable.
>
>  * Generation of pack bitmaps are now disabled when .keep files exist,
>    as these are mutually exclusive features.
>    (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).
>
>  * "git rm" to resolve a conflicted path leaked an internal message
>    "needs merge" before actually removing the path, which was
>    confusing.  This has been corrected.
>
>  * "git stash --keep-index" did not work correctly on paths that have
>    been removed, which has been fixed.
>    (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).
>
>  * Window 7 update ;-)
>
>  * A codepath that reads from GPG for signed object verification read
>    past the end of allocated buffer, which has been fixed.
>
>  * "git clean" silently skipped a path when it cannot lstat() it; now
>    it gives a warning.
>
>  * "git push --atomic" that goes over the transport-helper (namely,
>    the smart http transport) failed to prevent refs to be pushed when
>    it can locally tell that one of the ref update will fail without
>    having to consult the other end, which has been corrected.
>
>  * The internal diff machinery can be made to read out of bounds while
>    looking for --function-context line in a corner case, which has been
>    corrected.
>    (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).
>
>  * Other code cleanup, docfix, build fix, etc.
>    (merge fbec05c210 cc/test-oidmap later to maint).
>    (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
>    (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
>    (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).
>
> ----------------------------------------------------------------
>
> Changes since v2.22.0 are as follows:
>
> Ariadne Conill (3):
>       log: add warning for unspecified log.mailmap setting
>       documentation: mention --no-use-mailmap and log.mailmap false setting
>       tests: defang pager tests by explicitly disabling the log.mailmap warning
>
> Barret Rhoden (8):
>       fsck: rename and touch up init_skiplist()
>       Move oidset_parse_file() to oidset.c
>       blame: use a helper function in blame_chunk()
>       blame: add the ability to ignore commits and their changes
>       blame: add config options for the output of ignored or unblamable lines
>       blame: optionally track line fingerprints during fill_blame_origin()
>       blame: use the fingerprint heuristic to match ignored lines
>       blame: add a test to cover blame_coalesce()
>
> Beat Bolli (2):
>       unicode: update the width tables to Unicode 12.1
>       grep: print the pcre2_jit_on value
>
> Ben Avison (1):
>       clone: add `--remote-submodules` flag
>
> Boxuan Li (2):
>       userdiff: add Octave
>       userdiff: fix grammar and style issues
>
> Carlo Marcelo Arenas Belón (6):
>       fsmonitor: avoid signed integer overflow / infinite loop
>       wrapper: avoid undefined behaviour in macOS
>       trace2: correct typo in technical documentation
>       xdiff: drop system includes in xutils.c
>       xdiff: remove duplicate headers from xhistogram.c
>       xdiff: remove duplicate headers from xpatience.c
>
> Cesar Eduardo Barros (1):
>       mingw: embed a manifest to trick UAC into Doing The Right Thing
>
> Chris Mayo (1):
>       send-email: update documentation of required Perl modules
>
> Christian Couder (7):
>       t/helper: add test-oidmap.c
>       t: add t0016-oidmap.sh
>       oidmap: use sha1hash() instead of static hash() function
>       test-hashmap: remove 'hash' command
>       doc: improve usage string in MyFirstContribution
>       test-oidmap: remove 'add' subcommand
>       t0016: add 'remove' subcommand test
>
> Daniel Ferreira (1):
>       dir-iterator: add tests for dir-iterator API
>
> Denton Liu (5):
>       git-format-patch.txt: document --no-notes option
>       format-patch: teach format.notes config option
>       config: learn the "onbranch:" includeIf condition
>       config/alias.txt: change " and ' to `
>       config/alias.txt: document alias accepting non-command first word
>
> Derrick Stolee (51):
>       commit-graph: fix the_repository reference
>       revision: use generation for A..B --topo-order queries
>       revision: keep topo-walk free of unintersting commits
>       sha1-file: split OBJECT_INFO_FOR_PREFETCH
>       repack: refactor pack deletion for future use
>       Docs: rearrange subcommands for multi-pack-index
>       multi-pack-index: prepare for 'expire' subcommand
>       midx: simplify computation of pack name lengths
>       midx: refactor permutation logic and pack sorting
>       multi-pack-index: implement 'expire' subcommand
>       multi-pack-index: prepare 'repack' subcommand
>       midx: implement midx_repack()
>       multi-pack-index: test expire while adding packs
>       midx: add test that 'expire' respects .keep files
>       t5319-multi-pack-index.sh: test batch size zero
>       commit-graph: return with errors during write
>       commit-graph: collapse parameters into flags
>       commit-graph: remove Future Work section
>       commit-graph: create write_commit_graph_context
>       commit-graph: extract fill_oids_from_packs()
>       commit-graph: extract fill_oids_from_commit_hex()
>       commit-graph: extract fill_oids_from_all_packs()
>       commit-graph: extract count_distinct_commits()
>       commit-graph: extract copy_oids_to_commits()
>       commit-graph: extract write_commit_graph_file()
>       commit-graph: use raw_object_store when closing
>       packfile: close commit-graph in close_all_packs
>       packfile: rename close_all_packs to close_object_store
>       commit-graph: document commit-graph chains
>       commit-graph: prepare for commit-graph chains
>       commit-graph: rename commit_compare to oid_compare
>       commit-graph: load commit-graph chains
>       commit-graph: add base graphs chunk
>       commit-graph: rearrange chunk count logic
>       commit-graph: write commit-graph chains
>       commit-graph: add --split option to builtin
>       commit-graph: merge commit-graph chains
>       commit-graph: allow cross-alternate chains
>       commit-graph: expire commit-graph files
>       commit-graph: create options for split files
>       commit-graph: verify chains with --shallow mode
>       commit-graph: clean up chains after flattened write
>       commit-graph: test octopus merges with --split
>       commit-graph: test --split across alternate without --split
>       commit-graph: normalize commit-graph filenames
>       commit-graph: test verify across alternates
>       fetch: add --[no-]show-forced-updates argument
>       fetch: warn about forced updates in branch listing
>       pull: add --[no-]show-forced-updates passthrough
>       t5319: use 'test-tool path-utils' instead of 'ls -l'
>       commit-graph: fix bug around octopus merges
>
> Dimitriy Ryazantcev (1):
>       l10n: localizable upload progress messages
>
> Doug Ilijev (1):
>       README: fix rendering of text in angle brackets
>
> Dr. Adam Nielsen (1):
>       gitignore.txt: make slash-rules more readable
>
> Edmundo Carmona Antoranz (1):
>       builtin/merge.c - cleanup of code in for-cycle that tests strategies
>
> Elijah Newren (6):
>       t9350: fix encoding test to actually test reencoding
>       fast-import: support 'encoding' commit header
>       fast-export: avoid stripping encoding header if we cannot reencode
>       fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
>       fast-export: do automatic reencoding of commit messages only if requested
>       merge-recursive: avoid directory rename detection in recursive case
>
> Emily Shaffer (7):
>       documentation: add tutorial for first contribution
>       documentation: add anchors to MyFirstContribution
>       grep: fail if call could output and name is null
>       doc: hint about GIT_DEBUGGER in CodingGuidelines
>       doc: add some nit fixes to MyFirstContribution
>       rev-list: teach --no-object-names to enable piping
>       transport-helper: enforce atomic in push_refs_with_push
>
> Eric Wong (3):
>       update-server-info: avoid needless overwrites
>       server-info: do not list unlinked packs
>       repack: disable bitmaps-by-default if .keep files exist
>
> Felipe Contreras (5):
>       t5801 (remote-helpers): cleanup refspec stuff
>       t5801 (remote-helpers): add test to fetch tags
>       fetch: trivial cleanup
>       fetch: make the code more understandable
>       fetch: fix regression with transport helpers
>
> Jakub Wilk (1):
>       doc: don't use git.kernel.org as example gitweb URL
>
> Jean-Noël Avila (1):
>       l10n: reformat some localized strings for v2.23.0
>
> Jeff Hostetler (13):
>       cache-tree/blame: avoid reusing the DEBUG constant
>       msvc: mark a variable as non-const
>       msvc: do not re-declare the timespec struct
>       msvc: define ftello()
>       msvc: fix detect_msys_tty()
>       msvc: update Makefile to allow for spaces in the compiler path
>       status: add status.aheadbehind setting
>       status: warn when a/b calculation takes too long
>       status: ignore status.aheadbehind in porcelain formats
>       msvc: support building Git using MS Visual C++
>       msvc: add a compile-time flag to allow detailed heap debugging
>       msvc: do not pretend to support all signals
>       msvc: ignore .dll and incremental compile output
>
> Jeff King (57):
>       cmd_{read,write}_tree: rename "unused" variable that is used
>       builtin: consistently pass cmd_* prefix to parse_options
>       submodule: drop unused prefix parameter from some functions
>       clone: drop dest parameter from copy_alternates()
>       read-cache: drop unused parameter from threaded load
>       wt-status: drop unused status parameter
>       mktree: drop unused length parameter
>       name-rev: drop unused parameters from is_better_name()
>       pack-objects: drop unused rev_info parameters
>       receive-pack: drop unused "commands" from prepare_shallow_update()
>       remove_all_fetch_refspecs(): drop unused "remote" parameter
>       rev-list: drop unused void pointer from finish_commit()
>       show-branch: drop unused parameter from show_independent()
>       verify-commit: simplify parameters to run_gpg_verify()
>       help_unknown_ref(): duplicate collected refnames
>       help_unknown_ref(): check for refname ambiguity
>       upload-pack: strip namespace from symref data
>       am: simplify prompt response handling
>       am: read interactive input from stdin
>       am: drop tty requirement for --interactive
>       am: fix --interactive HEAD tree resolution
>       interpret-trailers: load default config
>       verify-tag: drop signal.h include
>       wt-status.h: drop stdio.h include
>       describe: fix accidental oid/hash type-punning
>       upload-pack: rename a "sha1" variable to "oid"
>       pack-bitmap-write: convert some helpers to use object_id
>       pack-objects: convert packlist_find() to use object_id
>       pack-objects: convert locate_object_entry_hash() to object_id
>       object: convert lookup_unknown_object() to use object_id
>       object: convert lookup_object() to use object_id
>       object: convert internal hash_obj() to object_id
>       object: convert create_object() to use object_id
>       khash: drop broken oid_map typedef
>       khash: rename kh_oid_t to kh_oid_set
>       delta-islands: convert island_marks khash to use oids
>       pack-bitmap: convert khash_sha1 maps into kh_oid_map
>       khash: drop sha1-specific map types
>       khash: rename oid helper functions
>       hash.h: move object_id definition from cache.h
>       hashmap: convert sha1hash() to oidhash()
>       delta-islands: respect progress flag
>       blame: drop some unused function parameters
>       object-store.h: move for_each_alternate_ref() from transport.h
>       check_everything_connected: assume alternate ref tips are valid
>       test-lib: introduce test_commit_bulk
>       t5310: increase the number of bitmapped commits
>       t3311: use test_commit_bulk
>       t5702: use test_commit_bulk
>       t5703: use test_commit_bulk
>       t6200: use test_commit_bulk
>       xdiff: clamp function context indices in post-image
>       t: sort output of hashmap iteration
>       t7700: clean up .keep file in bitmap-writing test
>       repack: silence warnings when auto-enabled bitmaps cannot be built
>       repack: simplify handling of auto-bitmaps and .keep files
>       t0000: reword comments for "local" test
>
> Johannes Schindelin (47):
>       Drop unused git-rebase--am.sh
>       t3400: stop referring to the scripted rebase
>       .gitignore: there is no longer a built-in `git-rebase--interactive`
>       sequencer: the `am` and `rebase--interactive` scripts are gone
>       rebase: fold git-rebase--common into the -p backend
>       bisect--helper: verify HEAD could be parsed before continuing
>       fill_stat_cache_info(): prepare for an fsmonitor fix
>       mark_fsmonitor_valid(): mark the index as changed if needed
>       bundle verify: error out if called without an object database
>       poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
>       kwset: allow building with GCC 8
>       winansi: simplify loading the GetCurrentConsoleFontEx() function
>       config: avoid calling `labs()` on too-large data type
>       t3404: fix a typo
>       mingw: fix a typo in the msysGit-specific section
>       Mark .bat files as requiring CR/LF endings
>       t0001 (mingw): do not expect a specific order of stdout/stderr
>       obstack: fix compiler warning
>       mingw: replace mingw_startup() hack
>       msvc: fix dependencies of compat/msvc.c
>       t0001: fix on case-insensitive filesystems
>       msvc: avoid debug assertion windows in Debug Mode
>       mingw: enable stack smashing protector
>       mingw: get pw_name in UTF-8 format
>       mingw: use Unicode functions explicitly
>       rebase --am: ignore rebase.rescheduleFailedExec
>       mingw: fix possible buffer overrun when calling `GetUserNameW()`
>       diff: munmap() file contents before running external diff
>       mingw: support spawning programs containing spaces in their names
>       clean: show an error message when the path is too long
>       rebase: fix white-space
>       git: mark cmd_rebase as requiring a worktree
>       Vcproj.pm: auto-generate GUIDs
>       Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
>       Vcproj.pm: urlencode '<' and '>' when generating VC projects
>       contrib/buildsystems: ignore irrelevant files in Generators/
>       contrib/buildsystems: error out on unknown option
>       contrib/buildsystems: handle libiconv, too
>       contrib/buildsystems: also handle -lexpat
>       contrib/buildsystems: handle options starting with a slash
>       contrib/buildsystems: add a backend for modern Visual Studio versions
>       msvc: add a Makefile target to pre-generate the Visual Studio solution
>       vcxproj: also link-or-copy builtins
>       .gitignore: ignore Visual Studio's temporary/generated files
>       bin-wrappers: append `.exe` to target paths if necessary
>       git: avoid calling aliased builtins via their dashed form
>       config: work around bug with includeif:onbranch and early config
>
> Johannes Sixt (5):
>       userdiff: two simplifications of patterns for rust
>       t7610-mergetool: do not place pipelines headed by `yes` in subshells
>       t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
>       mergetool: dissect strings with shell variable magic instead of `expr`
>       mergetool: use shell variable magic instead of `awk`
>
> John Lin (1):
>       status: remove the empty line after hints
>
> Jonathan Nieder (1):
>       t: decrease nesting in test_oid_to_path
>
> Jonathan Tan (5):
>       t5616: refactor packfile replacement
>       index-pack: prefetch missing REF_DELTA bases
>       t5616: use correct flag to check object is missing
>       t5616: cover case of client having delta base
>       t5551: test usage of chunked encoding explicitly
>
> Josh Steadmon (1):
>       trace2: correct trace2 field name documentation
>
> Junio C Hamano (19):
>       The first batch after 2.22
>       The second batch
>       The third batch
>       The fourth batch
>       The fifth batch
>       transport-helper: avoid var decl in for () loop control
>       rm: resolving by removal is not a warning-worthy event
>       CodingGuidelines: spell out post-C89 rules
>       The sixth batch
>       The seventh batch
>       Flush fixes up to the third batch post 2.22.0
>       Merge fixes made on the 'master' front
>       Git 2.23-rc0
>       test-dir-iterator: do not assume errno values
>       A few more last-minute fixes
>       log: flip the --mailmap default unconditionally
>       log: really flip the --mailmap default
>       Git 2.23-rc1
>       Git 2.23-rc2
>
> Karsten Blees (2):
>       gettext: always use UTF-8 on native Windows
>       mingw: initialize HOME on startup
>
> Marc-André Lureau (1):
>       userdiff: add built-in pattern for rust
>
> Mark Rushakoff (1):
>       doc: typo: s/can not/cannot/ and s/is does/does/
>
> Martin Ågren (3):
>       ref-filter: fix memory leak in `free_array_item()`
>       RelNotes/2.21.1: typofix
>       RelNotes/2.23.0: fix a few typos and other minor issues
>
> Matheus Tavares (8):
>       clone: better handle symlinked files at .git/objects/
>       dir-iterator: use warning_errno when possible
>       dir-iterator: refactor state machine model
>       dir-iterator: add flags parameter to dir_iterator_begin
>       clone: copy hidden paths at local clone
>       clone: extract function from copy_or_link_directory
>       clone: use dir-iterator to avoid explicit dir traversal
>       clone: replace strcmp by fspathcmp
>
> Matthew DeVore (5):
>       list-objects-filter-options: error is localizeable
>       list-objects-filter: correct usage of ALLOC_GROW
>       url: do not read past end of buffer
>       url: do not allow %00 to represent NUL in URLs
>       ref-filter: sort detached HEAD lines firstly
>
> Mazo, Andrey (8):
>       git-p4: detect/prevent infinite loop in gitCommitByP4Change()
>       git-p4: add failing test for "git-p4: match branches case insensitively if configured"
>       git-p4: match branches case insensitively if configured
>       git-p4: don't groom exclude path list on every commit
>       git-p4: add failing test for "don't exclude other files with same prefix"
>       git-p4: don't exclude other files with same prefix
>       git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
>       git-p4: respect excluded paths when detecting branches
>
> Michael Osipov (1):
>       configure: Detect linking style for HP aCC on HP-UX
>
> Michael Platings (2):
>       blame: add a fingerprint heuristic to match ignored lines
>       t8014: remove unnecessary braces
>
> Miguel Ojeda (1):
>       clang-format: use git grep to generate the ForEachMacros list
>
> Mike Hommey (2):
>       dup() the input fd for fast-import used for remote helpers
>       Use xmmap_gently instead of xmmap in use_pack
>
> Mike Mueller (1):
>       p4 unshelve: fix "Not a valid object name HEAD0" on Windows
>
> Morian Sonnet (1):
>       submodule foreach: fix recursion of options
>
> Nguyễn Thái Ngọc Duy (63):
>       git-checkout.txt: spell out --no-option
>       git-checkout.txt: fix one syntax line
>       doc: document --overwrite-ignore
>       git-checkout.txt: fix monospace typeset
>       t: rename t2014-switch.sh to t2014-checkout-switch.sh
>       checkout: advice how to get out of detached HEAD mode
>       checkout: inform the user when removing branch state
>       checkout: keep most #include sorted
>       checkout: factor out some code in parse_branchname_arg()
>       checkout: make "opts" in cmd_checkout() a pointer
>       checkout: move 'confict_style' and 'dwim_..' to checkout_opts
>       checkout: split options[] array in three pieces
>       checkout: split part of it to new command 'switch'
>       switch: better names for -b and -B
>       switch: add --discard-changes
>       switch: remove -l
>       switch: stop accepting pathspec
>       switch: reject "do nothing" case
>       switch: only allow explicit detached HEAD
>       switch: add short option for --detach
>       switch: implicit dwim, use --no-guess to disable it
>       switch: no worktree status unless real branch switch happens
>       switch: reject if some operation is in progress
>       switch: make --orphan switch to an empty tree
>       t: add tests for switch
>       completion: support switch
>       doc: promote "git switch"
>       checkout: split part of it to new command 'restore'
>       restore: take tree-ish from --source option instead
>       restore: make pathspec mandatory
>       restore: disable overlay mode by default
>       checkout: factor out worktree checkout code
>       restore: add --worktree and --staged
>       restore: reject invalid combinations with --staged
>       restore: default to --source=HEAD when only --staged is specified
>       restore: replace --force with --ignore-unmerged
>       restore: support --patch
>       t: add tests for restore
>       completion: support restore
>       user-manual.txt: prefer 'merge --abort' over 'reset --hard'
>       doc: promote "git restore"
>       help: move git-diff and git-reset to different groups
>       Declare both git-switch and git-restore experimental
>       merge: remove drop_save() in favor of remove_merge_branch_state()
>       init: make --template path relative to $CWD
>       worktree add: sanitize worktree names
>       worktree add: be tolerant of corrupt worktrees
>       merge: add --quit
>       completion: do not cache if --git-completion-helper fails
>       fetch: only run 'gc' once when fetching multiple remotes
>       t2027: use test_must_be_empty
>       switch: allow to switch in the middle of bisect
>       completion: disable dwim on "git switch -d"
>       fetch-pack: move capability names out of i18n strings
>       fetch-pack: print all relevant supported capabilities with -v -v
>       fetch-pack: print server version at the top in -v -v
>       sha1-file.c: remove the_repo from read_object_with_reference()
>       tree-walk.c: remove the_repo from fill_tree_descriptor()
>       tree-walk.c: remove the_repo from get_tree_entry()
>       tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
>       match-trees.c: remove the_repo from shift_tree*()
>       Use the right 'struct repository' instead of the_repository
>       t7814: do not generate same commits in different repos
>
> Nickolai Belakovski (3):
>       ref-filter: add worktreepath atom
>       branch: update output to include worktree info
>       branch: add worktree info on verbose output
>
> Paolo Bonzini (2):
>       request-pull: quote regex metacharacters in local ref
>       request-pull: warn if the remote object is not the same as the local one
>
> Philip Oakley (15):
>       git.c: show usage for accessing the git(1) help page
>       Doc: git.txt: remove backticks from link and add git-scm.com/docs
>       doc branch: provide examples for listing remote tracking branches
>       msvc: include sigset_t definition
>       msvc: define O_ACCMODE
>       msvc: add pragmas for common warnings
>       Vcproj.pm: list git.exe first to be startup project
>       contrib/buildsystems: ignore invalidcontinue.obj
>       contrib/buildsystems: fix misleading error message
>       contrib/buildsystems: handle quoted spaces in filenames
>       contrib/buildsystems: ignore gettext stuff
>       contrib/buildsystems: redirect errors of the dry run into a log file
>       contrib/buildsystems: optionally capture the dry-run in a file
>       contrib/buildsystems: handle the curl library option
>       .gitignore: touch up the entries regarding Visual Studio
>
> Phillip Wood (12):
>       rebase: fix a memory leak
>       rebase: warn if state directory cannot be removed
>       sequencer: return errors from sequencer_remove_state()
>       rebase --abort/--quit: cleanup refs/rewritten
>       rebase -r: always reword merge -c
>       add -p: fix checkout -p with pathological context
>       show --continue/skip etc. consistently in synopsis
>       sequencer: always allow tab after command name
>       sequencer: factor out todo command name parsing
>       status: do not report errors in sequencer/todo
>       git-prompt: improve cherry-pick/revert detection
>       t3420: remove progress lines before comparing output
>
> Quentin Nerden (2):
>       docs: git-clone: refer to long form of options
>       docs: git-clone: list short form of options first
>
> Ramsay Jones (1):
>       env--helper: mark a file-local symbol as static
>
> René Scharfe (10):
>       cleanup: fix possible overflow errors in binary search, part 2
>       coccinelle: use COPY_ARRAY for copying arrays
>       use COPY_ARRAY for copying arrays
>       config: use unsigned_mult_overflows to check for overflows
>       config: don't multiply in parse_unit_factor()
>       config: simplify parsing of unit factors
>       commit-graph: release strbufs after use
>       dir-iterator: release strbuf after use
>       test-dir-iterator: use path argument directly
>       sha1-file: release strbuf after use
>
> Robert Morgan (1):
>       gpg(docs): use correct --verify syntax
>
> Rohit Ashiwal (5):
>       sequencer: add advice for revert
>       sequencer: rename reset_for_rollback to reset_merge
>       sequencer: use argv_array in reset_merge
>       cherry-pick/revert: add --skip option
>       cherry-pick/revert: advise using --skip
>
> SZEDER Gábor (12):
>       t3404: modernize here doc style
>       t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
>       pager: add a helper function to clear the last line in the terminal
>       t5551: use 'test_i18ngrep' to check translated output
>       rebase: fix garbled progress display with '-x'
>       progress: use term_clear_line()
>       Document that 'git -C ""' works and doesn't change directory
>       ci: don't update Homebrew
>       ci: disable Homebrew's auto cleanup
>       ci/lib.sh: update a comment about installed P4 and Git-LFS versions
>       travis-ci: build with GCC 4.8 as well
>       Documentation/git-fsck.txt: include fsck.* config variables
>
> Simon Williams (1):
>       git-p4: allow unshelving of branched files
>
> Stephen Boyd (2):
>       format-patch: inform user that patch-id generation is unstable
>       format-patch: make --base patch-id output stable
>
> Steven Roberts (1):
>       gpg-interface: do not scan past the end of buffer
>
> Taylor Blau (1):
>       ref-filter.c: find disjoint pattern prefixes
>
> Thomas Gummerer (16):
>       stash: fix show referencing stash index
>       apply: replace marc.info link with public-inbox
>       apply: only pass required data to skip_tree_prefix
>       apply: only pass required data to git_header_name
>       apply: only pass required data to check_header_line
>       apply: only pass required data to find_name_*
>       apply: only pass required data to gitdiff_* functions
>       apply: make parse_git_diff_header public
>       range-diff: fix function parameter indentation
>       range-diff: split lines manually
>       range-diff: don't remove funcname from inner diff
>       range-diff: suppress line count in outer diff
>       range-diff: add section header instead of diff header
>       range-diff: add filename to inner diff
>       range-diff: add headers to the outer hunk header
>       stash: fix handling removed files with --keep-index
>
> Tigran Mkrtchyan (1):
>       tag: add tag.gpgSign config option to force all tags be GPG-signed
>
> Varun Naik (1):
>       read-cache.c: do not die if mmap fails
>
> Vishal Verma (1):
>       merge: refuse --commit with --squash
>
> William Chargin (1):
>       restore: fix typo in docs
>
> Xin Li (1):
>       clone: respect user supplied origin name when setting up partial clone
>
> brian m. carlson (10):
>       t: add helper to convert object IDs to paths
>       t1410: make hash size independent
>       t1450: make hash size independent
>       t5000: make hash independent
>       t6030: make test work with SHA-256
>       t0027: make hash size independent
>       t0090: make test pass with SHA-256
>       t1007: remove SHA1 prerequisites
>       t1710: make hash independent
>       t2203: avoid hard-coded object ID values
>
> Ævar Arnfjörð Bjarmason (21):
>       send-email: move the read_config() function above getopts
>       send-email: rename the @bcclist variable for consistency
>       send-email: do defaults -> config -> getopt in that order
>       tests: add a special setup where prerequisites fail
>       Makefile: remove the NO_R_TO_GCC_LINKER flag
>       send-email: remove cargo-culted multi-patch pattern in tests
>       send-email: fix broken transferEncoding tests
>       send-email: document --no-[to|cc|bcc]
>       hash-object doc: stop mentioning git-cvsimport
>       send-email: fix regression in sendemail.identity parsing
>       Revert "test-lib: whitelist GIT_TR2_* in the environment"
>       config tests: simplify include cycle test
>       env--helper: new undocumented builtin wrapping git_env_*()
>       config.c: refactor die_bad_number() to not call gettext() early
>       t6040 test: stop using global "script" variable
>       tests: make GIT_TEST_GETTEXT_POISON a boolean
>       tests README: re-flow a previously changed paragraph
>       tests: replace test_tristate with "git env--helper"
>       tests: make GIT_TEST_FAIL_PREREQS a boolean
>       tests: mark two failing tests under FAIL_PREREQS
>       clone: test for our behavior on odd objects/* content
>
> --
> 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/xmqqk1bmcf3q.fsf%40gitster-ct.c.googlers.com.
>

^ permalink raw reply	[relevance 0%]

* Re: [ANNOUNCE] Git v2.23.0-rc2
  2019-08-09 19:29  3% [ANNOUNCE] Git v2.23.0-rc2 Junio C Hamano
@ 2019-08-09 21:20  0% ` Bhaskar Chowdhury
  2019-08-09 21:31  0% ` Git for Windows v2.23.0-rc2, was " Johannes Schindelin
  1 sibling, 0 replies; 42+ results
From: Bhaskar Chowdhury @ 2019-08-09 21:20 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Linux Kernel, git-packagers

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


Thanks, Junio! will dig in. 


On 12:29 Fri 09 Aug 2019, Junio C Hamano wrote:
>A release candidate Git v2.23.0-rc2 is now available for testing
>at the usual places.  It is comprised of 483 non-merge commits
>since v2.22.0, contributed by 67 people, 24 of which are new faces.
>
>The tarballs are found at:
>
>    https://www.kernel.org/pub/software/scm/git/testing/
>
>The following public repositories all have a copy of the
>'v2.23.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.22.0 are as follows.
>Welcome to the Git development community!
>
>  Ariadne Conill, Barret Rhoden, Ben Avison, Daniel Ferreira,
>  Doug Ilijev, Dr. Adam Nielsen, Jakub Wilk, John Lin, Mark
>  Rushakoff, Matheus Tavares, Mazo, Andrey, Michael Osipov,
>  Michael Platings, Miguel Ojeda, Mike Mueller, Morian Sonnet,
>  Quentin Nerden, Robert Morgan, Simon Williams, Steven Roberts,
>  Tigran Mkrtchyan, Varun Naik, Vishal Verma, and Xin Li.
>
>Returning contributors who helped this release are as follows.
>Thanks for your continued support.
>
>  Ævar Arnfjörð Bjarmason, Beat Bolli, Boxuan Li, brian
>  m. carlson, Carlo Marcelo Arenas Belón, Cesar Eduardo Barros,
>  Chris Mayo, Christian Couder, Denton Liu, Derrick Stolee,
>  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
>  Emily Shaffer, Eric Wong, Felipe Contreras, Jean-Noël Avila,
>  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
>  Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
>  Karsten Blees, Marc-André Lureau, Martin Ågren, Matthew DeVore,
>  Mike Hommey, Nguyễn Thái Ngọc Duy, Nickolai Belakovski,
>  Paolo Bonzini, Philip Oakley, Phillip Wood, Ramsay Jones,
>  René Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor,
>  Taylor Blau, Thomas Gummerer, and William Chargin.
>
>----------------------------------------------------------------
>
>Git 2.23 Release Notes (draft)
>==============================
>
>Updates since v2.22
>-------------------
>
>Backward compatibility note
>
> * 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".
>
> * The "git log" command by default behaves as if the --mailmap option
>   was given.
>
>
>UI, Workflows & Features
>
> * The "git fast-export/import" pair has been taught to handle commits
>   with log messages in encoding other than UTF-8 better.
>
> * 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.
>
> * "git merge" learned "--quit" option that cleans up the in-progress
>   merge while leaving the working tree and the index still in a mess.
>
> * "git format-patch" learns a configuration to set the default for
>   its --notes=<ref> option.
>
> * The code to show args with potential typo that cannot be
>   interpreted as a commit-ish has been improved.
>
> * "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.
>
> * 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.
>
> * "git help git" was hard to discover (well, at least for some
>   people).
>
> * The pattern "git diff/grep" use to extract funcname and words
>   boundary for Rust has been added.
>
> * "git status" can be told a non-standard default value for the
>   "--[no-]ahead-behind" option with a new configuration variable
>   status.aheadBehind.
>
> * "git fetch" and "git pull" reports when a fetch results in
>   non-fast-forward updates to let the user notice unusual situation.
>   The commands learned "--no-show-forced-updates" option to disable
>   this safety feature.
>
> * 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.
>
> * "git branch --list" learned to always output the detached HEAD as
>   the first item (when the HEAD is detached, of course), regardless
>   of the locale.
>
> * The conditional inclusion mechanism learned to base the choice on
>   the branch the HEAD currently is on.
>
> * "git rev-list --objects" learned the "--no-object-names" option to
>   squelch the path to the object that is used as a grouping hint for
>   pack-objects.
>
> * A new tag.gpgSign configuration variable turns "git tag -a" into
>   "git tag -s".
>
> * "git multi-pack-index" learned expire and repack subcommands.
>
> * "git blame" learned to "ignore" commits in the history, whose
>   effects (as well as their presence) get ignored.
>
> * "git cherry-pick/revert" learned a new "--skip" action.
>
> * The tips of refs from the alternate object store can be used as
>   starting point for reachability computation now.
>
> * Extra blank lines in "git status" output have been reduced.
>
> * The commits in a repository can be described by multiple
>   commit-graph files now, which allows the commit-graph files to be
>   updated incrementally.
>
> * "git range-diff" output has been tweaked for easier identification
>   of which part of what file the patch shown is about.
>
>
>Performance, Internal Implementation, Development Support etc.
>
> * Update supporting parts of "git rebase" to remove code that should
>   no longer be used.
>
> * Developer support to emulate unsatisfied prerequisites in tests to
>   ensure that the remainder of the tests still succeeds when tests
>   with prerequisites are skipped.
>
> * "git update-server-info" learned not to rewrite the file with the
>   same contents.
>
> * 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"
>
> * Prepare use of reachability index in topological walker that works
>   on a range (A..B).
>
> * A new tutorial targeting specifically aspiring git-core
>   developers has been added.
>
> * Auto-detect how to tell HP-UX aCC where to use dynamically linked
>   libraries from at runtime.
>
> * "git mergetool" and its tests now spawn fewer subprocesses.
>
> * Dev support update to help tracing out tests.
>
> * Support to build with MSVC has been updated.
>
> * "git fetch" that grabs from a group of remotes learned to run the
>   auto-gc only once at the very end.
>
> * A handful of Windows build patches have been upstreamed.
>
> * The code to read state files used by the sequencer machinery for
>   "git status" has been made more robust against a corrupt or stale
>   state files.
>
> * "git for-each-ref" with multiple patterns have been optimized.
>
> * The tree-walk API learned to pass an in-core repository
>   instance throughout more codepaths.
>
> * When one step in multi step cherry-pick or revert is reset or
>   committed, the command line prompt script failed to notice the
>   current status, which has been improved.
>
> * Many GIT_TEST_* environment variables control various aspects of
>   how our tests are run, but a few followed "non-empty is true, empty
>   or unset is false" while others followed the usual "there are a few
>   ways to spell true, like yes, on, etc., and also ways to spell
>   false, like no, off, etc." convention.
>
> * Adjust the dir-iterator API and apply it to the local clone
>   optimization codepath.
>
> * We have been trying out a few language features outside c89; the
>   coding guidelines document did not talk about them and instead had
>   a blanket ban against them.
>
> * A test helper has been introduced to optimize preparation of test
>   repositories with many simple commits, and a handful of test
>   scripts have been updated to use it.
>
>
>Fixes since v2.22
>-----------------
>
> * 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.
>
> * "git worktree add" used to fail when another worktree connected to
>   the same repository was corrupt, which has been corrected.
>
> * The ownership rule for the file descriptor to fast-import remote
>   backend was mixed up, leading to an unrelated file descriptor getting
>   closed, which has been fixed.
>
> * 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.
>
> * Code cleanup and futureproof.
>
> * More parameter validation.
>
> * "git update-server-info" used to leave stale packfiles in its
>   output, which has been corrected.
>
> * 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.
>
> * "git am -i --resolved" segfaulted after trying to see a commit as
>   if it were a tree, which has been corrected.
>
> * "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.
>
> * "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.
>
> * The data collected by fsmonitor was not properly written back to
>   the on-disk index file, breaking t7519 tests occasionally, which
>   has been corrected.
>
> * Update to Unicode 12.1 width table.
>
> * 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.
>
> * "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.
>
> * 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.
>
> * "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.
>
> * 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.
>
> * The description about slashes in gitignore patterns (used to
>   indicate things like "anchored to this level only" and "only
>   matches directories") has been revamped.
>
> * The URL decoding code has been updated to avoid going past the end
>   of the string while parsing %-<hex>-<hex> sequence.
>
> * The list of for-each like macros used by clang-format has been
>   updated.
>
> * "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.
>   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).
>
> * Code restructuring during 2.20 period broke fetching tags via
>   "import" based transports.
>
> * 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.
>
> * "git checkout -p" needs to selectively apply a patch in reverse,
>   which did not work well.
>
> * Code clean-up to avoid signed integer wraparounds during binary search.
>
> * "git interpret-trailers" always treated '#' as the comment
>   character, regardless of core.commentChar setting, which has been
>   corrected.
>
> * "git stash show 23" used to work, but no more after getting
>   rewritten in C; this regression has been corrected.
>
> * "git rebase --abort" used to leave refs/rewritten/ when concluding
>   "git rebase -r", which has been corrected.
>
> * 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.
>
> * The code to parse scaled numbers out of configuration files has
>   been made more robust and also easier to follow.
>
> * The codepath to compute delta islands used to spew progress output
>   without giving the callers any way to squelch it, which has been
>   fixed.
>
> * Protocol capabilities that go over wire should never be translated,
>   but it was incorrectly marked for translation, which has been
>   corrected.  The output of protocol capabilities for debugging has
>   been tweaked a bit.
>
> * Use "Erase in Line" CSI sequence that is already used in the editor
>   support to clear cruft in the progress output.
>
> * "git submodule foreach" did not protect command line options passed
>   to the command to be run in each submodule correctly, when the
>   "--recursive" option was in use.
>
> * The configuration variable rebase.rescheduleFailedExec should be
>   effective only while running an interactive rebase and should not
>   affect anything when running a non-interactive one, which was not
>   the case.  This has been corrected.
>
> * The "git clone" documentation refers to command line options in its
>   description in the short form; they have been replaced with long
>   forms to make them more recognisable.
>
> * Generation of pack bitmaps are now disabled when .keep files exist,
>   as these are mutually exclusive features.
>   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).
>
> * "git rm" to resolve a conflicted path leaked an internal message
>   "needs merge" before actually removing the path, which was
>   confusing.  This has been corrected.
>
> * "git stash --keep-index" did not work correctly on paths that have
>   been removed, which has been fixed.
>   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).
>
> * Window 7 update ;-)
>
> * A codepath that reads from GPG for signed object verification read
>   past the end of allocated buffer, which has been fixed.
>
> * "git clean" silently skipped a path when it cannot lstat() it; now
>   it gives a warning.
>
> * "git push --atomic" that goes over the transport-helper (namely,
>   the smart http transport) failed to prevent refs to be pushed when
>   it can locally tell that one of the ref update will fail without
>   having to consult the other end, which has been corrected.
>
> * The internal diff machinery can be made to read out of bounds while
>   looking for --function-context line in a corner case, which has been
>   corrected.
>   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).
>
> * Other code cleanup, docfix, build fix, etc.
>   (merge fbec05c210 cc/test-oidmap later to maint).
>   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
>   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
>   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).
>
>----------------------------------------------------------------
>
>Changes since v2.22.0 are as follows:
>
>Ariadne Conill (3):
>      log: add warning for unspecified log.mailmap setting
>      documentation: mention --no-use-mailmap and log.mailmap false setting
>      tests: defang pager tests by explicitly disabling the log.mailmap warning
>
>Barret Rhoden (8):
>      fsck: rename and touch up init_skiplist()
>      Move oidset_parse_file() to oidset.c
>      blame: use a helper function in blame_chunk()
>      blame: add the ability to ignore commits and their changes
>      blame: add config options for the output of ignored or unblamable lines
>      blame: optionally track line fingerprints during fill_blame_origin()
>      blame: use the fingerprint heuristic to match ignored lines
>      blame: add a test to cover blame_coalesce()
>
>Beat Bolli (2):
>      unicode: update the width tables to Unicode 12.1
>      grep: print the pcre2_jit_on value
>
>Ben Avison (1):
>      clone: add `--remote-submodules` flag
>
>Boxuan Li (2):
>      userdiff: add Octave
>      userdiff: fix grammar and style issues
>
>Carlo Marcelo Arenas Belón (6):
>      fsmonitor: avoid signed integer overflow / infinite loop
>      wrapper: avoid undefined behaviour in macOS
>      trace2: correct typo in technical documentation
>      xdiff: drop system includes in xutils.c
>      xdiff: remove duplicate headers from xhistogram.c
>      xdiff: remove duplicate headers from xpatience.c
>
>Cesar Eduardo Barros (1):
>      mingw: embed a manifest to trick UAC into Doing The Right Thing
>
>Chris Mayo (1):
>      send-email: update documentation of required Perl modules
>
>Christian Couder (7):
>      t/helper: add test-oidmap.c
>      t: add t0016-oidmap.sh
>      oidmap: use sha1hash() instead of static hash() function
>      test-hashmap: remove 'hash' command
>      doc: improve usage string in MyFirstContribution
>      test-oidmap: remove 'add' subcommand
>      t0016: add 'remove' subcommand test
>
>Daniel Ferreira (1):
>      dir-iterator: add tests for dir-iterator API
>
>Denton Liu (5):
>      git-format-patch.txt: document --no-notes option
>      format-patch: teach format.notes config option
>      config: learn the "onbranch:" includeIf condition
>      config/alias.txt: change " and ' to `
>      config/alias.txt: document alias accepting non-command first word
>
>Derrick Stolee (51):
>      commit-graph: fix the_repository reference
>      revision: use generation for A..B --topo-order queries
>      revision: keep topo-walk free of unintersting commits
>      sha1-file: split OBJECT_INFO_FOR_PREFETCH
>      repack: refactor pack deletion for future use
>      Docs: rearrange subcommands for multi-pack-index
>      multi-pack-index: prepare for 'expire' subcommand
>      midx: simplify computation of pack name lengths
>      midx: refactor permutation logic and pack sorting
>      multi-pack-index: implement 'expire' subcommand
>      multi-pack-index: prepare 'repack' subcommand
>      midx: implement midx_repack()
>      multi-pack-index: test expire while adding packs
>      midx: add test that 'expire' respects .keep files
>      t5319-multi-pack-index.sh: test batch size zero
>      commit-graph: return with errors during write
>      commit-graph: collapse parameters into flags
>      commit-graph: remove Future Work section
>      commit-graph: create write_commit_graph_context
>      commit-graph: extract fill_oids_from_packs()
>      commit-graph: extract fill_oids_from_commit_hex()
>      commit-graph: extract fill_oids_from_all_packs()
>      commit-graph: extract count_distinct_commits()
>      commit-graph: extract copy_oids_to_commits()
>      commit-graph: extract write_commit_graph_file()
>      commit-graph: use raw_object_store when closing
>      packfile: close commit-graph in close_all_packs
>      packfile: rename close_all_packs to close_object_store
>      commit-graph: document commit-graph chains
>      commit-graph: prepare for commit-graph chains
>      commit-graph: rename commit_compare to oid_compare
>      commit-graph: load commit-graph chains
>      commit-graph: add base graphs chunk
>      commit-graph: rearrange chunk count logic
>      commit-graph: write commit-graph chains
>      commit-graph: add --split option to builtin
>      commit-graph: merge commit-graph chains
>      commit-graph: allow cross-alternate chains
>      commit-graph: expire commit-graph files
>      commit-graph: create options for split files
>      commit-graph: verify chains with --shallow mode
>      commit-graph: clean up chains after flattened write
>      commit-graph: test octopus merges with --split
>      commit-graph: test --split across alternate without --split
>      commit-graph: normalize commit-graph filenames
>      commit-graph: test verify across alternates
>      fetch: add --[no-]show-forced-updates argument
>      fetch: warn about forced updates in branch listing
>      pull: add --[no-]show-forced-updates passthrough
>      t5319: use 'test-tool path-utils' instead of 'ls -l'
>      commit-graph: fix bug around octopus merges
>
>Dimitriy Ryazantcev (1):
>      l10n: localizable upload progress messages
>
>Doug Ilijev (1):
>      README: fix rendering of text in angle brackets
>
>Dr. Adam Nielsen (1):
>      gitignore.txt: make slash-rules more readable
>
>Edmundo Carmona Antoranz (1):
>      builtin/merge.c - cleanup of code in for-cycle that tests strategies
>
>Elijah Newren (6):
>      t9350: fix encoding test to actually test reencoding
>      fast-import: support 'encoding' commit header
>      fast-export: avoid stripping encoding header if we cannot reencode
>      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
>      fast-export: do automatic reencoding of commit messages only if requested
>      merge-recursive: avoid directory rename detection in recursive case
>
>Emily Shaffer (7):
>      documentation: add tutorial for first contribution
>      documentation: add anchors to MyFirstContribution
>      grep: fail if call could output and name is null
>      doc: hint about GIT_DEBUGGER in CodingGuidelines
>      doc: add some nit fixes to MyFirstContribution
>      rev-list: teach --no-object-names to enable piping
>      transport-helper: enforce atomic in push_refs_with_push
>
>Eric Wong (3):
>      update-server-info: avoid needless overwrites
>      server-info: do not list unlinked packs
>      repack: disable bitmaps-by-default if .keep files exist
>
>Felipe Contreras (5):
>      t5801 (remote-helpers): cleanup refspec stuff
>      t5801 (remote-helpers): add test to fetch tags
>      fetch: trivial cleanup
>      fetch: make the code more understandable
>      fetch: fix regression with transport helpers
>
>Jakub Wilk (1):
>      doc: don't use git.kernel.org as example gitweb URL
>
>Jean-Noël Avila (1):
>      l10n: reformat some localized strings for v2.23.0
>
>Jeff Hostetler (13):
>      cache-tree/blame: avoid reusing the DEBUG constant
>      msvc: mark a variable as non-const
>      msvc: do not re-declare the timespec struct
>      msvc: define ftello()
>      msvc: fix detect_msys_tty()
>      msvc: update Makefile to allow for spaces in the compiler path
>      status: add status.aheadbehind setting
>      status: warn when a/b calculation takes too long
>      status: ignore status.aheadbehind in porcelain formats
>      msvc: support building Git using MS Visual C++
>      msvc: add a compile-time flag to allow detailed heap debugging
>      msvc: do not pretend to support all signals
>      msvc: ignore .dll and incremental compile output
>
>Jeff King (57):
>      cmd_{read,write}_tree: rename "unused" variable that is used
>      builtin: consistently pass cmd_* prefix to parse_options
>      submodule: drop unused prefix parameter from some functions
>      clone: drop dest parameter from copy_alternates()
>      read-cache: drop unused parameter from threaded load
>      wt-status: drop unused status parameter
>      mktree: drop unused length parameter
>      name-rev: drop unused parameters from is_better_name()
>      pack-objects: drop unused rev_info parameters
>      receive-pack: drop unused "commands" from prepare_shallow_update()
>      remove_all_fetch_refspecs(): drop unused "remote" parameter
>      rev-list: drop unused void pointer from finish_commit()
>      show-branch: drop unused parameter from show_independent()
>      verify-commit: simplify parameters to run_gpg_verify()
>      help_unknown_ref(): duplicate collected refnames
>      help_unknown_ref(): check for refname ambiguity
>      upload-pack: strip namespace from symref data
>      am: simplify prompt response handling
>      am: read interactive input from stdin
>      am: drop tty requirement for --interactive
>      am: fix --interactive HEAD tree resolution
>      interpret-trailers: load default config
>      verify-tag: drop signal.h include
>      wt-status.h: drop stdio.h include
>      describe: fix accidental oid/hash type-punning
>      upload-pack: rename a "sha1" variable to "oid"
>      pack-bitmap-write: convert some helpers to use object_id
>      pack-objects: convert packlist_find() to use object_id
>      pack-objects: convert locate_object_entry_hash() to object_id
>      object: convert lookup_unknown_object() to use object_id
>      object: convert lookup_object() to use object_id
>      object: convert internal hash_obj() to object_id
>      object: convert create_object() to use object_id
>      khash: drop broken oid_map typedef
>      khash: rename kh_oid_t to kh_oid_set
>      delta-islands: convert island_marks khash to use oids
>      pack-bitmap: convert khash_sha1 maps into kh_oid_map
>      khash: drop sha1-specific map types
>      khash: rename oid helper functions
>      hash.h: move object_id definition from cache.h
>      hashmap: convert sha1hash() to oidhash()
>      delta-islands: respect progress flag
>      blame: drop some unused function parameters
>      object-store.h: move for_each_alternate_ref() from transport.h
>      check_everything_connected: assume alternate ref tips are valid
>      test-lib: introduce test_commit_bulk
>      t5310: increase the number of bitmapped commits
>      t3311: use test_commit_bulk
>      t5702: use test_commit_bulk
>      t5703: use test_commit_bulk
>      t6200: use test_commit_bulk
>      xdiff: clamp function context indices in post-image
>      t: sort output of hashmap iteration
>      t7700: clean up .keep file in bitmap-writing test
>      repack: silence warnings when auto-enabled bitmaps cannot be built
>      repack: simplify handling of auto-bitmaps and .keep files
>      t0000: reword comments for "local" test
>
>Johannes Schindelin (47):
>      Drop unused git-rebase--am.sh
>      t3400: stop referring to the scripted rebase
>      .gitignore: there is no longer a built-in `git-rebase--interactive`
>      sequencer: the `am` and `rebase--interactive` scripts are gone
>      rebase: fold git-rebase--common into the -p backend
>      bisect--helper: verify HEAD could be parsed before continuing
>      fill_stat_cache_info(): prepare for an fsmonitor fix
>      mark_fsmonitor_valid(): mark the index as changed if needed
>      bundle verify: error out if called without an object database
>      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
>      kwset: allow building with GCC 8
>      winansi: simplify loading the GetCurrentConsoleFontEx() function
>      config: avoid calling `labs()` on too-large data type
>      t3404: fix a typo
>      mingw: fix a typo in the msysGit-specific section
>      Mark .bat files as requiring CR/LF endings
>      t0001 (mingw): do not expect a specific order of stdout/stderr
>      obstack: fix compiler warning
>      mingw: replace mingw_startup() hack
>      msvc: fix dependencies of compat/msvc.c
>      t0001: fix on case-insensitive filesystems
>      msvc: avoid debug assertion windows in Debug Mode
>      mingw: enable stack smashing protector
>      mingw: get pw_name in UTF-8 format
>      mingw: use Unicode functions explicitly
>      rebase --am: ignore rebase.rescheduleFailedExec
>      mingw: fix possible buffer overrun when calling `GetUserNameW()`
>      diff: munmap() file contents before running external diff
>      mingw: support spawning programs containing spaces in their names
>      clean: show an error message when the path is too long
>      rebase: fix white-space
>      git: mark cmd_rebase as requiring a worktree
>      Vcproj.pm: auto-generate GUIDs
>      Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
>      Vcproj.pm: urlencode '<' and '>' when generating VC projects
>      contrib/buildsystems: ignore irrelevant files in Generators/
>      contrib/buildsystems: error out on unknown option
>      contrib/buildsystems: handle libiconv, too
>      contrib/buildsystems: also handle -lexpat
>      contrib/buildsystems: handle options starting with a slash
>      contrib/buildsystems: add a backend for modern Visual Studio versions
>      msvc: add a Makefile target to pre-generate the Visual Studio solution
>      vcxproj: also link-or-copy builtins
>      .gitignore: ignore Visual Studio's temporary/generated files
>      bin-wrappers: append `.exe` to target paths if necessary
>      git: avoid calling aliased builtins via their dashed form
>      config: work around bug with includeif:onbranch and early config
>
>Johannes Sixt (5):
>      userdiff: two simplifications of patterns for rust
>      t7610-mergetool: do not place pipelines headed by `yes` in subshells
>      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
>      mergetool: dissect strings with shell variable magic instead of `expr`
>      mergetool: use shell variable magic instead of `awk`
>
>John Lin (1):
>      status: remove the empty line after hints
>
>Jonathan Nieder (1):
>      t: decrease nesting in test_oid_to_path
>
>Jonathan Tan (5):
>      t5616: refactor packfile replacement
>      index-pack: prefetch missing REF_DELTA bases
>      t5616: use correct flag to check object is missing
>      t5616: cover case of client having delta base
>      t5551: test usage of chunked encoding explicitly
>
>Josh Steadmon (1):
>      trace2: correct trace2 field name documentation
>
>Junio C Hamano (19):
>      The first batch after 2.22
>      The second batch
>      The third batch
>      The fourth batch
>      The fifth batch
>      transport-helper: avoid var decl in for () loop control
>      rm: resolving by removal is not a warning-worthy event
>      CodingGuidelines: spell out post-C89 rules
>      The sixth batch
>      The seventh batch
>      Flush fixes up to the third batch post 2.22.0
>      Merge fixes made on the 'master' front
>      Git 2.23-rc0
>      test-dir-iterator: do not assume errno values
>      A few more last-minute fixes
>      log: flip the --mailmap default unconditionally
>      log: really flip the --mailmap default
>      Git 2.23-rc1
>      Git 2.23-rc2
>
>Karsten Blees (2):
>      gettext: always use UTF-8 on native Windows
>      mingw: initialize HOME on startup
>
>Marc-André Lureau (1):
>      userdiff: add built-in pattern for rust
>
>Mark Rushakoff (1):
>      doc: typo: s/can not/cannot/ and s/is does/does/
>
>Martin Ågren (3):
>      ref-filter: fix memory leak in `free_array_item()`
>      RelNotes/2.21.1: typofix
>      RelNotes/2.23.0: fix a few typos and other minor issues
>
>Matheus Tavares (8):
>      clone: better handle symlinked files at .git/objects/
>      dir-iterator: use warning_errno when possible
>      dir-iterator: refactor state machine model
>      dir-iterator: add flags parameter to dir_iterator_begin
>      clone: copy hidden paths at local clone
>      clone: extract function from copy_or_link_directory
>      clone: use dir-iterator to avoid explicit dir traversal
>      clone: replace strcmp by fspathcmp
>
>Matthew DeVore (5):
>      list-objects-filter-options: error is localizeable
>      list-objects-filter: correct usage of ALLOC_GROW
>      url: do not read past end of buffer
>      url: do not allow %00 to represent NUL in URLs
>      ref-filter: sort detached HEAD lines firstly
>
>Mazo, Andrey (8):
>      git-p4: detect/prevent infinite loop in gitCommitByP4Change()
>      git-p4: add failing test for "git-p4: match branches case insensitively if configured"
>      git-p4: match branches case insensitively if configured
>      git-p4: don't groom exclude path list on every commit
>      git-p4: add failing test for "don't exclude other files with same prefix"
>      git-p4: don't exclude other files with same prefix
>      git-p4: add failing test for "git-p4: respect excluded paths when detecting branches"
>      git-p4: respect excluded paths when detecting branches
>
>Michael Osipov (1):
>      configure: Detect linking style for HP aCC on HP-UX
>
>Michael Platings (2):
>      blame: add a fingerprint heuristic to match ignored lines
>      t8014: remove unnecessary braces
>
>Miguel Ojeda (1):
>      clang-format: use git grep to generate the ForEachMacros list
>
>Mike Hommey (2):
>      dup() the input fd for fast-import used for remote helpers
>      Use xmmap_gently instead of xmmap in use_pack
>
>Mike Mueller (1):
>      p4 unshelve: fix "Not a valid object name HEAD0" on Windows
>
>Morian Sonnet (1):
>      submodule foreach: fix recursion of options
>
>Nguyễn Thái Ngọc Duy (63):
>      git-checkout.txt: spell out --no-option
>      git-checkout.txt: fix one syntax line
>      doc: document --overwrite-ignore
>      git-checkout.txt: fix monospace typeset
>      t: rename t2014-switch.sh to t2014-checkout-switch.sh
>      checkout: advice how to get out of detached HEAD mode
>      checkout: inform the user when removing branch state
>      checkout: keep most #include sorted
>      checkout: factor out some code in parse_branchname_arg()
>      checkout: make "opts" in cmd_checkout() a pointer
>      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
>      checkout: split options[] array in three pieces
>      checkout: split part of it to new command 'switch'
>      switch: better names for -b and -B
>      switch: add --discard-changes
>      switch: remove -l
>      switch: stop accepting pathspec
>      switch: reject "do nothing" case
>      switch: only allow explicit detached HEAD
>      switch: add short option for --detach
>      switch: implicit dwim, use --no-guess to disable it
>      switch: no worktree status unless real branch switch happens
>      switch: reject if some operation is in progress
>      switch: make --orphan switch to an empty tree
>      t: add tests for switch
>      completion: support switch
>      doc: promote "git switch"
>      checkout: split part of it to new command 'restore'
>      restore: take tree-ish from --source option instead
>      restore: make pathspec mandatory
>      restore: disable overlay mode by default
>      checkout: factor out worktree checkout code
>      restore: add --worktree and --staged
>      restore: reject invalid combinations with --staged
>      restore: default to --source=HEAD when only --staged is specified
>      restore: replace --force with --ignore-unmerged
>      restore: support --patch
>      t: add tests for restore
>      completion: support restore
>      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
>      doc: promote "git restore"
>      help: move git-diff and git-reset to different groups
>      Declare both git-switch and git-restore experimental
>      merge: remove drop_save() in favor of remove_merge_branch_state()
>      init: make --template path relative to $CWD
>      worktree add: sanitize worktree names
>      worktree add: be tolerant of corrupt worktrees
>      merge: add --quit
>      completion: do not cache if --git-completion-helper fails
>      fetch: only run 'gc' once when fetching multiple remotes
>      t2027: use test_must_be_empty
>      switch: allow to switch in the middle of bisect
>      completion: disable dwim on "git switch -d"
>      fetch-pack: move capability names out of i18n strings
>      fetch-pack: print all relevant supported capabilities with -v -v
>      fetch-pack: print server version at the top in -v -v
>      sha1-file.c: remove the_repo from read_object_with_reference()
>      tree-walk.c: remove the_repo from fill_tree_descriptor()
>      tree-walk.c: remove the_repo from get_tree_entry()
>      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
>      match-trees.c: remove the_repo from shift_tree*()
>      Use the right 'struct repository' instead of the_repository
>      t7814: do not generate same commits in different repos
>
>Nickolai Belakovski (3):
>      ref-filter: add worktreepath atom
>      branch: update output to include worktree info
>      branch: add worktree info on verbose output
>
>Paolo Bonzini (2):
>      request-pull: quote regex metacharacters in local ref
>      request-pull: warn if the remote object is not the same as the local one
>
>Philip Oakley (15):
>      git.c: show usage for accessing the git(1) help page
>      Doc: git.txt: remove backticks from link and add git-scm.com/docs
>      doc branch: provide examples for listing remote tracking branches
>      msvc: include sigset_t definition
>      msvc: define O_ACCMODE
>      msvc: add pragmas for common warnings
>      Vcproj.pm: list git.exe first to be startup project
>      contrib/buildsystems: ignore invalidcontinue.obj
>      contrib/buildsystems: fix misleading error message
>      contrib/buildsystems: handle quoted spaces in filenames
>      contrib/buildsystems: ignore gettext stuff
>      contrib/buildsystems: redirect errors of the dry run into a log file
>      contrib/buildsystems: optionally capture the dry-run in a file
>      contrib/buildsystems: handle the curl library option
>      .gitignore: touch up the entries regarding Visual Studio
>
>Phillip Wood (12):
>      rebase: fix a memory leak
>      rebase: warn if state directory cannot be removed
>      sequencer: return errors from sequencer_remove_state()
>      rebase --abort/--quit: cleanup refs/rewritten
>      rebase -r: always reword merge -c
>      add -p: fix checkout -p with pathological context
>      show --continue/skip etc. consistently in synopsis
>      sequencer: always allow tab after command name
>      sequencer: factor out todo command name parsing
>      status: do not report errors in sequencer/todo
>      git-prompt: improve cherry-pick/revert detection
>      t3420: remove progress lines before comparing output
>
>Quentin Nerden (2):
>      docs: git-clone: refer to long form of options
>      docs: git-clone: list short form of options first
>
>Ramsay Jones (1):
>      env--helper: mark a file-local symbol as static
>
>René Scharfe (10):
>      cleanup: fix possible overflow errors in binary search, part 2
>      coccinelle: use COPY_ARRAY for copying arrays
>      use COPY_ARRAY for copying arrays
>      config: use unsigned_mult_overflows to check for overflows
>      config: don't multiply in parse_unit_factor()
>      config: simplify parsing of unit factors
>      commit-graph: release strbufs after use
>      dir-iterator: release strbuf after use
>      test-dir-iterator: use path argument directly
>      sha1-file: release strbuf after use
>
>Robert Morgan (1):
>      gpg(docs): use correct --verify syntax
>
>Rohit Ashiwal (5):
>      sequencer: add advice for revert
>      sequencer: rename reset_for_rollback to reset_merge
>      sequencer: use argv_array in reset_merge
>      cherry-pick/revert: add --skip option
>      cherry-pick/revert: advise using --skip
>
>SZEDER Gábor (12):
>      t3404: modernize here doc style
>      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
>      pager: add a helper function to clear the last line in the terminal
>      t5551: use 'test_i18ngrep' to check translated output
>      rebase: fix garbled progress display with '-x'
>      progress: use term_clear_line()
>      Document that 'git -C ""' works and doesn't change directory
>      ci: don't update Homebrew
>      ci: disable Homebrew's auto cleanup
>      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
>      travis-ci: build with GCC 4.8 as well
>      Documentation/git-fsck.txt: include fsck.* config variables
>
>Simon Williams (1):
>      git-p4: allow unshelving of branched files
>
>Stephen Boyd (2):
>      format-patch: inform user that patch-id generation is unstable
>      format-patch: make --base patch-id output stable
>
>Steven Roberts (1):
>      gpg-interface: do not scan past the end of buffer
>
>Taylor Blau (1):
>      ref-filter.c: find disjoint pattern prefixes
>
>Thomas Gummerer (16):
>      stash: fix show referencing stash index
>      apply: replace marc.info link with public-inbox
>      apply: only pass required data to skip_tree_prefix
>      apply: only pass required data to git_header_name
>      apply: only pass required data to check_header_line
>      apply: only pass required data to find_name_*
>      apply: only pass required data to gitdiff_* functions
>      apply: make parse_git_diff_header public
>      range-diff: fix function parameter indentation
>      range-diff: split lines manually
>      range-diff: don't remove funcname from inner diff
>      range-diff: suppress line count in outer diff
>      range-diff: add section header instead of diff header
>      range-diff: add filename to inner diff
>      range-diff: add headers to the outer hunk header
>      stash: fix handling removed files with --keep-index
>
>Tigran Mkrtchyan (1):
>      tag: add tag.gpgSign config option to force all tags be GPG-signed
>
>Varun Naik (1):
>      read-cache.c: do not die if mmap fails
>
>Vishal Verma (1):
>      merge: refuse --commit with --squash
>
>William Chargin (1):
>      restore: fix typo in docs
>
>Xin Li (1):
>      clone: respect user supplied origin name when setting up partial clone
>
>brian m. carlson (10):
>      t: add helper to convert object IDs to paths
>      t1410: make hash size independent
>      t1450: make hash size independent
>      t5000: make hash independent
>      t6030: make test work with SHA-256
>      t0027: make hash size independent
>      t0090: make test pass with SHA-256
>      t1007: remove SHA1 prerequisites
>      t1710: make hash independent
>      t2203: avoid hard-coded object ID values
>
>Ævar Arnfjörð Bjarmason (21):
>      send-email: move the read_config() function above getopts
>      send-email: rename the @bcclist variable for consistency
>      send-email: do defaults -> config -> getopt in that order
>      tests: add a special setup where prerequisites fail
>      Makefile: remove the NO_R_TO_GCC_LINKER flag
>      send-email: remove cargo-culted multi-patch pattern in tests
>      send-email: fix broken transferEncoding tests
>      send-email: document --no-[to|cc|bcc]
>      hash-object doc: stop mentioning git-cvsimport
>      send-email: fix regression in sendemail.identity parsing
>      Revert "test-lib: whitelist GIT_TR2_* in the environment"
>      config tests: simplify include cycle test
>      env--helper: new undocumented builtin wrapping git_env_*()
>      config.c: refactor die_bad_number() to not call gettext() early
>      t6040 test: stop using global "script" variable
>      tests: make GIT_TEST_GETTEXT_POISON a boolean
>      tests README: re-flow a previously changed paragraph
>      tests: replace test_tristate with "git env--helper"
>      tests: make GIT_TEST_FAIL_PREREQS a boolean
>      tests: mark two failing tests under FAIL_PREREQS
>      clone: test for our behavior on odd objects/* content
>

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

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.23.0-rc2
@ 2019-08-09 19:29  3% Junio C Hamano
  2019-08-09 21:20  0% ` Bhaskar Chowdhury
  2019-08-09 21:31  0% ` Git for Windows v2.23.0-rc2, was " Johannes Schindelin
  0 siblings, 2 replies; 42+ results
From: Junio C Hamano @ 2019-08-09 19:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.23.0-rc2 is now available for testing
at the usual places.  It is comprised of 483 non-merge commits
since v2.22.0, contributed by 67 people, 24 of which are new faces.

The tarballs are found at:

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

The following public repositories all have a copy of the
'v2.23.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.22.0 are as follows.
Welcome to the Git development community!

  Ariadne Conill, Barret Rhoden, Ben Avison, Daniel Ferreira,
  Doug Ilijev, Dr. Adam Nielsen, Jakub Wilk, John Lin, Mark
  Rushakoff, Matheus Tavares, Mazo, Andrey, Michael Osipov,
  Michael Platings, Miguel Ojeda, Mike Mueller, Morian Sonnet,
  Quentin Nerden, Robert Morgan, Simon Williams, Steven Roberts,
  Tigran Mkrtchyan, Varun Naik, Vishal Verma, and Xin Li.

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

  Ævar Arnfjörð Bjarmason, Beat Bolli, Boxuan Li, brian
  m. carlson, Carlo Marcelo Arenas Belón, Cesar Eduardo Barros,
  Chris Mayo, Christian Couder, Denton Liu, Derrick Stolee,
  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
  Emily Shaffer, Eric Wong, Felipe Contreras, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
  Karsten Blees, Marc-André Lureau, Martin Ågren, Matthew DeVore,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Nickolai Belakovski,
  Paolo Bonzini, Philip Oakley, Phillip Wood, Ramsay Jones,
  René Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor,
  Taylor Blau, Thomas Gummerer, and William Chargin.

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

Git 2.23 Release Notes (draft)
==============================

Updates since v2.22
-------------------

Backward compatibility note

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

 * The "git log" command by default behaves as if the --mailmap option
   was given.


UI, Workflows & Features

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

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

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

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

 * The code to show args with potential typo that cannot be
   interpreted as a commit-ish has been improved.

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

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

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

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

 * "git status" can be told a non-standard default value for the
   "--[no-]ahead-behind" option with a new configuration variable
   status.aheadBehind.

 * "git fetch" and "git pull" reports when a fetch results in
   non-fast-forward updates to let the user notice unusual situation.
   The commands learned "--no-show-forced-updates" option to disable
   this safety feature.

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

 * "git branch --list" learned to always output the detached HEAD as
   the first item (when the HEAD is detached, of course), regardless
   of the locale.

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

 * "git rev-list --objects" learned the "--no-object-names" option to
   squelch the path to the object that is used as a grouping hint for
   pack-objects.

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

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

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

 * "git cherry-pick/revert" learned a new "--skip" action.

 * The tips of refs from the alternate object store can be used as
   starting point for reachability computation now.

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

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

 * "git range-diff" output has been tweaked for easier identification
   of which part of what file the patch shown is about.


Performance, Internal Implementation, Development Support etc.

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

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

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

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

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

 * A new tutorial targeting specifically aspiring git-core
   developers has been added.

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

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

 * Dev support update to help tracing out tests.

 * Support to build with MSVC has been updated.

 * "git fetch" that grabs from a group of remotes learned to run the
   auto-gc only once at the very end.

 * A handful of Windows build patches have been upstreamed.

 * The code to read state files used by the sequencer machinery for
   "git status" has been made more robust against a corrupt or stale
   state files.

 * "git for-each-ref" with multiple patterns have been optimized.

 * The tree-walk API learned to pass an in-core repository
   instance throughout more codepaths.

 * When one step in multi step cherry-pick or revert is reset or
   committed, the command line prompt script failed to notice the
   current status, which has been improved.

 * Many GIT_TEST_* environment variables control various aspects of
   how our tests are run, but a few followed "non-empty is true, empty
   or unset is false" while others followed the usual "there are a few
   ways to spell true, like yes, on, etc., and also ways to spell
   false, like no, off, etc." convention.

 * Adjust the dir-iterator API and apply it to the local clone
   optimization codepath.

 * We have been trying out a few language features outside c89; the
   coding guidelines document did not talk about them and instead had
   a blanket ban against them.

 * A test helper has been introduced to optimize preparation of test
   repositories with many simple commits, and a handful of test
   scripts have been updated to use it.


Fixes since v2.22
-----------------

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

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

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

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

 * Code cleanup and futureproof.

 * More parameter validation.

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

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

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

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

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

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

 * Update to Unicode 12.1 width table.

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

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

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

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

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

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

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

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

 * "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.
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).

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

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

 * "git checkout -p" needs to selectively apply a patch in reverse,
   which did not work well.

 * Code clean-up to avoid signed integer wraparounds during binary search.

 * "git interpret-trailers" always treated '#' as the comment
   character, regardless of core.commentChar setting, which has been
   corrected.

 * "git stash show 23" used to work, but no more after getting
   rewritten in C; this regression has been corrected.

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

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

 * The code to parse scaled numbers out of configuration files has
   been made more robust and also easier to follow.

 * The codepath to compute delta islands used to spew progress output
   without giving the callers any way to squelch it, which has been
   fixed.

 * Protocol capabilities that go over wire should never be translated,
   but it was incorrectly marked for translation, which has been
   corrected.  The output of protocol capabilities for debugging has
   been tweaked a bit.

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

 * "git submodule foreach" did not protect command line options passed
   to the command to be run in each submodule correctly, when the
   "--recursive" option was in use.

 * The configuration variable rebase.rescheduleFailedExec should be
   effective only while running an interactive rebase and should not
   affect anything when running a non-interactive one, which was not
   the case.  This has been corrected.

 * The "git clone" documentation refers to command line options in its
   description in the short form; they have been replaced with long
   forms to make them more recognisable.

 * Generation of pack bitmaps are now disabled when .keep files exist,
   as these are mutually exclusive features.
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).

 * "git rm" to resolve a conflicted path leaked an internal message
   "needs merge" before actually removing the path, which was
   confusing.  This has been corrected.

 * "git stash --keep-index" did not work correctly on paths that have
   been removed, which has been fixed.
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).

 * Window 7 update ;-)

 * A codepath that reads from GPG for signed object verification read
   past the end of allocated buffer, which has been fixed.

 * "git clean" silently skipped a path when it cannot lstat() it; now
   it gives a warning.

 * "git push --atomic" that goes over the transport-helper (namely,
   the smart http transport) failed to prevent refs to be pushed when
   it can locally tell that one of the ref update will fail without
   having to consult the other end, which has been corrected.

 * The internal diff machinery can be made to read out of bounds while
   looking for --function-context line in a corner case, which has been
   corrected.
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge fbec05c210 cc/test-oidmap later to maint).
   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).

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

Changes since v2.22.0 are as follows:

Ariadne Conill (3):
      log: add warning for unspecified log.mailmap setting
      documentation: mention --no-use-mailmap and log.mailmap false setting
      tests: defang pager tests by explicitly disabling the log.mailmap warning

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

Beat Bolli (2):
      unicode: update the width tables to Unicode 12.1
      grep: print the pcre2_jit_on value

Ben Avison (1):
      clone: add `--remote-submodules` flag

Boxuan Li (2):
      userdiff: add Octave
      userdiff: fix grammar and style issues

Carlo Marcelo Arenas Belón (6):
      fsmonitor: avoid signed integer overflow / infinite loop
      wrapper: avoid undefined behaviour in macOS
      trace2: correct typo in technical documentation
      xdiff: drop system includes in xutils.c
      xdiff: remove duplicate headers from xhistogram.c
      xdiff: remove duplicate headers from xpatience.c

Cesar Eduardo Barros (1):
      mingw: embed a manifest to trick UAC into Doing The Right Thing

Chris Mayo (1):
      send-email: update documentation of required Perl modules

Christian Couder (7):
      t/helper: add test-oidmap.c
      t: add t0016-oidmap.sh
      oidmap: use sha1hash() instead of static hash() function
      test-hashmap: remove 'hash' command
      doc: improve usage string in MyFirstContribution
      test-oidmap: remove 'add' subcommand
      t0016: add 'remove' subcommand test

Daniel Ferreira (1):
      dir-iterator: add tests for dir-iterator API

Denton Liu (5):
      git-format-patch.txt: document --no-notes option
      format-patch: teach format.notes config option
      config: learn the "onbranch:" includeIf condition
      config/alias.txt: change " and ' to `
      config/alias.txt: document alias accepting non-command first word

Derrick Stolee (51):
      commit-graph: fix the_repository reference
      revision: use generation for A..B --topo-order queries
      revision: keep topo-walk free of unintersting commits
      sha1-file: split OBJECT_INFO_FOR_PREFETCH
      repack: refactor pack deletion for future use
      Docs: rearrange subcommands for multi-pack-index
      multi-pack-index: prepare for 'expire' subcommand
      midx: simplify computation of pack name lengths
      midx: refactor permutation logic and pack sorting
      multi-pack-index: implement 'expire' subcommand
      multi-pack-index: prepare 'repack' subcommand
      midx: implement midx_repack()
      multi-pack-index: test expire while adding packs
      midx: add test that 'expire' respects .keep files
      t5319-multi-pack-index.sh: test batch size zero
      commit-graph: return with errors during write
      commit-graph: collapse parameters into flags
      commit-graph: remove Future Work section
      commit-graph: create write_commit_graph_context
      commit-graph: extract fill_oids_from_packs()
      commit-graph: extract fill_oids_from_commit_hex()
      commit-graph: extract fill_oids_from_all_packs()
      commit-graph: extract count_distinct_commits()
      commit-graph: extract copy_oids_to_commits()
      commit-graph: extract write_commit_graph_file()
      commit-graph: use raw_object_store when closing
      packfile: close commit-graph in close_all_packs
      packfile: rename close_all_packs to close_object_store
      commit-graph: document commit-graph chains
      commit-graph: prepare for commit-graph chains
      commit-graph: rename commit_compare to oid_compare
      commit-graph: load commit-graph chains
      commit-graph: add base graphs chunk
      commit-graph: rearrange chunk count logic
      commit-graph: write commit-graph chains
      commit-graph: add --split option to builtin
      commit-graph: merge commit-graph chains
      commit-graph: allow cross-alternate chains
      commit-graph: expire commit-graph files
      commit-graph: create options for split files
      commit-graph: verify chains with --shallow mode
      commit-graph: clean up chains after flattened write
      commit-graph: test octopus merges with --split
      commit-graph: test --split across alternate without --split
      commit-graph: normalize commit-graph filenames
      commit-graph: test verify across alternates
      fetch: add --[no-]show-forced-updates argument
      fetch: warn about forced updates in branch listing
      pull: add --[no-]show-forced-updates passthrough
      t5319: use 'test-tool path-utils' instead of 'ls -l'
      commit-graph: fix bug around octopus merges

Dimitriy Ryazantcev (1):
      l10n: localizable upload progress messages

Doug Ilijev (1):
      README: fix rendering of text in angle brackets

Dr. Adam Nielsen (1):
      gitignore.txt: make slash-rules more readable

Edmundo Carmona Antoranz (1):
      builtin/merge.c - cleanup of code in for-cycle that tests strategies

Elijah Newren (6):
      t9350: fix encoding test to actually test reencoding
      fast-import: support 'encoding' commit header
      fast-export: avoid stripping encoding header if we cannot reencode
      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
      fast-export: do automatic reencoding of commit messages only if requested
      merge-recursive: avoid directory rename detection in recursive case

Emily Shaffer (7):
      documentation: add tutorial for first contribution
      documentation: add anchors to MyFirstContribution
      grep: fail if call could output and name is null
      doc: hint about GIT_DEBUGGER in CodingGuidelines
      doc: add some nit fixes to MyFirstContribution
      rev-list: teach --no-object-names to enable piping
      transport-helper: enforce atomic in push_refs_with_push

Eric Wong (3):
      update-server-info: avoid needless overwrites
      server-info: do not list unlinked packs
      repack: disable bitmaps-by-default if .keep files exist

Felipe Contreras (5):
      t5801 (remote-helpers): cleanup refspec stuff
      t5801 (remote-helpers): add test to fetch tags
      fetch: trivial cleanup
      fetch: make the code more understandable
      fetch: fix regression with transport helpers

Jakub Wilk (1):
      doc: don't use git.kernel.org as example gitweb URL

Jean-Noël Avila (1):
      l10n: reformat some localized strings for v2.23.0

Jeff Hostetler (13):
      cache-tree/blame: avoid reusing the DEBUG constant
      msvc: mark a variable as non-const
      msvc: do not re-declare the timespec struct
      msvc: define ftello()
      msvc: fix detect_msys_tty()
      msvc: update Makefile to allow for spaces in the compiler path
      status: add status.aheadbehind setting
      status: warn when a/b calculation takes too long
      status: ignore status.aheadbehind in porcelain formats
      msvc: support building Git using MS Visual C++
      msvc: add a compile-time flag to allow detailed heap debugging
      msvc: do not pretend to support all signals
      msvc: ignore .dll and incremental compile output

Jeff King (57):
      cmd_{read,write}_tree: rename "unused" variable that is used
      builtin: consistently pass cmd_* prefix to parse_options
      submodule: drop unused prefix parameter from some functions
      clone: drop dest parameter from copy_alternates()
      read-cache: drop unused parameter from threaded load
      wt-status: drop unused status parameter
      mktree: drop unused length parameter
      name-rev: drop unused parameters from is_better_name()
      pack-objects: drop unused rev_info parameters
      receive-pack: drop unused "commands" from prepare_shallow_update()
      remove_all_fetch_refspecs(): drop unused "remote" parameter
      rev-list: drop unused void pointer from finish_commit()
      show-branch: drop unused parameter from show_independent()
      verify-commit: simplify parameters to run_gpg_verify()
      help_unknown_ref(): duplicate collected refnames
      help_unknown_ref(): check for refname ambiguity
      upload-pack: strip namespace from symref data
      am: simplify prompt response handling
      am: read interactive input from stdin
      am: drop tty requirement for --interactive
      am: fix --interactive HEAD tree resolution
      interpret-trailers: load default config
      verify-tag: drop signal.h include
      wt-status.h: drop stdio.h include
      describe: fix accidental oid/hash type-punning
      upload-pack: rename a "sha1" variable to "oid"
      pack-bitmap-write: convert some helpers to use object_id
      pack-objects: convert packlist_find() to use object_id
      pack-objects: convert locate_object_entry_hash() to object_id
      object: convert lookup_unknown_object() to use object_id
      object: convert lookup_object() to use object_id
      object: convert internal hash_obj() to object_id
      object: convert create_object() to use object_id
      khash: drop broken oid_map typedef
      khash: rename kh_oid_t to kh_oid_set
      delta-islands: convert island_marks khash to use oids
      pack-bitmap: convert khash_sha1 maps into kh_oid_map
      khash: drop sha1-specific map types
      khash: rename oid helper functions
      hash.h: move object_id definition from cache.h
      hashmap: convert sha1hash() to oidhash()
      delta-islands: respect progress flag
      blame: drop some unused function parameters
      object-store.h: move for_each_alternate_ref() from transport.h
      check_everything_connected: assume alternate ref tips are valid
      test-lib: introduce test_commit_bulk
      t5310: increase the number of bitmapped commits
      t3311: use test_commit_bulk
      t5702: use test_commit_bulk
      t5703: use test_commit_bulk
      t6200: use test_commit_bulk
      xdiff: clamp function context indices in post-image
      t: sort output of hashmap iteration
      t7700: clean up .keep file in bitmap-writing test
      repack: silence warnings when auto-enabled bitmaps cannot be built
      repack: simplify handling of auto-bitmaps and .keep files
      t0000: reword comments for "local" test

Johannes Schindelin (47):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      bisect--helper: verify HEAD could be parsed before continuing
      fill_stat_cache_info(): prepare for an fsmonitor fix
      mark_fsmonitor_valid(): mark the index as changed if needed
      bundle verify: error out if called without an object database
      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
      kwset: allow building with GCC 8
      winansi: simplify loading the GetCurrentConsoleFontEx() function
      config: avoid calling `labs()` on too-large data type
      t3404: fix a typo
      mingw: fix a typo in the msysGit-specific section
      Mark .bat files as requiring CR/LF endings
      t0001 (mingw): do not expect a specific order of stdout/stderr
      obstack: fix compiler warning
      mingw: replace mingw_startup() hack
      msvc: fix dependencies of compat/msvc.c
      t0001: fix on case-insensitive filesystems
      msvc: avoid debug assertion windows in Debug Mode
      mingw: enable stack smashing protector
      mingw: get pw_name in UTF-8 format
      mingw: use Unicode functions explicitly
      rebase --am: ignore rebase.rescheduleFailedExec
      mingw: fix possible buffer overrun when calling `GetUserNameW()`
      diff: munmap() file contents before running external diff
      mingw: support spawning programs containing spaces in their names
      clean: show an error message when the path is too long
      rebase: fix white-space
      git: mark cmd_rebase as requiring a worktree
      Vcproj.pm: auto-generate GUIDs
      Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
      Vcproj.pm: urlencode '<' and '>' when generating VC projects
      contrib/buildsystems: ignore irrelevant files in Generators/
      contrib/buildsystems: error out on unknown option
      contrib/buildsystems: handle libiconv, too
      contrib/buildsystems: also handle -lexpat
      contrib/buildsystems: handle options starting with a slash
      contrib/buildsystems: add a backend for modern Visual Studio versions
      msvc: add a Makefile target to pre-generate the Visual Studio solution
      vcxproj: also link-or-copy builtins
      .gitignore: ignore Visual Studio's temporary/generated files
      bin-wrappers: append `.exe` to target paths if necessary
      git: avoid calling aliased builtins via their dashed form
      config: work around bug with includeif:onbranch and early config

Johannes Sixt (5):
      userdiff: two simplifications of patterns for rust
      t7610-mergetool: do not place pipelines headed by `yes` in subshells
      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
      mergetool: dissect strings with shell variable magic instead of `expr`
      mergetool: use shell variable magic instead of `awk`

John Lin (1):
      status: remove the empty line after hints

Jonathan Nieder (1):
      t: decrease nesting in test_oid_to_path

Jonathan Tan (5):
      t5616: refactor packfile replacement
      index-pack: prefetch missing REF_DELTA bases
      t5616: use correct flag to check object is missing
      t5616: cover case of client having delta base
      t5551: test usage of chunked encoding explicitly

Josh Steadmon (1):
      trace2: correct trace2 field name documentation

Junio C Hamano (19):
      The first batch after 2.22
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      transport-helper: avoid var decl in for () loop control
      rm: resolving by removal is not a warning-worthy event
      CodingGuidelines: spell out post-C89 rules
      The sixth batch
      The seventh batch
      Flush fixes up to the third batch post 2.22.0
      Merge fixes made on the 'master' front
      Git 2.23-rc0
      test-dir-iterator: do not assume errno values
      A few more last-minute fixes
      log: flip the --mailmap default unconditionally
      log: really flip the --mailmap default
      Git 2.23-rc1
      Git 2.23-rc2

Karsten Blees (2):
      gettext: always use UTF-8 on native Windows
      mingw: initialize HOME on startup

Marc-André Lureau (1):
      userdiff: add built-in pattern for rust

Mark Rushakoff (1):
      doc: typo: s/can not/cannot/ and s/is does/does/

Martin Ågren (3):
      ref-filter: fix memory leak in `free_array_item()`
      RelNotes/2.21.1: typofix
      RelNotes/2.23.0: fix a few typos and other minor issues

Matheus Tavares (8):
      clone: better handle symlinked files at .git/objects/
      dir-iterator: use warning_errno when possible
      dir-iterator: refactor state machine model
      dir-iterator: add flags parameter to dir_iterator_begin
      clone: copy hidden paths at local clone
      clone: extract function from copy_or_link_directory
      clone: use dir-iterator to avoid explicit dir traversal
      clone: replace strcmp by fspathcmp

Matthew DeVore (5):
      list-objects-filter-options: error is localizeable
      list-objects-filter: correct usage of ALLOC_GROW
      url: do not read past end of buffer
      url: do not allow %00 to represent NUL in URLs
      ref-filter: sort detached HEAD lines firstly

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

Michael Osipov (1):
      configure: Detect linking style for HP aCC on HP-UX

Michael Platings (2):
      blame: add a fingerprint heuristic to match ignored lines
      t8014: remove unnecessary braces

Miguel Ojeda (1):
      clang-format: use git grep to generate the ForEachMacros list

Mike Hommey (2):
      dup() the input fd for fast-import used for remote helpers
      Use xmmap_gently instead of xmmap in use_pack

Mike Mueller (1):
      p4 unshelve: fix "Not a valid object name HEAD0" on Windows

Morian Sonnet (1):
      submodule foreach: fix recursion of options

Nguyễn Thái Ngọc Duy (63):
      git-checkout.txt: spell out --no-option
      git-checkout.txt: fix one syntax line
      doc: document --overwrite-ignore
      git-checkout.txt: fix monospace typeset
      t: rename t2014-switch.sh to t2014-checkout-switch.sh
      checkout: advice how to get out of detached HEAD mode
      checkout: inform the user when removing branch state
      checkout: keep most #include sorted
      checkout: factor out some code in parse_branchname_arg()
      checkout: make "opts" in cmd_checkout() a pointer
      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
      checkout: split options[] array in three pieces
      checkout: split part of it to new command 'switch'
      switch: better names for -b and -B
      switch: add --discard-changes
      switch: remove -l
      switch: stop accepting pathspec
      switch: reject "do nothing" case
      switch: only allow explicit detached HEAD
      switch: add short option for --detach
      switch: implicit dwim, use --no-guess to disable it
      switch: no worktree status unless real branch switch happens
      switch: reject if some operation is in progress
      switch: make --orphan switch to an empty tree
      t: add tests for switch
      completion: support switch
      doc: promote "git switch"
      checkout: split part of it to new command 'restore'
      restore: take tree-ish from --source option instead
      restore: make pathspec mandatory
      restore: disable overlay mode by default
      checkout: factor out worktree checkout code
      restore: add --worktree and --staged
      restore: reject invalid combinations with --staged
      restore: default to --source=HEAD when only --staged is specified
      restore: replace --force with --ignore-unmerged
      restore: support --patch
      t: add tests for restore
      completion: support restore
      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
      doc: promote "git restore"
      help: move git-diff and git-reset to different groups
      Declare both git-switch and git-restore experimental
      merge: remove drop_save() in favor of remove_merge_branch_state()
      init: make --template path relative to $CWD
      worktree add: sanitize worktree names
      worktree add: be tolerant of corrupt worktrees
      merge: add --quit
      completion: do not cache if --git-completion-helper fails
      fetch: only run 'gc' once when fetching multiple remotes
      t2027: use test_must_be_empty
      switch: allow to switch in the middle of bisect
      completion: disable dwim on "git switch -d"
      fetch-pack: move capability names out of i18n strings
      fetch-pack: print all relevant supported capabilities with -v -v
      fetch-pack: print server version at the top in -v -v
      sha1-file.c: remove the_repo from read_object_with_reference()
      tree-walk.c: remove the_repo from fill_tree_descriptor()
      tree-walk.c: remove the_repo from get_tree_entry()
      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
      match-trees.c: remove the_repo from shift_tree*()
      Use the right 'struct repository' instead of the_repository
      t7814: do not generate same commits in different repos

Nickolai Belakovski (3):
      ref-filter: add worktreepath atom
      branch: update output to include worktree info
      branch: add worktree info on verbose output

Paolo Bonzini (2):
      request-pull: quote regex metacharacters in local ref
      request-pull: warn if the remote object is not the same as the local one

Philip Oakley (15):
      git.c: show usage for accessing the git(1) help page
      Doc: git.txt: remove backticks from link and add git-scm.com/docs
      doc branch: provide examples for listing remote tracking branches
      msvc: include sigset_t definition
      msvc: define O_ACCMODE
      msvc: add pragmas for common warnings
      Vcproj.pm: list git.exe first to be startup project
      contrib/buildsystems: ignore invalidcontinue.obj
      contrib/buildsystems: fix misleading error message
      contrib/buildsystems: handle quoted spaces in filenames
      contrib/buildsystems: ignore gettext stuff
      contrib/buildsystems: redirect errors of the dry run into a log file
      contrib/buildsystems: optionally capture the dry-run in a file
      contrib/buildsystems: handle the curl library option
      .gitignore: touch up the entries regarding Visual Studio

Phillip Wood (12):
      rebase: fix a memory leak
      rebase: warn if state directory cannot be removed
      sequencer: return errors from sequencer_remove_state()
      rebase --abort/--quit: cleanup refs/rewritten
      rebase -r: always reword merge -c
      add -p: fix checkout -p with pathological context
      show --continue/skip etc. consistently in synopsis
      sequencer: always allow tab after command name
      sequencer: factor out todo command name parsing
      status: do not report errors in sequencer/todo
      git-prompt: improve cherry-pick/revert detection
      t3420: remove progress lines before comparing output

Quentin Nerden (2):
      docs: git-clone: refer to long form of options
      docs: git-clone: list short form of options first

Ramsay Jones (1):
      env--helper: mark a file-local symbol as static

René Scharfe (10):
      cleanup: fix possible overflow errors in binary search, part 2
      coccinelle: use COPY_ARRAY for copying arrays
      use COPY_ARRAY for copying arrays
      config: use unsigned_mult_overflows to check for overflows
      config: don't multiply in parse_unit_factor()
      config: simplify parsing of unit factors
      commit-graph: release strbufs after use
      dir-iterator: release strbuf after use
      test-dir-iterator: use path argument directly
      sha1-file: release strbuf after use

Robert Morgan (1):
      gpg(docs): use correct --verify syntax

Rohit Ashiwal (5):
      sequencer: add advice for revert
      sequencer: rename reset_for_rollback to reset_merge
      sequencer: use argv_array in reset_merge
      cherry-pick/revert: add --skip option
      cherry-pick/revert: advise using --skip

SZEDER Gábor (12):
      t3404: modernize here doc style
      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
      pager: add a helper function to clear the last line in the terminal
      t5551: use 'test_i18ngrep' to check translated output
      rebase: fix garbled progress display with '-x'
      progress: use term_clear_line()
      Document that 'git -C ""' works and doesn't change directory
      ci: don't update Homebrew
      ci: disable Homebrew's auto cleanup
      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
      travis-ci: build with GCC 4.8 as well
      Documentation/git-fsck.txt: include fsck.* config variables

Simon Williams (1):
      git-p4: allow unshelving of branched files

Stephen Boyd (2):
      format-patch: inform user that patch-id generation is unstable
      format-patch: make --base patch-id output stable

Steven Roberts (1):
      gpg-interface: do not scan past the end of buffer

Taylor Blau (1):
      ref-filter.c: find disjoint pattern prefixes

Thomas Gummerer (16):
      stash: fix show referencing stash index
      apply: replace marc.info link with public-inbox
      apply: only pass required data to skip_tree_prefix
      apply: only pass required data to git_header_name
      apply: only pass required data to check_header_line
      apply: only pass required data to find_name_*
      apply: only pass required data to gitdiff_* functions
      apply: make parse_git_diff_header public
      range-diff: fix function parameter indentation
      range-diff: split lines manually
      range-diff: don't remove funcname from inner diff
      range-diff: suppress line count in outer diff
      range-diff: add section header instead of diff header
      range-diff: add filename to inner diff
      range-diff: add headers to the outer hunk header
      stash: fix handling removed files with --keep-index

Tigran Mkrtchyan (1):
      tag: add tag.gpgSign config option to force all tags be GPG-signed

Varun Naik (1):
      read-cache.c: do not die if mmap fails

Vishal Verma (1):
      merge: refuse --commit with --squash

William Chargin (1):
      restore: fix typo in docs

Xin Li (1):
      clone: respect user supplied origin name when setting up partial clone

brian m. carlson (10):
      t: add helper to convert object IDs to paths
      t1410: make hash size independent
      t1450: make hash size independent
      t5000: make hash independent
      t6030: make test work with SHA-256
      t0027: make hash size independent
      t0090: make test pass with SHA-256
      t1007: remove SHA1 prerequisites
      t1710: make hash independent
      t2203: avoid hard-coded object ID values

Ævar Arnfjörð Bjarmason (21):
      send-email: move the read_config() function above getopts
      send-email: rename the @bcclist variable for consistency
      send-email: do defaults -> config -> getopt in that order
      tests: add a special setup where prerequisites fail
      Makefile: remove the NO_R_TO_GCC_LINKER flag
      send-email: remove cargo-culted multi-patch pattern in tests
      send-email: fix broken transferEncoding tests
      send-email: document --no-[to|cc|bcc]
      hash-object doc: stop mentioning git-cvsimport
      send-email: fix regression in sendemail.identity parsing
      Revert "test-lib: whitelist GIT_TR2_* in the environment"
      config tests: simplify include cycle test
      env--helper: new undocumented builtin wrapping git_env_*()
      config.c: refactor die_bad_number() to not call gettext() early
      t6040 test: stop using global "script" variable
      tests: make GIT_TEST_GETTEXT_POISON a boolean
      tests README: re-flow a previously changed paragraph
      tests: replace test_tristate with "git env--helper"
      tests: make GIT_TEST_FAIL_PREREQS a boolean
      tests: mark two failing tests under FAIL_PREREQS
      clone: test for our behavior on odd objects/* content


^ permalink raw reply	[relevance 3%]

* Re: amend warnings with no changes staged
  2019-08-06  2:16  7%     ` Jonathan Nieder
  2019-08-06  2:47  0%       ` Junio C Hamano
@ 2019-08-06  4:19  0%       ` Jeff King
  1 sibling, 0 replies; 42+ results
From: Jeff King @ 2019-08-06  4:19 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: Lukas Gross, git

On Mon, Aug 05, 2019 at 07:16:18PM -0700, Jonathan Nieder wrote:

> Lukas Gross wrote:
> 
> > I had intended to stage commits but forgot to do so. Git responded
> > with a normal commit creation message, so I pushed to the remote to
> > begin a CI build. When the build failed for the same reason, I
> > realized I had forgotten to stage the changes. An additional line in
> > the response to the effect of “Warning: did you mean to amend with no
> > changes?” would be very helpful to shorten this feedback loop.
> 
> On second thought:
> 
> 	$ git commit --amend --no-edit
> 	[detached HEAD 33a3db8805] Git 2.23-rc1
> 	 Author: Junio C Hamano <gitster@pobox.com>
> 	 Date: Fri Aug 2 13:12:24 2019 -0700
> 	 2 files changed, 2 insertions(+), 1 deletion(-)
> 	$
> 
> Some non-judgemental descriptive output like
> 
> 	$ git commit --amend --no-edit
> 	No changes.
> 	$
> 
> would address this case, without bothering people who are doing it
> intentionally.  So I think there's room for a simple improvement here.
> 
> Care to take a stab at it?  builtin/commit.c would be the place to
> start.

I'm not clear on the situation from your second change. There are two
sets of changes to talk about here: the changes between the new commit
and its parent, and the changes between the original commit and the
amended version.

The output in your first example is showing the differences to the
parent. Do you mean in the second example that there are no changes to
the parent, and thus we say "No changes"? If not, then what happened to
that output? :)

And if so, then I don't think it is solving Lukas's problem. I imagine
the issue to be (because I have done this myself many times):

  git commit -m 'buggy commit'
  echo fix >>file.c
  git commit --amend ;# oops, should have been "-a"
  git push

But perhaps that gets to the heart of the matter. Could we perhaps be
providing a more detailed summary of what happened for an --amend? I.e.,
to summarize _both_ sets of changes (and if one set is empty, say so)?

I'm not quite sure how to make that readable. Something like:

  $ git commit --amend
  [master 5787bce] some commit subject
   Date: Tue Aug 6 00:03:28 2019 -0400
  Changes introduced by this commit (diff HEAD^):
   1 file changed, 1 insertion(+)
   create mode 100644 added-by-broken-commit
  Changes from the amend commit (diff HEAD@{1}):
   1 file changed, 1 insertion(+)
   create mode 100644 added-during-amend

is pretty ugly. And anyway, because it's just the diffstat total, it's
hard to see whether it contains your changes or not (i.e., would you
notice if you forgot to stage 3 lines from some random file). OTOH, if
the common case we care about is just "you didn't stage anything as part
of the amend", then it would be enough to let you know (without making a
judgement about whether it's an error, since it may well be that you
were simply rewording the commit message).

-Peff

^ permalink raw reply	[relevance 0%]

* Re: amend warnings with no changes staged
  2019-08-06  2:47  0%       ` Junio C Hamano
@ 2019-08-06  3:00  0%         ` Jonathan Nieder
  0 siblings, 0 replies; 42+ results
From: Jonathan Nieder @ 2019-08-06  3:00 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Lukas Gross, git

Junio C Hamano wrote:
> Jonathan Nieder <jrnieder@gmail.com> writes:
>> Lukas Gross wrote:

>>> I had intended to stage commits but forgot to do so. Git responded
>>> with a normal commit creation message, so I pushed to the remote to
>>> begin a CI build. When the build failed for the same reason, I
>>> realized
[...]
>> 	$ git commit --amend --no-edit
>> 	[detached HEAD 33a3db8805] Git 2.23-rc1
>> 	 Author: Junio C Hamano <gitster@pobox.com>
>> 	 Date: Fri Aug 2 13:12:24 2019 -0700
>> 	 2 files changed, 2 insertions(+), 1 deletion(-)
>> 	$
>>
>> Some non-judgemental descriptive output like
>>
>> 	$ git commit --amend --no-edit
>> 	No changes.
>> 	$
>>
>> would address this case, without bothering people who are doing it
>> intentionally.  So I think there's room for a simple improvement here.
>
> I do that to refresh the committer timestamp.

I do, too.  The proposal is, paraphrasing,

	$ git commit --amend --no-edit
	Ah, I see that you want me to refresh the committer timestamp.
	Done, as requested.
	$

In other words:

[...]
>                                                           I am not
> yet convinced that "--amend --no-edit will become a no-op" is the
> final solution we want.

Not this.

Hoping that clarifies,
Jonathan

^ permalink raw reply	[relevance 0%]

* Re: amend warnings with no changes staged
  2019-08-06  2:16  7%     ` Jonathan Nieder
@ 2019-08-06  2:47  0%       ` Junio C Hamano
  2019-08-06  3:00  0%         ` Jonathan Nieder
  2019-08-06  4:19  0%       ` Jeff King
  1 sibling, 1 reply; 42+ results
From: Junio C Hamano @ 2019-08-06  2:47 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: Lukas Gross, git

Jonathan Nieder <jrnieder@gmail.com> writes:

> Lukas Gross wrote:
>
>> I had intended to stage commits but forgot to do so. Git responded
>> with a normal commit creation message, so I pushed to the remote to
>> begin a CI build. When the build failed for the same reason, I
>> realized I had forgotten to stage the changes. An additional line in
>> the response to the effect of “Warning: did you mean to amend with no
>> changes?” would be very helpful to shorten this feedback loop.
>
> On second thought:
>
> 	$ git commit --amend --no-edit
> 	[detached HEAD 33a3db8805] Git 2.23-rc1
> 	 Author: Junio C Hamano <gitster@pobox.com>
> 	 Date: Fri Aug 2 13:12:24 2019 -0700
> 	 2 files changed, 2 insertions(+), 1 deletion(-)
> 	$
>
> Some non-judgemental descriptive output like
>
> 	$ git commit --amend --no-edit
> 	No changes.
> 	$
>
> would address this case, without bothering people who are doing it
> intentionally.  So I think there's room for a simple improvement here.

I do that to refresh the committer timestamp.  Do I now have to say
something silly like

	$ GIT_EDITOR=true git commit --amend

to defeat the above (mis)feature, or is there a cleaner workaround?

Obviously I'd prefer to see a solution that does not force existing
users to work around the new behaviour ;-)

> Care to take a stab at it?  builtin/commit.c would be the place to
> start.

I'd suggest not to start it before we know what we want.  I am not
yet convinced that "--amend --no-edit will become a no-op" is the
final solution we want.

^ permalink raw reply	[relevance 0%]

* Re: amend warnings with no changes staged
  @ 2019-08-06  2:16  7%     ` Jonathan Nieder
  2019-08-06  2:47  0%       ` Junio C Hamano
  2019-08-06  4:19  0%       ` Jeff King
  0 siblings, 2 replies; 42+ results
From: Jonathan Nieder @ 2019-08-06  2:16 UTC (permalink / raw)
  To: Lukas Gross; +Cc: git

Lukas Gross wrote:

> I had intended to stage commits but forgot to do so. Git responded
> with a normal commit creation message, so I pushed to the remote to
> begin a CI build. When the build failed for the same reason, I
> realized I had forgotten to stage the changes. An additional line in
> the response to the effect of “Warning: did you mean to amend with no
> changes?” would be very helpful to shorten this feedback loop.

On second thought:

	$ git commit --amend --no-edit
	[detached HEAD 33a3db8805] Git 2.23-rc1
	 Author: Junio C Hamano <gitster@pobox.com>
	 Date: Fri Aug 2 13:12:24 2019 -0700
	 2 files changed, 2 insertions(+), 1 deletion(-)
	$

Some non-judgemental descriptive output like

	$ git commit --amend --no-edit
	No changes.
	$

would address this case, without bothering people who are doing it
intentionally.  So I think there's room for a simple improvement here.

Care to take a stab at it?  builtin/commit.c would be the place to
start.

Thanks and sorry for the roller-coaster,
Jonathan

^ permalink raw reply	[relevance 7%]

* [ANNOUNCE] Git v2.23.0-rc1
@ 2019-08-02 22:06  3% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-08-02 22:06 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.23.0-rc1 is now available for testing
at the usual places.  It is comprised of 471 non-merge commits
since v2.22.0, contributed by 63 people, 23 of which are new faces.

The tarballs are found at:

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

The following public repositories all have a copy of the
'v2.23.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.22.0 are as follows.
Welcome to the Git development community!

  Ariadne Conill, Barret Rhoden, Ben Avison, Daniel Ferreira, Doug
  Ilijev, Dr. Adam Nielsen, Jakub Wilk, John Lin, Matheus Tavares,
  Mazo, Andrey, Michael Osipov, Michael Platings, Miguel Ojeda,
  Mike Mueller, Morian Sonnet, Quentin Nerden, Robert Morgan,
  Simon Williams, Steven Roberts, Tigran Mkrtchyan, Varun Naik,
  Vishal Verma, and Xin Li.

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

  Ævar Arnfjörð Bjarmason, Beat Bolli, Boxuan Li, brian
  m. carlson, Carlo Marcelo Arenas Belón, Cesar Eduardo Barros,
  Chris Mayo, Christian Couder, Denton Liu, Derrick Stolee,
  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elijah Newren,
  Emily Shaffer, Eric Wong, Felipe Contreras, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Tan,
  Josh Steadmon, Junio C Hamano, Karsten Blees, Marc-André Lureau,
  Martin Ågren, Matthew DeVore, Mike Hommey, Nguyễn Thái Ngọc
  Duy, Nickolai Belakovski, Paolo Bonzini, Philip Oakley, Phillip
  Wood, Ramsay Jones, René Scharfe, Rohit Ashiwal, Stephen Boyd,
  SZEDER Gábor, Taylor Blau, and Thomas Gummerer.

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

Git 2.23 Release Notes (draft)
==============================

Updates since v2.22
-------------------

Backward compatibility note

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

 * The "git log" command by default behaves as if the --mailmap option
   was given.


UI, Workflows & Features

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

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

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

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

 * The code to show args with potential typo that cannot be
   interpreted as a commit-ish has been improved.

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

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

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

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

 * "git status" can be told a non-standard default value for the
   "--[no-]ahead-behind" option with a new configuration variable
   status.aheadBehind.

 * "git fetch" and "git pull" reports when a fetch results in
   non-fast-forward updates to let the user notice unusual situation.
   The commands learned "--no-show-forced-updates" option to disable
   this safety feature.

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

 * "git branch --list" learned to always output the detached HEAD as
   the first item (when the HEAD is detached, of course), regardless
   of the locale.

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

 * "git rev-list --objects" learned the "--no-object-names" option to
   squelch the path to the object that is used as a grouping hint for
   pack-objects.

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

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

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

 * "git cherry-pick/revert" learned a new "--skip" action.

 * The tips of refs from the alternate object store can be used as
   starting point for reachability computation now.

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

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

 * "git range-diff" output has been tweaked for easier identification
   of which part of what file the patch shown is about.


Performance, Internal Implementation, Development Support etc.

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

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

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

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

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

 * A new tutorial targeting specifically aspiring git-core
   developers has been added.

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

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

 * Dev support update to help tracing out tests.

 * Support to build with MSVC has been updated.

 * "git fetch" that grabs from a group of remotes learned to run the
   auto-gc only once at the very end.

 * A handful of Windows build patches have been upstreamed.

 * The code to read state files used by the sequencer machinery for
   "git status" has been made more robust against a corrupt or stale
   state files.

 * "git for-each-ref" with multiple patterns have been optimized.

 * The tree-walk API learned to pass an in-core repository
   instance throughout more codepaths.

 * When one step in multi step cherry-pick or revert is reset or
   committed, the command line prompt script failed to notice the
   current status, which has been improved.

 * Many GIT_TEST_* environment variables control various aspects of
   how our tests are run, but a few followed "non-empty is true, empty
   or unset is false" while others followed the usual "there are a few
   ways to spell true, like yes, on, etc., and also ways to spell
   false, like no, off, etc." convention.

 * Adjust the dir-iterator API and apply it to the local clone
   optimization codepath.

 * We have been trying out a few language features outside c89; the
   coding guidelines document did not talk about them and instead had
   a blanket ban against them.

 * A test helper has been introduced to optimize preparation of test
   repositories with many simple commits, and a handful of test
   scripts have been updated to use it.


Fixes since v2.22
-----------------

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

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

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

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

 * Code cleanup and futureproof.

 * More parameter validation.

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

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

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

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

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

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

 * Update to Unicode 12.1 width table.

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

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

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

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

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

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

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

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

 * "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.
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).

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

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

 * "git checkout -p" needs to selectively apply a patch in reverse,
   which did not work well.

 * Code clean-up to avoid signed integer wraparounds during binary search.

 * "git interpret-trailers" always treated '#' as the comment
   character, regardless of core.commentChar setting, which has been
   corrected.

 * "git stash show 23" used to work, but no more after getting
   rewritten in C; this regression has been corrected.

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

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

 * The code to parse scaled numbers out of configuration files has
   been made more robust and also easier to follow.

 * The codepath to compute delta islands used to spew progress output
   without giving the callers any way to squelch it, which has been
   fixed.

 * Protocol capabilities that go over wire should never be translated,
   but it was incorrectly marked for translation, which has been
   corrected.  The output of protocol capabilities for debugging has
   been tweaked a bit.

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

 * "git submodule foreach" did not protect command line options passed
   to the command to be run in each submodule correctly, when the
   "--recursive" option was in use.

 * The configuration variable rebase.rescheduleFailedExec should be
   effective only while running an interactive rebase and should not
   affect anything when running a non-interactive one, which was not
   the case.  This has been corrected.

 * The "git clone" documentation refers to command line options in its
   description in the short form; they have been replaced with long
   forms to make them more recognisable.

 * Generation of pack bitmaps are now disabled when .keep files exist,
   as these are mutually exclusive features.
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).

 * "git rm" to resolve a conflicted path leaked an internal message
   "needs merge" before actually removing the path, which was
   confusing.  This has been corrected.

 * "git stash --keep-index" did not work correctly on paths that have
   been removed, which has been fixed.
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).

 * Window 7 update ;-)

 * A codepath that reads from GPG for signed object verification read
   past the end of allocated buffer, which has been fixed.

 * "git clean" silently skipped a path when it cannot lstat() it; now
   it gives a warning.

 * "git push --atomic" that goes over the transport-helper (namely,
   the smart http transport) failed to prevent refs to be pushed when
   it can locally tell that one of the ref update will fail without
   having to consult the other end, which has been corrected.

 * The internal diff machinery can be made to read out of bounds while
   looking for --function-context line in a corner case, which has been
   corrected.
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge fbec05c210 cc/test-oidmap later to maint).
   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).

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

Changes since v2.22.0 are as follows:

Ariadne Conill (3):
      log: add warning for unspecified log.mailmap setting
      documentation: mention --no-use-mailmap and log.mailmap false setting
      tests: defang pager tests by explicitly disabling the log.mailmap warning

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

Beat Bolli (2):
      unicode: update the width tables to Unicode 12.1
      grep: print the pcre2_jit_on value

Ben Avison (1):
      clone: add `--remote-submodules` flag

Boxuan Li (2):
      userdiff: add Octave
      userdiff: fix grammar and style issues

Carlo Marcelo Arenas Belón (6):
      fsmonitor: avoid signed integer overflow / infinite loop
      wrapper: avoid undefined behaviour in macOS
      trace2: correct typo in technical documentation
      xdiff: drop system includes in xutils.c
      xdiff: remove duplicate headers from xhistogram.c
      xdiff: remove duplicate headers from xpatience.c

Cesar Eduardo Barros (1):
      mingw: embed a manifest to trick UAC into Doing The Right Thing

Chris Mayo (1):
      send-email: update documentation of required Perl modules

Christian Couder (7):
      t/helper: add test-oidmap.c
      t: add t0016-oidmap.sh
      oidmap: use sha1hash() instead of static hash() function
      test-hashmap: remove 'hash' command
      doc: improve usage string in MyFirstContribution
      test-oidmap: remove 'add' subcommand
      t0016: add 'remove' subcommand test

Daniel Ferreira (1):
      dir-iterator: add tests for dir-iterator API

Denton Liu (5):
      git-format-patch.txt: document --no-notes option
      format-patch: teach format.notes config option
      config: learn the "onbranch:" includeIf condition
      config/alias.txt: change " and ' to `
      config/alias.txt: document alias accepting non-command first word

Derrick Stolee (50):
      commit-graph: fix the_repository reference
      revision: use generation for A..B --topo-order queries
      revision: keep topo-walk free of unintersting commits
      sha1-file: split OBJECT_INFO_FOR_PREFETCH
      repack: refactor pack deletion for future use
      Docs: rearrange subcommands for multi-pack-index
      multi-pack-index: prepare for 'expire' subcommand
      midx: simplify computation of pack name lengths
      midx: refactor permutation logic and pack sorting
      multi-pack-index: implement 'expire' subcommand
      multi-pack-index: prepare 'repack' subcommand
      midx: implement midx_repack()
      multi-pack-index: test expire while adding packs
      midx: add test that 'expire' respects .keep files
      t5319-multi-pack-index.sh: test batch size zero
      commit-graph: return with errors during write
      commit-graph: collapse parameters into flags
      commit-graph: remove Future Work section
      commit-graph: create write_commit_graph_context
      commit-graph: extract fill_oids_from_packs()
      commit-graph: extract fill_oids_from_commit_hex()
      commit-graph: extract fill_oids_from_all_packs()
      commit-graph: extract count_distinct_commits()
      commit-graph: extract copy_oids_to_commits()
      commit-graph: extract write_commit_graph_file()
      commit-graph: use raw_object_store when closing
      packfile: close commit-graph in close_all_packs
      packfile: rename close_all_packs to close_object_store
      commit-graph: document commit-graph chains
      commit-graph: prepare for commit-graph chains
      commit-graph: rename commit_compare to oid_compare
      commit-graph: load commit-graph chains
      commit-graph: add base graphs chunk
      commit-graph: rearrange chunk count logic
      commit-graph: write commit-graph chains
      commit-graph: add --split option to builtin
      commit-graph: merge commit-graph chains
      commit-graph: allow cross-alternate chains
      commit-graph: expire commit-graph files
      commit-graph: create options for split files
      commit-graph: verify chains with --shallow mode
      commit-graph: clean up chains after flattened write
      commit-graph: test octopus merges with --split
      commit-graph: test --split across alternate without --split
      commit-graph: normalize commit-graph filenames
      commit-graph: test verify across alternates
      fetch: add --[no-]show-forced-updates argument
      fetch: warn about forced updates in branch listing
      pull: add --[no-]show-forced-updates passthrough
      t5319: use 'test-tool path-utils' instead of 'ls -l'

Dimitriy Ryazantcev (1):
      l10n: localizable upload progress messages

Doug Ilijev (1):
      README: fix rendering of text in angle brackets

Dr. Adam Nielsen (1):
      gitignore.txt: make slash-rules more readable

Edmundo Carmona Antoranz (1):
      builtin/merge.c - cleanup of code in for-cycle that tests strategies

Elijah Newren (5):
      t9350: fix encoding test to actually test reencoding
      fast-import: support 'encoding' commit header
      fast-export: avoid stripping encoding header if we cannot reencode
      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
      fast-export: do automatic reencoding of commit messages only if requested

Emily Shaffer (7):
      documentation: add tutorial for first contribution
      documentation: add anchors to MyFirstContribution
      grep: fail if call could output and name is null
      doc: hint about GIT_DEBUGGER in CodingGuidelines
      doc: add some nit fixes to MyFirstContribution
      rev-list: teach --no-object-names to enable piping
      transport-helper: enforce atomic in push_refs_with_push

Eric Wong (3):
      update-server-info: avoid needless overwrites
      server-info: do not list unlinked packs
      repack: disable bitmaps-by-default if .keep files exist

Felipe Contreras (5):
      t5801 (remote-helpers): cleanup refspec stuff
      t5801 (remote-helpers): add test to fetch tags
      fetch: trivial cleanup
      fetch: make the code more understandable
      fetch: fix regression with transport helpers

Jakub Wilk (1):
      doc: don't use git.kernel.org as example gitweb URL

Jeff Hostetler (13):
      cache-tree/blame: avoid reusing the DEBUG constant
      msvc: mark a variable as non-const
      msvc: do not re-declare the timespec struct
      msvc: define ftello()
      msvc: fix detect_msys_tty()
      msvc: update Makefile to allow for spaces in the compiler path
      status: add status.aheadbehind setting
      status: warn when a/b calculation takes too long
      status: ignore status.aheadbehind in porcelain formats
      msvc: support building Git using MS Visual C++
      msvc: add a compile-time flag to allow detailed heap debugging
      msvc: do not pretend to support all signals
      msvc: ignore .dll and incremental compile output

Jeff King (56):
      cmd_{read,write}_tree: rename "unused" variable that is used
      builtin: consistently pass cmd_* prefix to parse_options
      submodule: drop unused prefix parameter from some functions
      clone: drop dest parameter from copy_alternates()
      read-cache: drop unused parameter from threaded load
      wt-status: drop unused status parameter
      mktree: drop unused length parameter
      name-rev: drop unused parameters from is_better_name()
      pack-objects: drop unused rev_info parameters
      receive-pack: drop unused "commands" from prepare_shallow_update()
      remove_all_fetch_refspecs(): drop unused "remote" parameter
      rev-list: drop unused void pointer from finish_commit()
      show-branch: drop unused parameter from show_independent()
      verify-commit: simplify parameters to run_gpg_verify()
      help_unknown_ref(): duplicate collected refnames
      help_unknown_ref(): check for refname ambiguity
      upload-pack: strip namespace from symref data
      am: simplify prompt response handling
      am: read interactive input from stdin
      am: drop tty requirement for --interactive
      am: fix --interactive HEAD tree resolution
      interpret-trailers: load default config
      verify-tag: drop signal.h include
      wt-status.h: drop stdio.h include
      describe: fix accidental oid/hash type-punning
      upload-pack: rename a "sha1" variable to "oid"
      pack-bitmap-write: convert some helpers to use object_id
      pack-objects: convert packlist_find() to use object_id
      pack-objects: convert locate_object_entry_hash() to object_id
      object: convert lookup_unknown_object() to use object_id
      object: convert lookup_object() to use object_id
      object: convert internal hash_obj() to object_id
      object: convert create_object() to use object_id
      khash: drop broken oid_map typedef
      khash: rename kh_oid_t to kh_oid_set
      delta-islands: convert island_marks khash to use oids
      pack-bitmap: convert khash_sha1 maps into kh_oid_map
      khash: drop sha1-specific map types
      khash: rename oid helper functions
      hash.h: move object_id definition from cache.h
      hashmap: convert sha1hash() to oidhash()
      delta-islands: respect progress flag
      blame: drop some unused function parameters
      object-store.h: move for_each_alternate_ref() from transport.h
      check_everything_connected: assume alternate ref tips are valid
      test-lib: introduce test_commit_bulk
      t5310: increase the number of bitmapped commits
      t3311: use test_commit_bulk
      t5702: use test_commit_bulk
      t5703: use test_commit_bulk
      t6200: use test_commit_bulk
      xdiff: clamp function context indices in post-image
      t: sort output of hashmap iteration
      t7700: clean up .keep file in bitmap-writing test
      repack: silence warnings when auto-enabled bitmaps cannot be built
      repack: simplify handling of auto-bitmaps and .keep files

Johannes Schindelin (47):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      bisect--helper: verify HEAD could be parsed before continuing
      fill_stat_cache_info(): prepare for an fsmonitor fix
      mark_fsmonitor_valid(): mark the index as changed if needed
      bundle verify: error out if called without an object database
      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
      kwset: allow building with GCC 8
      winansi: simplify loading the GetCurrentConsoleFontEx() function
      config: avoid calling `labs()` on too-large data type
      t3404: fix a typo
      mingw: fix a typo in the msysGit-specific section
      Mark .bat files as requiring CR/LF endings
      t0001 (mingw): do not expect a specific order of stdout/stderr
      obstack: fix compiler warning
      mingw: replace mingw_startup() hack
      msvc: fix dependencies of compat/msvc.c
      t0001: fix on case-insensitive filesystems
      msvc: avoid debug assertion windows in Debug Mode
      mingw: enable stack smashing protector
      mingw: get pw_name in UTF-8 format
      mingw: use Unicode functions explicitly
      rebase --am: ignore rebase.rescheduleFailedExec
      mingw: fix possible buffer overrun when calling `GetUserNameW()`
      diff: munmap() file contents before running external diff
      mingw: support spawning programs containing spaces in their names
      clean: show an error message when the path is too long
      rebase: fix white-space
      git: mark cmd_rebase as requiring a worktree
      Vcproj.pm: auto-generate GUIDs
      Vcproj.pm: do not configure VCWebServiceProxyGeneratorTool
      Vcproj.pm: urlencode '<' and '>' when generating VC projects
      contrib/buildsystems: ignore irrelevant files in Generators/
      contrib/buildsystems: error out on unknown option
      contrib/buildsystems: handle libiconv, too
      contrib/buildsystems: also handle -lexpat
      contrib/buildsystems: handle options starting with a slash
      contrib/buildsystems: add a backend for modern Visual Studio versions
      msvc: add a Makefile target to pre-generate the Visual Studio solution
      vcxproj: also link-or-copy builtins
      .gitignore: ignore Visual Studio's temporary/generated files
      bin-wrappers: append `.exe` to target paths if necessary
      git: avoid calling aliased builtins via their dashed form
      config: work around bug with includeif:onbranch and early config

Johannes Sixt (5):
      userdiff: two simplifications of patterns for rust
      t7610-mergetool: do not place pipelines headed by `yes` in subshells
      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
      mergetool: dissect strings with shell variable magic instead of `expr`
      mergetool: use shell variable magic instead of `awk`

John Lin (1):
      status: remove the empty line after hints

Jonathan Tan (5):
      t5616: refactor packfile replacement
      index-pack: prefetch missing REF_DELTA bases
      t5616: use correct flag to check object is missing
      t5616: cover case of client having delta base
      t5551: test usage of chunked encoding explicitly

Josh Steadmon (1):
      trace2: correct trace2 field name documentation

Junio C Hamano (18):
      The first batch after 2.22
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      transport-helper: avoid var decl in for () loop control
      rm: resolving by removal is not a warning-worthy event
      CodingGuidelines: spell out post-C89 rules
      The sixth batch
      The seventh batch
      Flush fixes up to the third batch post 2.22.0
      Merge fixes made on the 'master' front
      Git 2.23-rc0
      test-dir-iterator: do not assume errno values
      A few more last-minute fixes
      log: flip the --mailmap default unconditionally
      log: really flip the --mailmap default
      Git 2.23-rc1

Karsten Blees (2):
      gettext: always use UTF-8 on native Windows
      mingw: initialize HOME on startup

Marc-André Lureau (1):
      userdiff: add built-in pattern for rust

Martin Ågren (3):
      ref-filter: fix memory leak in `free_array_item()`
      RelNotes/2.21.1: typofix
      RelNotes/2.23.0: fix a few typos and other minor issues

Matheus Tavares (8):
      clone: better handle symlinked files at .git/objects/
      dir-iterator: use warning_errno when possible
      dir-iterator: refactor state machine model
      dir-iterator: add flags parameter to dir_iterator_begin
      clone: copy hidden paths at local clone
      clone: extract function from copy_or_link_directory
      clone: use dir-iterator to avoid explicit dir traversal
      clone: replace strcmp by fspathcmp

Matthew DeVore (5):
      list-objects-filter-options: error is localizeable
      list-objects-filter: correct usage of ALLOC_GROW
      url: do not read past end of buffer
      url: do not allow %00 to represent NUL in URLs
      ref-filter: sort detached HEAD lines firstly

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

Michael Osipov (1):
      configure: Detect linking style for HP aCC on HP-UX

Michael Platings (2):
      blame: add a fingerprint heuristic to match ignored lines
      t8014: remove unnecessary braces

Miguel Ojeda (1):
      clang-format: use git grep to generate the ForEachMacros list

Mike Hommey (2):
      dup() the input fd for fast-import used for remote helpers
      Use xmmap_gently instead of xmmap in use_pack

Mike Mueller (1):
      p4 unshelve: fix "Not a valid object name HEAD0" on Windows

Morian Sonnet (1):
      submodule foreach: fix recursion of options

Nguyễn Thái Ngọc Duy (63):
      git-checkout.txt: spell out --no-option
      git-checkout.txt: fix one syntax line
      doc: document --overwrite-ignore
      git-checkout.txt: fix monospace typeset
      t: rename t2014-switch.sh to t2014-checkout-switch.sh
      checkout: advice how to get out of detached HEAD mode
      checkout: inform the user when removing branch state
      checkout: keep most #include sorted
      checkout: factor out some code in parse_branchname_arg()
      checkout: make "opts" in cmd_checkout() a pointer
      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
      checkout: split options[] array in three pieces
      checkout: split part of it to new command 'switch'
      switch: better names for -b and -B
      switch: add --discard-changes
      switch: remove -l
      switch: stop accepting pathspec
      switch: reject "do nothing" case
      switch: only allow explicit detached HEAD
      switch: add short option for --detach
      switch: implicit dwim, use --no-guess to disable it
      switch: no worktree status unless real branch switch happens
      switch: reject if some operation is in progress
      switch: make --orphan switch to an empty tree
      t: add tests for switch
      completion: support switch
      doc: promote "git switch"
      checkout: split part of it to new command 'restore'
      restore: take tree-ish from --source option instead
      restore: make pathspec mandatory
      restore: disable overlay mode by default
      checkout: factor out worktree checkout code
      restore: add --worktree and --staged
      restore: reject invalid combinations with --staged
      restore: default to --source=HEAD when only --staged is specified
      restore: replace --force with --ignore-unmerged
      restore: support --patch
      t: add tests for restore
      completion: support restore
      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
      doc: promote "git restore"
      help: move git-diff and git-reset to different groups
      Declare both git-switch and git-restore experimental
      merge: remove drop_save() in favor of remove_merge_branch_state()
      init: make --template path relative to $CWD
      worktree add: sanitize worktree names
      worktree add: be tolerant of corrupt worktrees
      merge: add --quit
      completion: do not cache if --git-completion-helper fails
      fetch: only run 'gc' once when fetching multiple remotes
      t2027: use test_must_be_empty
      switch: allow to switch in the middle of bisect
      completion: disable dwim on "git switch -d"
      fetch-pack: move capability names out of i18n strings
      fetch-pack: print all relevant supported capabilities with -v -v
      fetch-pack: print server version at the top in -v -v
      sha1-file.c: remove the_repo from read_object_with_reference()
      tree-walk.c: remove the_repo from fill_tree_descriptor()
      tree-walk.c: remove the_repo from get_tree_entry()
      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
      match-trees.c: remove the_repo from shift_tree*()
      Use the right 'struct repository' instead of the_repository
      t7814: do not generate same commits in different repos

Nickolai Belakovski (3):
      ref-filter: add worktreepath atom
      branch: update output to include worktree info
      branch: add worktree info on verbose output

Paolo Bonzini (2):
      request-pull: quote regex metacharacters in local ref
      request-pull: warn if the remote object is not the same as the local one

Philip Oakley (15):
      git.c: show usage for accessing the git(1) help page
      Doc: git.txt: remove backticks from link and add git-scm.com/docs
      doc branch: provide examples for listing remote tracking branches
      msvc: include sigset_t definition
      msvc: define O_ACCMODE
      msvc: add pragmas for common warnings
      Vcproj.pm: list git.exe first to be startup project
      contrib/buildsystems: ignore invalidcontinue.obj
      contrib/buildsystems: fix misleading error message
      contrib/buildsystems: handle quoted spaces in filenames
      contrib/buildsystems: ignore gettext stuff
      contrib/buildsystems: redirect errors of the dry run into a log file
      contrib/buildsystems: optionally capture the dry-run in a file
      contrib/buildsystems: handle the curl library option
      .gitignore: touch up the entries regarding Visual Studio

Phillip Wood (12):
      rebase: fix a memory leak
      rebase: warn if state directory cannot be removed
      sequencer: return errors from sequencer_remove_state()
      rebase --abort/--quit: cleanup refs/rewritten
      rebase -r: always reword merge -c
      add -p: fix checkout -p with pathological context
      show --continue/skip etc. consistently in synopsis
      sequencer: always allow tab after command name
      sequencer: factor out todo command name parsing
      status: do not report errors in sequencer/todo
      git-prompt: improve cherry-pick/revert detection
      t3420: remove progress lines before comparing output

Quentin Nerden (2):
      docs: git-clone: refer to long form of options
      docs: git-clone: list short form of options first

Ramsay Jones (1):
      env--helper: mark a file-local symbol as static

René Scharfe (6):
      cleanup: fix possible overflow errors in binary search, part 2
      coccinelle: use COPY_ARRAY for copying arrays
      use COPY_ARRAY for copying arrays
      config: use unsigned_mult_overflows to check for overflows
      config: don't multiply in parse_unit_factor()
      config: simplify parsing of unit factors

Robert Morgan (1):
      gpg(docs): use correct --verify syntax

Rohit Ashiwal (5):
      sequencer: add advice for revert
      sequencer: rename reset_for_rollback to reset_merge
      sequencer: use argv_array in reset_merge
      cherry-pick/revert: add --skip option
      cherry-pick/revert: advise using --skip

SZEDER Gábor (12):
      t3404: modernize here doc style
      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
      pager: add a helper function to clear the last line in the terminal
      t5551: use 'test_i18ngrep' to check translated output
      rebase: fix garbled progress display with '-x'
      progress: use term_clear_line()
      Document that 'git -C ""' works and doesn't change directory
      ci: don't update Homebrew
      ci: disable Homebrew's auto cleanup
      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
      travis-ci: build with GCC 4.8 as well
      Documentation/git-fsck.txt: include fsck.* config variables

Simon Williams (1):
      git-p4: allow unshelving of branched files

Stephen Boyd (2):
      format-patch: inform user that patch-id generation is unstable
      format-patch: make --base patch-id output stable

Steven Roberts (1):
      gpg-interface: do not scan past the end of buffer

Taylor Blau (1):
      ref-filter.c: find disjoint pattern prefixes

Thomas Gummerer (16):
      stash: fix show referencing stash index
      apply: replace marc.info link with public-inbox
      apply: only pass required data to skip_tree_prefix
      apply: only pass required data to git_header_name
      apply: only pass required data to check_header_line
      apply: only pass required data to find_name_*
      apply: only pass required data to gitdiff_* functions
      apply: make parse_git_diff_header public
      range-diff: fix function parameter indentation
      range-diff: split lines manually
      range-diff: don't remove funcname from inner diff
      range-diff: suppress line count in outer diff
      range-diff: add section header instead of diff header
      range-diff: add filename to inner diff
      range-diff: add headers to the outer hunk header
      stash: fix handling removed files with --keep-index

Tigran Mkrtchyan (1):
      tag: add tag.gpgSign config option to force all tags be GPG-signed

Varun Naik (1):
      read-cache.c: do not die if mmap fails

Vishal Verma (1):
      merge: refuse --commit with --squash

Xin Li (1):
      clone: respect user supplied origin name when setting up partial clone

brian m. carlson (10):
      t: add helper to convert object IDs to paths
      t1410: make hash size independent
      t1450: make hash size independent
      t5000: make hash independent
      t6030: make test work with SHA-256
      t0027: make hash size independent
      t0090: make test pass with SHA-256
      t1007: remove SHA1 prerequisites
      t1710: make hash independent
      t2203: avoid hard-coded object ID values

Ævar Arnfjörð Bjarmason (21):
      send-email: move the read_config() function above getopts
      send-email: rename the @bcclist variable for consistency
      send-email: do defaults -> config -> getopt in that order
      tests: add a special setup where prerequisites fail
      Makefile: remove the NO_R_TO_GCC_LINKER flag
      send-email: remove cargo-culted multi-patch pattern in tests
      send-email: fix broken transferEncoding tests
      send-email: document --no-[to|cc|bcc]
      hash-object doc: stop mentioning git-cvsimport
      send-email: fix regression in sendemail.identity parsing
      Revert "test-lib: whitelist GIT_TR2_* in the environment"
      config tests: simplify include cycle test
      env--helper: new undocumented builtin wrapping git_env_*()
      config.c: refactor die_bad_number() to not call gettext() early
      t6040 test: stop using global "script" variable
      tests: make GIT_TEST_GETTEXT_POISON a boolean
      tests README: re-flow a previously changed paragraph
      tests: replace test_tristate with "git env--helper"
      tests: make GIT_TEST_FAIL_PREREQS a boolean
      tests: mark two failing tests under FAIL_PREREQS
      clone: test for our behavior on odd objects/* content


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.23.0-rc0
@ 2019-07-29 21:49  2% Junio C Hamano
  0 siblings, 0 replies; 42+ results
From: Junio C Hamano @ 2019-07-29 21:49 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.23.0-rc0 is now available for
testing at the usual places.  It is comprised of 420 non-merge
commits since v2.22.0, contributed by 62 people, 23 of which are
new faces.

The tarballs are found at:

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

The following public repositories all have a copy of the
'v2.23.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.22.0 are as follows.
Welcome to the Git development community!

  Ariadne Conill, Barret Rhoden, Ben Avison, Daniel Ferreira, Doug
  Ilijev, Dr. Adam Nielsen, Jakub Wilk, John Lin, Matheus Tavares,
  Mazo, Andrey, Michael Osipov, Michael Platings, Miguel Ojeda,
  Mike Mueller, Morian Sonnet, Quentin Nerden, Robert Morgan,
  Simon Williams, Steven Roberts, Tigran Mkrtchyan, Varun Naik,
  Vishal Verma, and Xin Li.

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

  Ævar Arnfjörð Bjarmason, Beat Bolli, Boxuan Li, Carlo Marcelo
  Arenas Belón, Cesar Eduardo Barros, Chris Mayo, Christian
  Couder, Denton Liu, Derrick Stolee, Dimitriy Ryazantcev,
  Edmundo Carmona Antoranz, Elijah Newren, Emily Shaffer, Eric
  Wong, Felipe Contreras, Jeff Hostetler, Jeff King, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Josh Steadmon, Junio
  C Hamano, Karsten Blees, Marc-André Lureau, Martin Ågren,
  Matthew DeVore, Mike Hommey, Nguyễn Thái Ngọc Duy, Nickolai
  Belakovski, Paolo Bonzini, Philip Oakley, Phillip Wood, Ramsay
  Jones, René Scharfe, Rohit Ashiwal, Stephen Boyd, SZEDER Gábor,
  Taylor Blau, and Thomas Gummerer.

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

Git 2.23 Release Notes (draft)
==============================

Updates since v2.22
-------------------

Backward compatibility note

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


UI, Workflows & Features

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

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

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

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

 * The code to show args with potential typo that cannot be
   interpreted as a commit-ish has been improved.

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

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

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

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

 * "git status" can be told a non-standard default value for the
   "--[no-]ahead-behind" option with a new configuration variable
   status.aheadBehind.

 * "git fetch" and "git pull" reports when a fetch results in
   non-fast-forward updates to let the user notice unusual situation.
   The commands learned "--no-shown-forced-updates" option to disable
   this safety feature.

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

 * "git branch --list" learned to always output the detached HEAD as
   the first item (when the HEAD is detached, of course), regardless
   of the locale.

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

 * "git rev-list --objects" learned with "--no-object-names" option to
   squelch the path to the object that is used as a grouping hint for
   pack-objects.

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

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

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

 * "git cherry-pick/revert" learned a new "--skip" action.

 * The tips of refs from the alternate object store can be used as
   starting point for reachability computation now.

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

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

 * The "git log" command learns to issue a warning when log.mailmap
   configuration is not set and --[no-]mailmap option is not used, to
   prepare users for future versions of Git that uses the mailmap by
   default.

 * "git range-diff" output has been tweaked for easier identification
   of which part of what file the patch shown is about.


Performance, Internal Implementation, Development Support etc.

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

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

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

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

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

 * A new tutorial targetting specifically aspiring git-core
   developers has been added.

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

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

 * Dev support update to help tracing out tests.

 * Support to build with MSVC has been updated.

 * "git fetch" that grabs from a group of remotes learned to run the
   auto-gc only once at the very end.

 * A handful of Windows build patches have been upstreamed.

 * The code to read state files used by the sequencer machinery for
   "git status" has been made more robust against a corrupt or stale
   state files.

 * "git for-each-ref" with multiple patterns have been optimized.

 * The tree-walk API learned to pass an in-core repository
   instance throughout more codepaths.

 * When one step in multi step cherry-pick or revert is reset or
   committed, the command line prompt script failed to notice the
   current status, which has been improved.

 * Many GIT_TEST_* environment variables control various aspects of
   how our tests are run, but a few followed "non-empty is true, empty
   or unset is false" while others followed the usual "there are a few
   ways to spell true, like yes, on, etc., and also ways to spell
   false, like no, off, etc." convention.

 * Adjust the dir-iterator API and apply it to the local clone
   optimization codepath.

 * We have been trying out a few language features outside c89; the
   coding guidelines document did not talk about them and instead had
   a blanket ban against them.
   (merge cc0c42975a jc/post-c89-rules-doc later to maint).

 * A test helper has been introduced to optimize preparation of test
   repositories with many simple commits, and a handful of test
   scripts have been updated to use it.


Fixes since v2.22
-----------------

 * 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.
   (merge e1df7fe43f nd/init-relative-template-fix later to maint).

 * "git worktree add" used to fail when another worktree connected to
   the same repository was corrupt, which has been corrected.
   (merge 105df73e71 nd/corrupt-worktrees later to maint).

 * 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.
   (merge 3203566a71 mh/import-transport-fd-fix later to maint).

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

 * Code cleanup and futureproof.
   (merge 31f5256c82 ds/object-info-for-prefetch-fix later to maint).

 * More parameter validation.
   (merge de99eb0c24 es/grep-require-name-when-needed later to maint).

 * "git update-server-info" used to leave stale packfiles in its
   output, which has been corrected.
   (merge e941c48d49 ew/server-info-remove-crufts later to maint).

 * 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.
   (merge 533e088250 jk/HEAD-symref-in-xfer-namespaces later to maint).

 * "git am -i --resolved" segfaulted after trying to see a commit as
   if it were a tree, which has been corrected.
   (merge 7663e438c5 jk/am-i-resolved-fix later to maint).

 * "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.
   (merge 3bbbe467f2 js/bundle-verify-require-object-store later to maint).

 * "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.
   (merge 1d14d0c994 vv/merge-squash-with-explicit-commit later to maint).

 * The data collected by fsmonitor was not properly written back to
   the on-disk index file, breaking t7519 tests occasionally, which
   has been corrected.
   (merge b5a8169752 js/fsmonitor-unflake later to maint).

 * Update to Unicode 12.1 width table.
   (merge 5817f9caa3 bb/unicode-12.1-reiwa later to maint).

 * 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.
   (merge c3f2358de3 mm/p4-unshelve-windows-fix later to maint).

 * "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.
   (merge 0454220d66 pb/request-pull-verify-remote-ref later to maint).

 * 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.
   (merge 1c4a9f9114 xl/record-partial-clone-origin later to maint).

 * "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.
   (merge 810e19322d jt/partial-clone-missing-ref-delta-base later to maint).

 * 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.
   (merge 7140600e2e md/list-objects-filter-memfix later to maint).

 * The description about slashes in gitignore patterns (used to
   indicate things like "anchored to this level only" and "only
   matches directories") has been revamped.
   (merge 1a58bad014 an/ignore-doc-update later to maint).

 * The URL decoding code has been updated to avoid going past the end
   of the string while parsing %-<hex>-<hex> sequence.
   (merge d37dc239a4 md/url-parse-harden later to maint).

 * The list of for-each like macros used by clang-format has been
   updated.
   (merge fc7e03aace mo/clang-format-for-each-update later to maint).

 * "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.
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).

 * Code restructuring during 2.20 period broke fetching tags via
   "import" based transports.
   (merge f80d922355 fc/fetch-with-import-fix later to maint).

 * 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.
   (merge 2d511cfc0b ds/close-object-store later to maint).

 * "git checkout -p" needs to selectively apply a patch in reverse,
   which did not work well.
   (merge 2bd69b9024 pw/add-p-recount later to maint).

 * Code clean-up to avoid signed integer wraparounds during binary search.
   (merge 568a05c5ec rs/avoid-overflow-in-midpoint-computation later to maint).

 * "git interpret-trailers" always treated '#' as the comment
   character, regardless of core.commentChar setting, which has been
   corrected.
   (merge 29c83fc23f jk/trailers-use-config later to maint).

 * "git stash show 23" used to work, but no more after getting
   rewritten in C; this regression has been corrected.
   (merge 63b50c8ffe tg/stash-ref-by-index-fix later to maint).

 * "git rebase --abort" used to leave refs/rewritten/ when concluding
   "git rebase -r", which has been corrected.
   (merge d559f502c5 pw/rebase-abort-clean-rewritten later to maint).

 * 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.
   (merge 69702523af nd/completion-no-cache-failure later to maint).

 * The code to parse scaled numbers out of configuration files has
   been made more robust and also easier to follow.
   (merge 39c575c969 rs/config-unit-parsing later to maint).

 * The codepath to compute delta islands used to spew progress output
   without giving the callers any way to squelch it, which has been
   fixed.
   (merge bdbdf42f8a jk/delta-islands-progress-fix later to maint).

 * Protocol capabilities that go over wire should never be translated,
   but it was incorrectly marked for translation, which has been
   corrected.  The output of protocol capabilities for debugging has
   been tweaked a bit.

 * Use "Erase in Line" CSI sequence that is already used in the editor
   support to clear cruft in the progress output.
   (merge 5b12e3123b sg/rebase-progress later to maint).

 * "git submodule foreach" did not protect command line options passed
   to the command to be run in each submodule correctly, when the
   "--recursive" option was in use.
   (merge 30db18b148 ms/submodule-foreach-fix later to maint).

 * The configuration variable rebase.rescheduleFailedExec should be
   effective only while running an interactive rebase and should not
   affect anything when running an non-interactive one, which was not
   the case.  This has been corrected.
   (merge 906b63942a js/rebase-reschedule-applies-only-to-interactive later to maint).

 * The "git clone" documentation refers to command line options in its
   description in the short form; they have been replaced with long
   forms to make them more recognisable.
   (merge bfc8c84ed5 qn/clone-doc-use-long-form later to maint).

 * Generation of pack bitmaps are now disabled when .keep files exist,
   as these are mutually exclusive features.
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).

 * "git rm" to resolve a conflicted path leaked an internal message
   "needs merge" before actually removing the path, which was
   confusing.  This has been corrected.
   (merge b2b1f615ce jc/denoise-rm-to-resolve later to maint).

 * "git stash --keep-index" did not work correctly on paths that have
   been removed, which has been fixed.
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).

 * Window 7 update ;-)
   (merge eb7c786314 js/mingw-spawn-with-spaces-in-path later to maint).

 * A codepath that reads from GPG for signed object verification read
   past the end of allocated buffer, which has been fixed.
   (merge 64c45dc72e sr/gpg-interface-stop-at-the-end later to maint).

 * "git clean" silently skipped a path when it cannot lstat() it; now
   it gives a warning.
   (merge b09364c47a js/clean-report-too-long-a-path later to maint).

 * "git push --atomic" that goes over the transport-helper (namely,
   the smart http transport) failed to prevent refs to be pushed when
   it can locally tell that one of the ref update will fail without
   having to consult the other end, which has been corrected.
   (merge 2581ea3d31 es/local-atomic-push-failure-with-http later to maint).

 * The internal diff machinery can be made to read out of bounds while
   looking for --funcion-context line in a corner case, which has been
   corrected.
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f547101b26 es/git-debugger-doc later to maint).
   (merge 7877ac3d7b js/bisect-helper-check-get-oid-return-value later to maint).
   (merge 0108f47eb3 sw/git-p4-unshelve-branched-files later to maint).
   (merge 9df8f734fd cm/send-email-document-req-modules later to maint).
   (merge afc3bf6eb1 ab/hash-object-doc later to maint).
   (merge 1fde99cfc7 po/doc-branch later to maint).
   (merge 459842e1c2 dl/config-alias-doc later to maint).
   (merge 5d137fc2c7 cb/fsmonitor-intfix later to maint).
   (merge 921d49be86 rs/copy-array later to maint).
   (merge cc8d872e69 js/t3404-typofix later to maint).
   (merge 729a9b558b cb/mkstemps-uint-type-fix later to maint).
   (merge 9dae4fe79f js/gcc-8-and-9 later to maint).
   (merge ed33bd8f30 js/t0001-case-insensitive later to maint).
   (merge dfa880e336 jw/gitweb-sample-update later to maint).
   (merge e532a90a9f sg/t5551-fetch-smart-error-is-translated later to maint).
   (merge 8d45ad8c29 jt/t5551-test-chunked later to maint).
   (merge 1a64e07d23 sg/git-C-empty-doc later to maint).
   (merge 37a2e35395 sg/ci-brew-gcc-workaround later to maint).
   (merge 24df0d49c4 js/trace2-signo-typofix later to maint).
   (merge fbec05c210 cc/test-oidmap later to maint).
   (merge 7926cee904 di/readme-markup-fix later to maint).
   (merge 02638d1e11 vn/xmmap-gently later to maint).
   (merge f7bf24d4dd rm/gpg-program-doc-fix later to maint).
   (merge 3aef54e8b8 js/unmap-before-ext-diff later to maint).

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

Changes since v2.22.0 are as follows:

Ariadne Conill (3):
      log: add warning for unspecified log.mailmap setting
      documentation: mention --no-use-mailmap and log.mailmap false setting
      tests: defang pager tests by explicitly disabling the log.mailmap warning

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

Beat Bolli (2):
      unicode: update the width tables to Unicode 12.1
      grep: print the pcre2_jit_on value

Ben Avison (1):
      clone: add `--remote-submodules` flag

Boxuan Li (2):
      userdiff: add Octave
      userdiff: fix grammar and style issues

Carlo Marcelo Arenas Belón (3):
      fsmonitor: avoid signed integer overflow / infinite loop
      wrapper: avoid undefined behaviour in macOS
      trace2: correct typo in technical documentation

Cesar Eduardo Barros (1):
      mingw: embed a manifest to trick UAC into Doing The Right Thing

Chris Mayo (1):
      send-email: update documentation of required Perl modules

Christian Couder (7):
      t/helper: add test-oidmap.c
      t: add t0016-oidmap.sh
      oidmap: use sha1hash() instead of static hash() function
      test-hashmap: remove 'hash' command
      doc: improve usage string in MyFirstContribution
      test-oidmap: remove 'add' subcommand
      t0016: add 'remove' subcommand test

Daniel Ferreira (1):
      dir-iterator: add tests for dir-iterator API

Denton Liu (5):
      git-format-patch.txt: document --no-notes option
      format-patch: teach format.notes config option
      config: learn the "onbranch:" includeIf condition
      config/alias.txt: change " and ' to `
      config/alias.txt: document alias accepting non-command first word

Derrick Stolee (50):
      commit-graph: fix the_repository reference
      revision: use generation for A..B --topo-order queries
      revision: keep topo-walk free of unintersting commits
      sha1-file: split OBJECT_INFO_FOR_PREFETCH
      repack: refactor pack deletion for future use
      Docs: rearrange subcommands for multi-pack-index
      multi-pack-index: prepare for 'expire' subcommand
      midx: simplify computation of pack name lengths
      midx: refactor permutation logic and pack sorting
      multi-pack-index: implement 'expire' subcommand
      multi-pack-index: prepare 'repack' subcommand
      midx: implement midx_repack()
      multi-pack-index: test expire while adding packs
      midx: add test that 'expire' respects .keep files
      t5319-multi-pack-index.sh: test batch size zero
      commit-graph: return with errors during write
      commit-graph: collapse parameters into flags
      commit-graph: remove Future Work section
      commit-graph: create write_commit_graph_context
      commit-graph: extract fill_oids_from_packs()
      commit-graph: extract fill_oids_from_commit_hex()
      commit-graph: extract fill_oids_from_all_packs()
      commit-graph: extract count_distinct_commits()
      commit-graph: extract copy_oids_to_commits()
      commit-graph: extract write_commit_graph_file()
      commit-graph: use raw_object_store when closing
      packfile: close commit-graph in close_all_packs
      packfile: rename close_all_packs to close_object_store
      commit-graph: document commit-graph chains
      commit-graph: prepare for commit-graph chains
      commit-graph: rename commit_compare to oid_compare
      commit-graph: load commit-graph chains
      commit-graph: add base graphs chunk
      commit-graph: rearrange chunk count logic
      commit-graph: write commit-graph chains
      commit-graph: add --split option to builtin
      commit-graph: merge commit-graph chains
      commit-graph: allow cross-alternate chains
      commit-graph: expire commit-graph files
      commit-graph: create options for split files
      commit-graph: verify chains with --shallow mode
      commit-graph: clean up chains after flattened write
      commit-graph: test octopus merges with --split
      commit-graph: test --split across alternate without --split
      commit-graph: normalize commit-graph filenames
      commit-graph: test verify across alternates
      fetch: add --[no-]show-forced-updates argument
      fetch: warn about forced updates in branch listing
      pull: add --[no-]show-forced-updates passthrough
      t5319: use 'test-tool path-utils' instead of 'ls -l'

Dimitriy Ryazantcev (1):
      l10n: localizable upload progress messages

Doug Ilijev (1):
      README: fix rendering of text in angle brackets

Dr. Adam Nielsen (1):
      gitignore.txt: make slash-rules more readable

Edmundo Carmona Antoranz (1):
      builtin/merge.c - cleanup of code in for-cycle that tests strategies

Elijah Newren (5):
      t9350: fix encoding test to actually test reencoding
      fast-import: support 'encoding' commit header
      fast-export: avoid stripping encoding header if we cannot reencode
      fast-export: differentiate between explicitly UTF-8 and implicitly UTF-8
      fast-export: do automatic reencoding of commit messages only if requested

Emily Shaffer (7):
      documentation: add tutorial for first contribution
      documentation: add anchors to MyFirstContribution
      grep: fail if call could output and name is null
      doc: hint about GIT_DEBUGGER in CodingGuidelines
      doc: add some nit fixes to MyFirstContribution
      rev-list: teach --no-object-names to enable piping
      transport-helper: enforce atomic in push_refs_with_push

Eric Wong (3):
      update-server-info: avoid needless overwrites
      server-info: do not list unlinked packs
      repack: disable bitmaps-by-default if .keep files exist

Felipe Contreras (5):
      t5801 (remote-helpers): cleanup refspec stuff
      t5801 (remote-helpers): add test to fetch tags
      fetch: trivial cleanup
      fetch: make the code more understandable
      fetch: fix regression with transport helpers

Jakub Wilk (1):
      doc: don't use git.kernel.org as example gitweb URL

Jeff Hostetler (13):
      cache-tree/blame: avoid reusing the DEBUG constant
      msvc: mark a variable as non-const
      msvc: do not re-declare the timespec struct
      msvc: define ftello()
      msvc: fix detect_msys_tty()
      msvc: update Makefile to allow for spaces in the compiler path
      status: add status.aheadbehind setting
      status: warn when a/b calculation takes too long
      status: ignore status.aheadbehind in porcelain formats
      msvc: support building Git using MS Visual C++
      msvc: add a compile-time flag to allow detailed heap debugging
      msvc: do not pretend to support all signals
      msvc: ignore .dll and incremental compile output

Jeff King (50):
      cmd_{read,write}_tree: rename "unused" variable that is used
      builtin: consistently pass cmd_* prefix to parse_options
      submodule: drop unused prefix parameter from some functions
      clone: drop dest parameter from copy_alternates()
      read-cache: drop unused parameter from threaded load
      wt-status: drop unused status parameter
      mktree: drop unused length parameter
      name-rev: drop unused parameters from is_better_name()
      pack-objects: drop unused rev_info parameters
      receive-pack: drop unused "commands" from prepare_shallow_update()
      remove_all_fetch_refspecs(): drop unused "remote" parameter
      rev-list: drop unused void pointer from finish_commit()
      show-branch: drop unused parameter from show_independent()
      verify-commit: simplify parameters to run_gpg_verify()
      help_unknown_ref(): duplicate collected refnames
      help_unknown_ref(): check for refname ambiguity
      upload-pack: strip namespace from symref data
      am: simplify prompt response handling
      am: read interactive input from stdin
      am: drop tty requirement for --interactive
      am: fix --interactive HEAD tree resolution
      interpret-trailers: load default config
      describe: fix accidental oid/hash type-punning
      upload-pack: rename a "sha1" variable to "oid"
      pack-bitmap-write: convert some helpers to use object_id
      pack-objects: convert packlist_find() to use object_id
      pack-objects: convert locate_object_entry_hash() to object_id
      object: convert lookup_unknown_object() to use object_id
      object: convert lookup_object() to use object_id
      object: convert internal hash_obj() to object_id
      object: convert create_object() to use object_id
      khash: drop broken oid_map typedef
      khash: rename kh_oid_t to kh_oid_set
      delta-islands: convert island_marks khash to use oids
      pack-bitmap: convert khash_sha1 maps into kh_oid_map
      khash: drop sha1-specific map types
      khash: rename oid helper functions
      hash.h: move object_id definition from cache.h
      hashmap: convert sha1hash() to oidhash()
      delta-islands: respect progress flag
      blame: drop some unused function parameters
      object-store.h: move for_each_alternate_ref() from transport.h
      check_everything_connected: assume alternate ref tips are valid
      test-lib: introduce test_commit_bulk
      t5310: increase the number of bitmapped commits
      t3311: use test_commit_bulk
      t5702: use test_commit_bulk
      t5703: use test_commit_bulk
      t6200: use test_commit_bulk
      xdiff: clamp function context indices in post-image

Johannes Schindelin (32):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      bisect--helper: verify HEAD could be parsed before continuing
      fill_stat_cache_info(): prepare for an fsmonitor fix
      mark_fsmonitor_valid(): mark the index as changed if needed
      bundle verify: error out if called without an object database
      poll (mingw): allow compiling with GCC 8 and DEVELOPER=1
      kwset: allow building with GCC 8
      winansi: simplify loading the GetCurrentConsoleFontEx() function
      config: avoid calling `labs()` on too-large data type
      t3404: fix a typo
      mingw: fix a typo in the msysGit-specific section
      Mark .bat files as requiring CR/LF endings
      t0001 (mingw): do not expect a specific order of stdout/stderr
      obstack: fix compiler warning
      mingw: replace mingw_startup() hack
      msvc: fix dependencies of compat/msvc.c
      t0001: fix on case-insensitive filesystems
      msvc: avoid debug assertion windows in Debug Mode
      mingw: enable stack smashing protector
      mingw: get pw_name in UTF-8 format
      mingw: use Unicode functions explicitly
      rebase --am: ignore rebase.rescheduleFailedExec
      mingw: fix possible buffer overrun when calling `GetUserNameW()`
      diff: munmap() file contents before running external diff
      mingw: support spawning programs containing spaces in their names
      clean: show an error message when the path is too long
      rebase: fix white-space
      git: mark cmd_rebase as requiring a worktree

Johannes Sixt (5):
      userdiff: two simplifications of patterns for rust
      t7610-mergetool: do not place pipelines headed by `yes` in subshells
      t7610-mergetool: use test_cmp instead of test $(cat file) = $txt
      mergetool: dissect strings with shell variable magic instead of `expr`
      mergetool: use shell variable magic instead of `awk`

John Lin (1):
      status: remove the empty line after hints

Jonathan Tan (5):
      t5616: refactor packfile replacement
      index-pack: prefetch missing REF_DELTA bases
      t5616: use correct flag to check object is missing
      t5616: cover case of client having delta base
      t5551: test usage of chunked encoding explicitly

Josh Steadmon (1):
      trace2: correct trace2 field name documentation

Junio C Hamano (13):
      The first batch after 2.22
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      transport-helper: avoid var decl in for () loop control
      rm: resolving by removal is not a warning-worthy event
      CodingGuidelines: spell out post-C89 rules
      The sixth batch
      The seventh batch
      Flush fixes up to the third batch post 2.22.0
      Merge fixes made on the 'master' front
      Git 2.23-rc0

Karsten Blees (2):
      gettext: always use UTF-8 on native Windows
      mingw: initialize HOME on startup

Marc-André Lureau (1):
      userdiff: add built-in pattern for rust

Martin Ågren (1):
      ref-filter: fix memory leak in `free_array_item()`

Matheus Tavares (8):
      clone: better handle symlinked files at .git/objects/
      dir-iterator: use warning_errno when possible
      dir-iterator: refactor state machine model
      dir-iterator: add flags parameter to dir_iterator_begin
      clone: copy hidden paths at local clone
      clone: extract function from copy_or_link_directory
      clone: use dir-iterator to avoid explicit dir traversal
      clone: replace strcmp by fspathcmp

Matthew DeVore (5):
      list-objects-filter-options: error is localizeable
      list-objects-filter: correct usage of ALLOC_GROW
      url: do not read past end of buffer
      url: do not allow %00 to represent NUL in URLs
      ref-filter: sort detached HEAD lines firstly

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

Michael Osipov (1):
      configure: Detect linking style for HP aCC on HP-UX

Michael Platings (2):
      blame: add a fingerprint heuristic to match ignored lines
      t8014: remove unnecessary braces

Miguel Ojeda (1):
      clang-format: use git grep to generate the ForEachMacros list

Mike Hommey (2):
      dup() the input fd for fast-import used for remote helpers
      Use xmmap_gently instead of xmmap in use_pack

Mike Mueller (1):
      p4 unshelve: fix "Not a valid object name HEAD0" on Windows

Morian Sonnet (1):
      submodule foreach: fix recursion of options

Nguyễn Thái Ngọc Duy (63):
      git-checkout.txt: spell out --no-option
      git-checkout.txt: fix one syntax line
      doc: document --overwrite-ignore
      git-checkout.txt: fix monospace typeset
      t: rename t2014-switch.sh to t2014-checkout-switch.sh
      checkout: advice how to get out of detached HEAD mode
      checkout: inform the user when removing branch state
      checkout: keep most #include sorted
      checkout: factor out some code in parse_branchname_arg()
      checkout: make "opts" in cmd_checkout() a pointer
      checkout: move 'confict_style' and 'dwim_..' to checkout_opts
      checkout: split options[] array in three pieces
      checkout: split part of it to new command 'switch'
      switch: better names for -b and -B
      switch: add --discard-changes
      switch: remove -l
      switch: stop accepting pathspec
      switch: reject "do nothing" case
      switch: only allow explicit detached HEAD
      switch: add short option for --detach
      switch: implicit dwim, use --no-guess to disable it
      switch: no worktree status unless real branch switch happens
      switch: reject if some operation is in progress
      switch: make --orphan switch to an empty tree
      t: add tests for switch
      completion: support switch
      doc: promote "git switch"
      checkout: split part of it to new command 'restore'
      restore: take tree-ish from --source option instead
      restore: make pathspec mandatory
      restore: disable overlay mode by default
      checkout: factor out worktree checkout code
      restore: add --worktree and --staged
      restore: reject invalid combinations with --staged
      restore: default to --source=HEAD when only --staged is specified
      restore: replace --force with --ignore-unmerged
      restore: support --patch
      t: add tests for restore
      completion: support restore
      user-manual.txt: prefer 'merge --abort' over 'reset --hard'
      doc: promote "git restore"
      help: move git-diff and git-reset to different groups
      Declare both git-switch and git-restore experimental
      merge: remove drop_save() in favor of remove_merge_branch_state()
      init: make --template path relative to $CWD
      worktree add: sanitize worktree names
      worktree add: be tolerant of corrupt worktrees
      merge: add --quit
      completion: do not cache if --git-completion-helper fails
      fetch: only run 'gc' once when fetching multiple remotes
      t2027: use test_must_be_empty
      switch: allow to switch in the middle of bisect
      completion: disable dwim on "git switch -d"
      fetch-pack: move capability names out of i18n strings
      fetch-pack: print all relevant supported capabilities with -v -v
      fetch-pack: print server version at the top in -v -v
      sha1-file.c: remove the_repo from read_object_with_reference()
      tree-walk.c: remove the_repo from fill_tree_descriptor()
      tree-walk.c: remove the_repo from get_tree_entry()
      tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()
      match-trees.c: remove the_repo from shift_tree*()
      Use the right 'struct repository' instead of the_repository
      t7814: do not generate same commits in different repos

Nickolai Belakovski (3):
      ref-filter: add worktreepath atom
      branch: update output to include worktree info
      branch: add worktree info on verbose output

Paolo Bonzini (2):
      request-pull: quote regex metacharacters in local ref
      request-pull: warn if the remote object is not the same as the local one

Philip Oakley (6):
      git.c: show usage for accessing the git(1) help page
      Doc: git.txt: remove backticks from link and add git-scm.com/docs
      doc branch: provide examples for listing remote tracking branches
      msvc: include sigset_t definition
      msvc: define O_ACCMODE
      msvc: add pragmas for common warnings

Phillip Wood (12):
      rebase: fix a memory leak
      rebase: warn if state directory cannot be removed
      sequencer: return errors from sequencer_remove_state()
      rebase --abort/--quit: cleanup refs/rewritten
      rebase -r: always reword merge -c
      add -p: fix checkout -p with pathological context
      show --continue/skip etc. consistently in synopsis
      sequencer: always allow tab after command name
      sequencer: factor out todo command name parsing
      status: do not report errors in sequencer/todo
      git-prompt: improve cherry-pick/revert detection
      t3420: remove progress lines before comparing output

Quentin Nerden (2):
      docs: git-clone: refer to long form of options
      docs: git-clone: list short form of options first

Ramsay Jones (1):
      env--helper: mark a file-local symbol as static

René Scharfe (6):
      cleanup: fix possible overflow errors in binary search, part 2
      coccinelle: use COPY_ARRAY for copying arrays
      use COPY_ARRAY for copying arrays
      config: use unsigned_mult_overflows to check for overflows
      config: don't multiply in parse_unit_factor()
      config: simplify parsing of unit factors

Robert Morgan (1):
      gpg(docs): use correct --verify syntax

Rohit Ashiwal (5):
      sequencer: add advice for revert
      sequencer: rename reset_for_rollback to reset_merge
      sequencer: use argv_array in reset_merge
      cherry-pick/revert: add --skip option
      cherry-pick/revert: advise using --skip

SZEDER Gábor (11):
      t3404: modernize here doc style
      t3404: make the 'rebase.missingCommitsCheck=ignore' test more focused
      pager: add a helper function to clear the last line in the terminal
      t5551: use 'test_i18ngrep' to check translated output
      rebase: fix garbled progress display with '-x'
      progress: use term_clear_line()
      Document that 'git -C ""' works and doesn't change directory
      ci: don't update Homebrew
      ci: disable Homebrew's auto cleanup
      ci/lib.sh: update a comment about installed P4 and Git-LFS versions
      travis-ci: build with GCC 4.8 as well

Simon Williams (1):
      git-p4: allow unshelving of branched files

Stephen Boyd (2):
      format-patch: inform user that patch-id generation is unstable
      format-patch: make --base patch-id output stable

Steven Roberts (1):
      gpg-interface: do not scan past the end of buffer

Taylor Blau (1):
      ref-filter.c: find disjoint pattern prefixes

Thomas Gummerer (16):
      stash: fix show referencing stash index
      apply: replace marc.info link with public-inbox
      apply: only pass required data to skip_tree_prefix
      apply: only pass required data to git_header_name
      apply: only pass required data to check_header_line
      apply: only pass required data to find_name_*
      apply: only pass required data to gitdiff_* functions
      apply: make parse_git_diff_header public
      range-diff: fix function parameter indentation
      range-diff: split lines manually
      range-diff: don't remove funcname from inner diff
      range-diff: suppress line count in outer diff
      range-diff: add section header instead of diff header
      range-diff: add filename to inner diff
      range-diff: add headers to the outer hunk header
      stash: fix handling removed files with --keep-index

Tigran Mkrtchyan (1):
      tag: add tag.gpgSign config option to force all tags be GPG-signed

Varun Naik (1):
      read-cache.c: do not die if mmap fails

Vishal Verma (1):
      merge: refuse --commit with --squash

Xin Li (1):
      clone: respect user supplied origin name when setting up partial clone

Ævar Arnfjörð Bjarmason (21):
      send-email: move the read_config() function above getopts
      send-email: rename the @bcclist variable for consistency
      send-email: do defaults -> config -> getopt in that order
      tests: add a special setup where prerequisites fail
      Makefile: remove the NO_R_TO_GCC_LINKER flag
      send-email: remove cargo-culted multi-patch pattern in tests
      send-email: fix broken transferEncoding tests
      send-email: document --no-[to|cc|bcc]
      hash-object doc: stop mentioning git-cvsimport
      send-email: fix regression in sendemail.identity parsing
      Revert "test-lib: whitelist GIT_TR2_* in the environment"
      config tests: simplify include cycle test
      env--helper: new undocumented builtin wrapping git_env_*()
      config.c: refactor die_bad_number() to not call gettext() early
      t6040 test: stop using global "script" variable
      tests: make GIT_TEST_GETTEXT_POISON a boolean
      tests README: re-flow a previously changed paragraph
      tests: replace test_tristate with "git env--helper"
      tests: make GIT_TEST_FAIL_PREREQS a boolean
      tests: mark two failing tests under FAIL_PREREQS
      clone: test for our behavior on odd objects/* content


^ permalink raw reply	[relevance 2%]

Results 1-42 of 42 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-07-29 21:49  2% [ANNOUNCE] Git v2.23.0-rc0 Junio C Hamano
2019-08-02 22:06  3% [ANNOUNCE] Git v2.23.0-rc1 Junio C Hamano
2019-08-06  0:28     amend warnings with no changes staged Lukas Gross
2019-08-06  1:30     ` Jonathan Nieder
2019-08-06  1:37       ` Lukas Gross
2019-08-06  2:16  7%     ` Jonathan Nieder
2019-08-06  2:47  0%       ` Junio C Hamano
2019-08-06  3:00  0%         ` Jonathan Nieder
2019-08-06  4:19  0%       ` Jeff King
2019-08-09 19:29  3% [ANNOUNCE] Git v2.23.0-rc2 Junio C Hamano
2019-08-09 21:20  0% ` Bhaskar Chowdhury
2019-08-09 21:31  0% ` Git for Windows v2.23.0-rc2, was " Johannes Schindelin
2019-08-15  8:35     git log --graph with a sort of local revision number Uwe Brauer
2019-08-18 19:00  6% ` Rafael Ascensão
2019-08-18 20:46  5%   ` Uwe Brauer
2019-08-16  9:16  5% [GIT PULL] l10n updates for 2.23.0 round 2 Jiang Xin
2019-08-16 20:06  0% ` Junio C Hamano
2019-08-16 21:00  4% [ANNOUNCE] Git v2.23.0 Junio C Hamano
2019-08-16 21:30  0% ` Bhaskar Chowdhury
2019-08-18 16:03  7% Missing file in 2.23 (p5302-pack-index.subtests)? Theodore Y. Ts'o
2019-08-26 20:50  0% ` Jeff King
2019-08-26 20:51  0%   ` Jeff King
2019-08-27  1:29  5%   ` Theodore Y. Ts'o
2019-08-26  2:43  6% [PATCH 00/11] hashmap: bugfixes, safety fixes, and WIP improvements Eric Wong
2019-09-24  1:03  5% ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Eric Wong
2019-09-26  8:39  0%   ` Johannes Schindelin
2019-09-26 13:48  0%   ` Phillip Wood
2019-08-28 23:25  7% error: cannot cherry-pick during a revert Mike Hommey
2019-08-29 15:27  0% ` Phillip Wood
2019-10-06 23:30  2% [PATCH v3 00/20] hashmap bug/safety/ease-of-use fixes Eric Wong
2019-10-08  8:58  0% ` Johannes Schindelin
2019-10-18  6:29  1% [ANNOUNCE] Git v2.24.0-rc0 Junio C Hamano
2019-10-24  6:00  1% [ANNOUNCE] Git v2.24.0-rc1 Junio C Hamano
2019-10-30  7:14  1% [ANNOUNCE] Git v2.24.0-rc2 Junio C Hamano
2019-11-04  5:36  1% [ANNOUNCE] Git v2.24.0 Junio C Hamano
2019-11-22 12:37  7% difftool fails with dangling symlinks, writes to targets outside of the repository Philippe
2019-11-29  8:21  6% git-rebase produces incorrect output Pavel Roskin
2019-11-29 13:31  0% ` Philip Oakley
2019-11-30  4:22  0% ` Elijah Newren
2019-12-04 20:04     [BUG?] ls-files -o now traverses nested repo when given multiple pathspecs Kyle Meyer
2019-12-08  5:31     ` Kyle Meyer
2019-12-08  5:42  6%   ` Elijah Newren
2019-12-08  7:46  0%     ` Elijah Newren
2020-07-01  8:41     Why won't git checkout a branch? Jeffrey Walton
2020-07-01  9:50     ` Andreas Schwab
2020-07-01 10:09       ` Jeffrey Walton
2020-07-01 15:13  7%     ` Chris Torek
2021-06-02  4:56  6% Partial Clone, and a strange slow rev-list call on fetch Tao Klerks
2021-06-02 11:18  0% ` Derrick Stolee
2023-01-10  9:02     Bugreport: Prefix - is ignored when sorting (on committerdate) Fredrik Öberg
2023-01-10 10:54     ` Martin Ågren
2023-01-10 12:18       ` Jeff King
2023-01-10 13:05         ` Martin Ågren
2023-01-10 13:33  7%       ` Fredrik Öberg
2023-01-10 13:47  0%         ` Jeff King

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