]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
4 years agotrace2: disable tr2_dst before warning on write errors
Josh Steadmon [Thu, 18 Nov 2021 22:01:41 +0000 (14:01 -0800)] 
trace2: disable tr2_dst before warning on write errors

If writing a trace2 message fails, we optionally warn the user of this
fact. However, in 0ee10fd (usage: add trace2 entry upon warning(),
2020-11-23), we added a trace entry to the warning() function. This
means that we can enter an infinite loop of failing trace2 writes and
warnings. Fix this by disabling the failing trace2 destination before
issuing the warning.

Additionally, trace2 sets a default SIGPIPE handler
(tr2main_signal_handler) when it is initialized. This handler generates
its own trace2 messages when a signal is received. If a trace2 write
fails due to a broken pipe, this handler will run and then cause another
failed write. Fix this by temporarily ignoring SIGPIPE while writing
trace2 messages. This is safe because the write will still fail, and we
will disable the failing destination.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoremote: die if branch is not found in repository
Glen Choo [Thu, 18 Nov 2021 00:53:25 +0000 (16:53 -0800)] 
remote: die if branch is not found in repository

In a subsequent commit, we would like external-facing functions to be
able to accept "struct repository" and "struct branch" as a pair. This
is useful for functions like pushremote_for_branch(), which need to take
values from the remote_state and branch, even if branch == NULL.
However, a caller may supply an unrelated repository and branch, which
is not supported behavior.

To prevent misuse, add a die_on_missing_branch() helper function that
dies if a given branch is not from a given repository. Speed up the
existence check by replacing the branches list with a branches_hash
hashmap.

Like read_config(), die_on_missing_branch() is only called from
non-static functions; static functions are less prone to misuse because
they have strong conventions for keeping remote_state and branch in
sync.

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoremote: remove the_repository->remote_state from static methods
Glen Choo [Thu, 18 Nov 2021 00:53:24 +0000 (16:53 -0800)] 
remote: remove the_repository->remote_state from static methods

Replace all remaining references of the_repository->remote_state in
static functions with a struct remote_state parameter.

To do so, move read_config() calls to non-static functions and create a
family of static functions, "remotes_*", that behave like "repo_*", but
accept struct remote_state instead of struct repository. In the case
where a static function calls a non-static function, replace the
non-static function with its "remotes_*" equivalent.

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoremote: use remote_state parameter internally
Glen Choo [Thu, 18 Nov 2021 00:53:23 +0000 (16:53 -0800)] 
remote: use remote_state parameter internally

Without changing external-facing functions, replace
the_repository->remote_state internally by adding a struct remote_state
parameter.

As a result, external-facing functions are still tied to the_repository,
but most static functions no longer reference
the_repository->remote_state. The exceptions are those that are used in
a way that depends on external-facing functions e.g. the callbacks to
remote_get_1().

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoremote: move static variables into per-repository struct
Glen Choo [Thu, 18 Nov 2021 00:53:22 +0000 (16:53 -0800)] 
remote: move static variables into per-repository struct

remote.c does not works with non-the_repository because it stores its
state as static variables. To support non-the_repository, we can use a
per-repository struct for the remotes subsystem.

Prepare for this change by defining a struct remote_state that holds
the remotes subsystem state and move the static variables of remote.c
into the_repository->remote_state.

This introduces no behavioral or API changes.

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot5516: add test case for pushing remote refspecs
Glen Choo [Thu, 18 Nov 2021 00:53:21 +0000 (16:53 -0800)] 
t5516: add test case for pushing remote refspecs

"git push remote-name" (that is, with no refspec given on the command
line) should push the refspecs in remote.remote-name.push. There is no
test case that checks this behavior in detached HEAD, so add one.

Signed-off-by: Glen Choo <chooglen@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoxdiff: simplify comparison
Phillip Wood [Wed, 17 Nov 2021 11:20:25 +0000 (11:20 +0000)] 
xdiff: simplify comparison

Now that the histogram algorithm calls xdl_classify_record() it is no
longer necessary to use xdl_recmatch() to compare lines, it is
sufficient just to compare the hash values. This has a negligible
effect on performance.

Test                                  HEAD~1            HEAD
-----------------------------------------------------------------------------
4000.1: log -3000 (baseline)          0.19(0.12+0.07)   0.18(0.14+0.04) -5.3%
4000.2: log --raw -3000 (tree-only)   0.98(0.81+0.16)   0.98(0.79+0.18) +0.0%
4000.3: log -p -3000 (Myers)          4.81(4.23+0.56)   4.80(4.26+0.53) -0.2%
4000.4: log -p -3000 --histogram      5.83(5.11+0.70)   5.82(5.15+0.65) -0.2%
4000.5: log -p -3000 --patience       5.31(4.61+0.69)   5.30(4.54+0.75) -0.2%

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoxdiff: avoid unnecessary memory allocations
Phillip Wood [Wed, 17 Nov 2021 11:20:24 +0000 (11:20 +0000)] 
xdiff: avoid unnecessary memory allocations

rindex and ha are only used by xdl_cleanup_records() which is not
called by the histogram or patience algorithms. The perf test results
show a small reduction in run time but that is probably within the
noise.

Test                                  HEAD^             HEAD
-----------------------------------------------------------------------------
4000.1: log -3000 (baseline)          0.19(0.17+0.02)   0.19(0.12+0.07) +0.0%
4000.2: log --raw -3000 (tree-only)   0.98(0.78+0.20)   0.98(0.81+0.16) +0.0%
4000.3: log -p -3000 (Myers)          4.81(4.15+0.64)   4.81(4.23+0.56) +0.0%
4000.4: log -p -3000 --histogram      5.87(5.19+0.66)   5.83(5.11+0.70) -0.7%
4000.5: log -p -3000 --patience       5.35(4.60+0.73)   5.31(4.61+0.69) -0.7%

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodiff histogram: intern strings
Phillip Wood [Wed, 17 Nov 2021 11:20:23 +0000 (11:20 +0000)] 
diff histogram: intern strings

Histogram is the only diff algorithm not to call
xdl_classify_record(). xdl_classify_record() ensures that the hash
values of two strings that are not equal differ which means that it is
not necessary to use xdl_recmatch() when comparing lines, all that is
necessary is to compare the hash values. This gives a 7% reduction in
the runtime of "git log --patch" when using the histogram diff
algorithm.

Test                                  HEAD^             HEAD
-----------------------------------------------------------------------------
4000.1: log -3000 (baseline)          0.18(0.14+0.04)   0.19(0.17+0.02) +5.6%
4000.2: log --raw -3000 (tree-only)   0.99(0.77+0.21)   0.98(0.78+0.20) -1.0%
4000.3: log -p -3000 (Myers)          4.84(4.31+0.51)   4.81(4.15+0.64) -0.6%
4000.4: log -p -3000 --histogram      6.34(5.86+0.46)   5.87(5.19+0.66) -7.4%
4000.5: log -p -3000 --patience       5.39(4.60+0.76)   5.35(4.60+0.73) -0.7%

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopull: should be noop when already-up-to-date
Erwin Villejo [Wed, 17 Nov 2021 07:55:50 +0000 (07:55 +0000)] 
pull: should be noop when already-up-to-date

The already-up-to-date pull bug was fixed for --ff-only but it did not
include the case where --ff or --ff-only are not specified. This updates
the --ff-only fix to include the case where --ff or --ff-only are not
specified in command line flags or config.

Signed-off-by: Erwin Villejo <erwin.villejo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot5319: corrupt more bytes of the midx checksum
Jeff King [Tue, 16 Nov 2021 21:38:50 +0000 (16:38 -0500)] 
t5319: corrupt more bytes of the midx checksum

One of the tests in t5319 corrupts the checksum of the midx file by
writing a single 0xff over the final byte, and then confirms that we
detect the problem. This usually works fine, but would break if the
actual checksum ended with that same byte already.

It seems like this should happen in 1 out of 256 test runs, but it turns
out to be less often in practice. The contents of the midx are mostly
deterministic because it's based on the objects, and we remove most
sources of randomness by setting GIT_COMMITTER_DATE, etc.  However,
there's still some randomness: some objects are duplicated between
packs, and the midx must decide which to use, which can be based on
timing.

So very occasionally we can end up with a real 0xff byte, and the test
fails. The most robust fix would be to read out the final byte and then
change it to something else (e.g., adding 1 mod 256). But that's awkward
to do in shell. Let's just blindly corrupt 10 bytes instead of 1, which
reduces our chances of an accidental noop to 1 in 2^80.

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocheckout: fix "branch info" memory leaks
Ævar Arnfjörð Bjarmason [Tue, 16 Nov 2021 18:27:38 +0000 (19:27 +0100)] 
checkout: fix "branch info" memory leaks

The "checkout" command is one of the main sources of leaks in the test
suite, let's fix the common ones by not leaking from the "struct
branch_info".

Doing this is rather straightforward, albeit verbose, we need to
xstrdup() constant strings going into the struct, and free() the ones
we clobber as we go along.

This also means that we can delete previous partial leak fixes in this
area, i.e. the "path_to_free" accounting added by 96ec7b1e708 (Convert
resolve_ref+xstrdup to new resolve_refdup function, 2011-12-13).

There was some discussion about whether "we should retain the "const
char *" here and cast at free() time, or have it be a "char *". Since
this is not a public API with any sort of API boundary let's use
"char *", as is already being done for the "refname" member of the
same struct.

The tests to mark as passing were found with:

    rm .prove; GIT_SKIP_TESTS=t0027 prove -j8 --state=save t[0-9]*.sh :: --immediate
    # apply & compile this change
    prove -j8 --state=failed :: --immediate

I.e. the ones that were newly passing when the --state=failed command
was run. I left out "t3040-subprojects-basic.sh" and
"t4131-apply-fake-ancestor.sh" to to optimization-level related
differences similar to the ones noted in[1], except that these would
be something the current 'linux-leaks' job would run into.

1. https://lore.kernel.org/git/cover-v3-0.6-00000000000-20211022T175227Z-avarab@gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomergesort: avoid left shift overflow
René Scharfe [Mon, 15 Nov 2021 23:19:38 +0000 (00:19 +0100)] 
mergesort: avoid left shift overflow

Use size_t to match n when building the bitmask for checking whether a
rank is occupied, instead of the default signed int.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomidx: fix a formatting issue in "multi-pack-index.txt"
Teng Long [Thu, 18 Nov 2021 07:11:14 +0000 (15:11 +0800)] 
midx: fix a formatting issue in "multi-pack-index.txt"

There is a formatting issue  in "multi-pack-index.html", corresponding
to the nesting bulleted list of a wrong usage in "multi-pack-index.txt"
and this commit fix the problem.

In ASCIIDOC, it doesn't treat an indented character as the
beginning of a sub-list. If we want to write a nested bulleted list, we
could just use ASTERISK without any DASH like:

      "
      * Level 1 list item
      ** Level 2 list item
      *** Level 3 list item
      ** Level 2 list item
      * Level 1 list item
      ** Level 2 list item
      * Level 1 list item
      "

The DASH can be used for bulleted list too, But the DASH is suggested
only to be used as the marker for the first level because the DASH
doesn’t work well or a best practice for nested lists,
like (dash is as level 2 below):

      "
      * Level 1 list item
      - Level 2 list item
      * Level 1 list item
      "

ASTERISK is recommanded to use because it works intuitively and clearly
("marker length = nesting level") in nested lists, but the DASH can't.
However, when you want to write a non-nested bulleted lists, DASH works
too, like:

      "
      - Level 1 list item
      - Level 1 list item
      - Level 1 list item
      "

Reviewed-by: Taylor Blau <me@ttaylorr.com>
Reviewed-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Teng Long <dyroneteng@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.34 v2.34.0
Junio C Hamano [Mon, 15 Nov 2021 06:50:52 +0000 (22:50 -0800)] 
Git 2.34

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge tag 'l10n-2.34.0-rnd3.1' of git://github.com/git-l10n/git-po
Junio C Hamano [Mon, 15 Nov 2021 05:45:40 +0000 (21:45 -0800)] 
Merge tag 'l10n-2.34.0-rnd3.1' of git://github.com/git-l10n/git-po

l10n-2.34.0-rnd3.1

* tag 'l10n-2.34.0-rnd3.1' of git://github.com/git-l10n/git-po: (38 commits)
  l10n: pl: 2.34.0 round 3
  l10n: it: fix typos found by git-po-helper
  l10n: ko: fix typos found by git-po-helper
  l10n: Update Catalan translation
  l10n: po-id for 2.34 (round 3)
  l10n: bg.po: Updated Bulgarian translation (5211t)
  l10n: de.po: Update German translation for Git v2.34.0
  l10n: sv.po: Update Swedish translation (5211t0f0)
  l10n: vi(5211t): Translation for v2.34.0 rd3
  l10n: zh_TW.po: v2.34.0 round 3 (0 untranslated)
  l10n: fr: v2.34.0 rnd 3
  l10n: tr: v2.34.0 round 3
  l10n: zh_CN: v2.34.0 round 3
  l10n: git.pot: v2.34.0 round 3 (1 new)
  l10n: pl: 2.34.0 round 2
  l10n: vi(5210t): Translation for v2.34.0 rd2
  l10n: es: 2.34.0 round 2
  l10n: Update Catalan translation
  l10n: bg.po: Updated Bulgarian translation (5210t)
  l10n: fr: v2.34.0 round 2
  ...

4 years agol10n: pl: 2.34.0 round 3
Arusekk [Sun, 14 Nov 2021 14:19:13 +0000 (15:19 +0100)] 
l10n: pl: 2.34.0 round 3

Signed-off-by: Arusekk <arek_koz@o2.pl>
4 years agol10n: it: fix typos found by git-po-helper
Jiang Xin [Sun, 14 Nov 2021 11:40:41 +0000 (19:40 +0800)] 
l10n: it: fix typos found by git-po-helper

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agoSubmittingPatches: fix Asciidoc syntax in "GitHub CI" section
Philippe Blain [Sat, 13 Nov 2021 20:38:05 +0000 (20:38 +0000)] 
SubmittingPatches: fix Asciidoc syntax in "GitHub CI" section

A superfluous ']' was added to the title of the GitHub CI section in
f003a91f5c (SubmittingPatches: replace discussion of Travis with GitHub
Actions, 2021-07-22). Remove it.

While at it, format the URL for a GitHub user's workflow runs of Git
between backticks, since if not Asciidoc formats only the first part,
"https://github.com/<Your", as a link, which is not very useful.

Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: ko: fix typos found by git-po-helper
Jiang Xin [Thu, 11 Nov 2021 00:54:16 +0000 (08:54 +0800)] 
l10n: ko: fix typos found by git-po-helper

When checking typos in file "po/ko.po", "git-po-helper" reports lots of
false positives because there are no spaces between ASCII and Korean
characters. After applied commit adee197 "(dict: add smudge table for
Korean language, 2021-11-11)" of "git-l10n/git-po-helper" to suppress
these false positives, some easy-to-fix typos are found and fixed.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agol10n: Update Catalan translation
Jordi Mas [Sat, 13 Nov 2021 15:35:53 +0000 (16:35 +0100)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
4 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sat, 13 Nov 2021 06:42:30 +0000 (14:42 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

* 'po-id' of github.com:bagasme/git-po:
  l10n: po-id for 2.34 (round 3)

4 years agol10n: po-id for 2.34 (round 3)
Bagas Sanjaya [Thu, 11 Nov 2021 07:43:22 +0000 (14:43 +0700)] 
l10n: po-id for 2.34 (round 3)

  - Translate following new components:
    * merge.c
    * rebase-interactive.c
    * rebase.c
    * midx.c
  - Clean up obsolete translations

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
4 years agoMerge branch 'master' of github.com:ruester/git-po-de
Jiang Xin [Sat, 13 Nov 2021 01:27:58 +0000 (09:27 +0800)] 
Merge branch 'master' of github.com:ruester/git-po-de

* 'master' of github.com:ruester/git-po-de:
  l10n: de.po: Update German translation for Git v2.34.0

4 years agoMerge branch 'js/trace2-raise-format-version'
Junio C Hamano [Fri, 12 Nov 2021 23:29:25 +0000 (15:29 -0800)] 
Merge branch 'js/trace2-raise-format-version'

When we added a new event type to trace2 event stream, we forgot to
raise the format version number, which has been corrected.

* js/trace2-raise-format-version:
  trace2: increment event format version

4 years agoMerge branch 'ab/fsck-unexpected-type'
Junio C Hamano [Fri, 12 Nov 2021 23:29:25 +0000 (15:29 -0800)] 
Merge branch 'ab/fsck-unexpected-type'

Regression fix.

* ab/fsck-unexpected-type:
  object-file: free(*contents) only in read_loose_object() caller
  object-file: fix SEGV on free() regression in v2.34.0-rc2

4 years agoMerge branch 'ps/connectivity-optim'
Junio C Hamano [Fri, 12 Nov 2021 23:29:24 +0000 (15:29 -0800)] 
Merge branch 'ps/connectivity-optim'

Regression fix.

* ps/connectivity-optim:
  Revert "connected: do not sort input revisions"

4 years agol10n: bg.po: Updated Bulgarian translation (5211t)
Alexander Shopov [Fri, 12 Nov 2021 07:00:54 +0000 (08:00 +0100)] 
l10n: bg.po: Updated Bulgarian translation (5211t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
4 years agol10n: de.po: Update German translation for Git v2.34.0
Matthias Rüster [Sun, 7 Nov 2021 17:07:34 +0000 (18:07 +0100)] 
l10n: de.po: Update German translation for Git v2.34.0

Signed-off-by: Matthias Rüster <matthias.ruester@gmail.com>
Reviewed-by: Ralf Thielow <ralf.thielow@gmail.com>
Reviewed-by: Phillip Szelat <phillip.szelat@gmail.com>
4 years agotrace2: increment event format version
Josh Steadmon [Thu, 11 Nov 2021 22:34:25 +0000 (14:34 -0800)] 
trace2: increment event format version

In 64bc752 (trace2: add trace2_child_ready() to report on background
children, 2021-09-20), we added a new "child_ready" event. In
Documentation/technical/api-trace2.txt, we promise that adding a new
event type will result in incrementing the trace2 event format version
number, but this was not done. Correct this in code & docs.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoprotocol-v2.txt: align delim-pkt spec with usage
Calvin Wan [Thu, 11 Nov 2021 22:00:48 +0000 (22:00 +0000)] 
protocol-v2.txt: align delim-pkt spec with usage

The current protocol EBNF allows command-request to end with the
capability list, if no command specific arguments follow, but the
protocol requires that after the capability list, there must be a
delim-pkt regardless of the number of command specific arguments.  Fixed
the EBNF to match. Both JGit and libgit2's implementation has the
delim-pkt as mandatory. JGit's code is not publicly linkable, but
libgit2 is linked below[1]. As for currently implemented commands on v2
(ls-ref and fetch), the delim packet is already being passed through

[1]: https://github.com/libgit2/libgit2/blob/main/src/transports/git.c

Reported-by: Ivan Frade <ifrade@google.com>
Signed-off-by: Calvin Wan <calvinwan@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: sv.po: Update Swedish translation (5211t0f0)
Peter Krefting [Thu, 11 Nov 2021 22:22:48 +0000 (23:22 +0100)] 
l10n: sv.po: Update Swedish translation (5211t0f0)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
4 years agoobject-file: free(*contents) only in read_loose_object() caller
Ævar Arnfjörð Bjarmason [Thu, 11 Nov 2021 05:18:56 +0000 (06:18 +0100)] 
object-file: free(*contents) only in read_loose_object() caller

In the preceding commit a free() of uninitialized memory regression in
96e41f58fe1 (fsck: report invalid object type-path combinations,
2021-10-01) was fixed, but we'd still have an issue with leaking
memory from fsck_loose(). Let's fix that issue too.

That issue was introduced in my 31deb28f5e0 (fsck: don't hard die on
invalid object types, 2021-10-01). It can be reproduced under
SANITIZE=leak with the test I added in 093fffdfbec (fsck tests: add
test for fsck-ing an unknown type, 2021-10-01):

    ./t1450-fsck.sh --run=84 -vixd

In some sense it's not a problem, we lost the same amount of memory in
terms of things malloc'd and not free'd. It just moved from the "still
reachable" to "definitely lost" column in valgrind(1) nomenclature[1],
since we'd have die()'d before.

But now that we don't hard die() anymore in the library let's properly
free() it. Doing so makes this code much easier to follow, since we'll
now have one function owning the freeing of the "contents" variable,
not two.

For context on that memory management pattern the read_loose_object()
function was added in f6371f92104 (sha1_file: add read_loose_object()
function, 2017-01-13) and subsequently used in c68b489e564 (fsck:
parse loose object paths directly, 2017-01-13). The pattern of it
being the task of both sides to free() the memory has been there in
this form since its inception.

1. https://valgrind.org/docs/manual/mc-manual.html#mc-manual.leaks

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRevert "connected: do not sort input revisions"
Junio C Hamano [Thu, 11 Nov 2021 20:34:41 +0000 (12:34 -0800)] 
Revert "connected: do not sort input revisions"

This reverts commit f45022dc2fd692fd024f2eb41a86a66f19013d43,
as this is like breakage in the traversal more likely.  In a
history with 10 single strand of pearls,

   1-->2-->3--...->7-->8-->9-->10

asking "rev-list --unsorted-input 1 10 --not 9 8 7 6 5 4" fails to
paint the bottom 1 uninteresting as the traversal stops, without
completing the propagation of uninteresting bit starting at 4 down
through 3 and 2 to 1.

4 years agoobject-file: fix SEGV on free() regression in v2.34.0-rc2
Ævar Arnfjörð Bjarmason [Thu, 11 Nov 2021 05:18:55 +0000 (06:18 +0100)] 
object-file: fix SEGV on free() regression in v2.34.0-rc2

Fix a regression introduced in my 96e41f58fe1 (fsck: report invalid
object type-path combinations, 2021-10-01). When fsck-ing blobs larger
than core.bigFileThreshold, we'd free() a pointer to uninitialized
memory.

This issue would have been caught by SANITIZE=address, but since it
involves core.bigFileThreshold, none of the existing tests in our test
suite covered it.

Running them with the "big_file_threshold" in "environment.c" changed
to say "6" would have shown this failure, but let's add a dedicated
test for this scenario based on Han Xin's report[1].

The bug was introduced between v9 and v10[2] of the fsck series merged
in 061a21d36d8 (Merge branch 'ab/fsck-unexpected-type', 2021-10-25).

1. https://lore.kernel.org/git/20211111030302.75694-1-hanxin.hx@alibaba-inc.com/
2. https://lore.kernel.org/git/cover-v10-00.17-00000000000-20211001T091051Z-avarab@gmail.com/

Reported-by: Han Xin <chiyutianyi@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agohttp-fetch: redact url on die() message
Ivan Frade [Wed, 10 Nov 2021 23:51:29 +0000 (23:51 +0000)] 
http-fetch: redact url on die() message

http-fetch prints the URL after failing to fetch it. This can be
confusing to users (they cannot really do anything with it), and they
can share by accident a sensitive URL (e.g. with credentials) while
looking for help.

Redact the URL unless the GIT_TRACE_REDACT variable is set to false. This
mimics the redaction of other sensitive information in git, like the
Authorization header in HTTP.

Fix also capitalization of previous die() message (must start in
lowercase).

Signed-off-by: Ivan Frade <ifrade@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agofetch-pack: redact packfile urls in traces
Ivan Frade [Wed, 10 Nov 2021 23:51:28 +0000 (23:51 +0000)] 
fetch-pack: redact packfile urls in traces

In some setups, packfile uris act as bearer token. It is not
recommended to expose them plainly in logs, although in special
circunstances (e.g. debug) it makes sense to write them.

Redact the packfile URL paths by default, unless the GIT_TRACE_REDACT
variable is set to false. This mimics the redacting of the Authorization
header in HTTP.

Signed-off-by: Ivan Frade <ifrade@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agopackfile: avoid overflowing shift during decode
Jonathan Tan [Wed, 10 Nov 2021 23:40:33 +0000 (15:40 -0800)] 
packfile: avoid overflowing shift during decode

unpack_object_header_buffer() attempts to protect against overflowing
left shifts, but the limit of the shift amount should not be the size of
the variable being shifted. It should be the size minus the size of its
contents. Fix that accordingly.

This was noticed at $DAYJOB by a fuzzer running internally.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: vi(5211t): Translation for v2.34.0 rd3
Tran Ngoc Quan [Thu, 11 Nov 2021 06:19:34 +0000 (13:19 +0700)] 
l10n: vi(5211t): Translation for v2.34.0 rd3

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
4 years agoMerge branch 'l10n/zh_TW/211111' of github.com:l10n-tw/git-po
Jiang Xin [Thu, 11 Nov 2021 00:28:26 +0000 (08:28 +0800)] 
Merge branch 'l10n/zh_TW/211111' of github.com:l10n-tw/git-po

* 'l10n/zh_TW/211111' of github.com:l10n-tw/git-po:
  l10n: zh_TW.po: v2.34.0 round 3 (0 untranslated)

4 years agoMerge branch 'fr_v2.34.0_rnd3' of github.com:jnavila/git
Jiang Xin [Thu, 11 Nov 2021 00:27:49 +0000 (08:27 +0800)] 
Merge branch 'fr_v2.34.0_rnd3' of github.com:jnavila/git

* 'fr_v2.34.0_rnd3' of github.com:jnavila/git:
  l10n: fr: v2.34.0 rnd 3

4 years agoMerge branch 'tr-2-34-r3' of github.com:bitigchi/git-po
Jiang Xin [Thu, 11 Nov 2021 00:26:54 +0000 (08:26 +0800)] 
Merge branch 'tr-2-34-r3' of github.com:bitigchi/git-po

* 'tr-2-34-r3' of github.com:bitigchi/git-po:
  l10n: tr: v2.34.0 round 3

4 years agoparse-options.c: use "enum parse_opt_result" for parse_nodash_opt()
Ævar Arnfjörð Bjarmason [Wed, 10 Nov 2021 01:27:04 +0000 (02:27 +0100)] 
parse-options.c: use "enum parse_opt_result" for parse_nodash_opt()

Change the parse_nodash_opt() function to use "enum
parse_opt_result". In 352e761388b (parse-options.[ch]: consistently
use "enum parse_opt_result", 2021-10-08) its only caller
parse_options_step() started using that return type, and the
get_value() which will be called and return from it uses the same
enum.

Let's do the same here so that this function always returns an "enum
parse_opt_result" value.

We could go for either PARSE_OPT_HELP (-2) or PARSE_OPT_ERROR (-1)
here. The reason we ended up with "-2" is that in code added in
07fe54db3cd (parse-opt: do not print errors on unknown options, return
"-2" instead., 2008-06-23) we used that value in a meaningful way.

Then in 51a9949eda7 (parseopt: add PARSE_OPT_NODASH, 2009-05-07) the
use of "-2" was seemingly copy/pasted from parse_long_opt(), which was
the function immediately above the parse_nodash_opt() function added
in that commit.

Since we only care about whether the return value here is non-zero
let's use the more generic PARSE_OPT_ERROR.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoA few hotfixes
Junio C Hamano [Wed, 10 Nov 2021 22:59:51 +0000 (14:59 -0800)] 
A few hotfixes

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'jk/ssh-signing-fix'
Junio C Hamano [Wed, 10 Nov 2021 23:01:21 +0000 (15:01 -0800)] 
Merge branch 'jk/ssh-signing-fix'

Reject OpenSSH 8.7 whose "ssh-keygen -Y find-principals" is
unusable from running the ssh signature tests.

* jk/ssh-signing-fix:
  t/lib-gpg: avoid broken versions of ssh-keygen

4 years agoMerge branch 'js/simple-ipc-cygwin-socket-fix'
Junio C Hamano [Wed, 10 Nov 2021 23:01:20 +0000 (15:01 -0800)] 
Merge branch 'js/simple-ipc-cygwin-socket-fix'

The way Cygwin emulates a unix-domain socket, on top of which the
simple-ipc mechanism is implemented, can race with the program on
the other side that wants to use the socket, and briefly make it
appear as a regular file before lstat(2) starts reporting it as a
socket.  We now have a workaround on the side that connects to a
unix domain socket.

* js/simple-ipc-cygwin-socket-fix:
  simple-ipc: work around issues with Cygwin's Unix socket emulation

4 years agoMerge branch 'ds/no-usable-cron-on-macos'
Junio C Hamano [Wed, 10 Nov 2021 23:01:20 +0000 (15:01 -0800)] 
Merge branch 'ds/no-usable-cron-on-macos'

"git maintenance run" learned to use system supplied scheduler
backend, but cron on macOS turns out to be unusable for this
purpose.

* ds/no-usable-cron-on-macos:
  maintenance: disable cron on macOS

4 years agoMerge branch 'jc/fix-pull-ff-only-when-already-up-to-date'
Junio C Hamano [Wed, 10 Nov 2021 23:01:19 +0000 (15:01 -0800)] 
Merge branch 'jc/fix-pull-ff-only-when-already-up-to-date'

"git pull --ff-only" and "git pull --rebase --ff-only" should make
it a no-op to attempt pulling from a remote that is behind us, but
instead the command errored out by saying it was impossible to
fast-forward, which may technically be true, but not a useful thing
to diagnose as an error.  This has been corrected.

* jc/fix-pull-ff-only-when-already-up-to-date:
  pull: --ff-only should make it a noop when already-up-to-date

4 years agol10n: zh_TW.po: v2.34.0 round 3 (0 untranslated)
Yi-Jyun Pan [Wed, 10 Nov 2021 22:43:41 +0000 (06:43 +0800)] 
l10n: zh_TW.po: v2.34.0 round 3 (0 untranslated)

Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
4 years agot/lib-gpg: avoid broken versions of ssh-keygen
Jeff King [Wed, 10 Nov 2021 06:00:47 +0000 (01:00 -0500)] 
t/lib-gpg: avoid broken versions of ssh-keygen

The "-Y find-principals" option of ssh-keygen seems to be broken in
Debian's openssh-client 1:8.7p1-1, whereas it works fine in 1:8.4p1-5.
This causes several failures for GPGSSH tests. We fulfill the
prerequisite because generating the keys works fine, but actually
verifying a signature causes results ranging from bogus results to
ssh-keygen segfaulting.

We can find the broken version during the prereq check by feeding it
empty input. This should result in it complaining to stderr, but in the
broken version it triggers the segfault, causing the GPGSSH tests to be
skipped.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoreceive-pack: ignore SIGPIPE while reporting status to client
Robin Jarry [Wed, 10 Nov 2021 09:29:42 +0000 (10:29 +0100)] 
receive-pack: ignore SIGPIPE while reporting status to client

Before running the post-receive hook, status info is reported back to
the client. If a remote client exits before or during the status report,
receive-pack is killed by SIGPIPE and post-receive is never executed.

The post-receive hook is often used to send email notifications (see
contrib/hooks/post-receive-email), update bug trackers, start automatic
builds, etc. Not executing it after an interrupted yet "successful" push
can lead to inconsistencies.

Ignore SIGPIPE before reporting status to the client to increase the
chances of post-receive running if pre-receive was successful. This does
not guarantee 100% consistency but it should resist early disconnection
by the client.

Signed-off-by: Robin Jarry <robin@jarry.cc>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: fr: v2.34.0 rnd 3
Jean-Noël Avila [Wed, 10 Nov 2021 21:01:57 +0000 (22:01 +0100)] 
l10n: fr: v2.34.0 rnd 3

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agomaintenance: disable cron on macOS
Derrick Stolee [Wed, 10 Nov 2021 18:35:59 +0000 (18:35 +0000)] 
maintenance: disable cron on macOS

In eba1ba9 (maintenance: `git maintenance run` learned
`--scheduler=<scheduler>`, 2021-09-04), we introduced the ability to
specify a scheduler explicitly. This led to some extra checks around
whether an alternative scheduler was available. This added the
functionality of removing background maintenance from schedulers other
than the one selected.

On macOS, cron is technically available, but running 'crontab' triggers
a UI prompt asking for special permissions. This is the major reason why
launchctl is used as the default scheduler. The is_crontab_available()
method triggers this UI prompt, causing user disruption.

Remove this disruption by using an #ifdef to prevent running crontab
this way on macOS. This has the unfortunate downside that if a user
manually selects cron via the '--scheduler' option, then adjusting the
scheduler later will not remove the schedule from cron. The
'--scheduler' option ignores the is_available checks, which is how we
can get into this situation.

Extract the new check_crontab_process() method to avoid making the
'child' variable unused on macOS. The method is marked MAYBE_UNUSED
because it has no callers on macOS.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: tr: v2.34.0 round 3
Emir Sarı [Wed, 10 Nov 2021 18:21:28 +0000 (21:21 +0300)] 
l10n: tr: v2.34.0 round 3

Signed-off-by: Emir Sarı <bitigchi@me.com>
4 years agosimple-ipc: work around issues with Cygwin's Unix socket emulation
Johannes Schindelin [Wed, 10 Nov 2021 11:09:10 +0000 (11:09 +0000)] 
simple-ipc: work around issues with Cygwin's Unix socket emulation

Cygwin emulates Unix sockets by writing files with custom contents and
then marking them as system files.

The tricky problem is that while the file is written and its `system`
bit is set, it is still identified as a file. This caused test failures
when Git is too fast looking for the Unix sockets and then complains
that there is a plain file in the way.

Let's work around this by adding a delayed retry loop, specifically for
Cygwin.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Tested-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: zh_CN: v2.34.0 round 3
Fangyi Zhou [Wed, 10 Nov 2021 12:29:09 +0000 (12:29 +0000)] 
l10n: zh_CN: v2.34.0 round 3

Signed-off-by: Fangyi Zhou <me@fangyi.io>
4 years agoMerge branch 'master' of github.com:alshopov/git-po
Jiang Xin [Wed, 10 Nov 2021 02:18:44 +0000 (10:18 +0800)] 
Merge branch 'master' of github.com:alshopov/git-po

* 'master' of github.com:alshopov/git-po:
  l10n: bg.po: Updated Bulgarian translation (5210t)

4 years agol10n: git.pot: v2.34.0 round 3 (1 new)
Jiang Xin [Wed, 10 Nov 2021 00:56:22 +0000 (08:56 +0800)] 
l10n: git.pot: v2.34.0 round 3 (1 new)

Generate po/git.pot from v2.34.0-rc2 for git v2.34.0 l10n round 3.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agoMerge branch 'master' of github.com:git/git
Jiang Xin [Wed, 10 Nov 2021 00:55:14 +0000 (08:55 +0800)] 
Merge branch 'master' of github.com:git/git

* 'master' of github.com:git/git:
  Git 2.34-rc2
  parse-options.[ch]: revert use of "enum" for parse_options()
  t/lib-git.sh: fix ACL-related permissions failure
  A few fixes before -rc2
  async_die_is_recursing: work around GCC v11.x issue on Fedora
  Document positive variant of commit and merge option "--no-verify"
  pull: honor --no-verify and do not call the commit-msg hook
  http-backend: remove a duplicated code branch

4 years agoGit 2.34-rc2 v2.34.0-rc2
Junio C Hamano [Tue, 9 Nov 2021 21:19:51 +0000 (13:19 -0800)] 
Git 2.34-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ab/parse-options-cleanup'
Junio C Hamano [Tue, 9 Nov 2021 21:19:06 +0000 (13:19 -0800)] 
Merge branch 'ab/parse-options-cleanup'

Last minute fix to the update already in 'master'.

* ab/parse-options-cleanup:
  parse-options.[ch]: revert use of "enum" for parse_options()

4 years agoMerge branch 'ad/ssh-signing-testfix'
Junio C Hamano [Tue, 9 Nov 2021 21:19:06 +0000 (13:19 -0800)] 
Merge branch 'ad/ssh-signing-testfix'

Fix ssh-signing test to work on a platform where the default ACL is
overly loose to upset OpenSSH (reported on an installation of Cygwin).

* ad/ssh-signing-testfix:
  t/lib-git.sh: fix ACL-related permissions failure

4 years agogit-jump: pass "merge" arguments to ls-files
Jeff King [Tue, 9 Nov 2021 16:35:47 +0000 (11:35 -0500)] 
git-jump: pass "merge" arguments to ls-files

We currently throw away any arguments given to "git jump merge". We
should instead pass them along to ls-files, since they're likely to be
pathspecs. This matches the behavior of "git jump diff", etc.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoparse-options.[ch]: revert use of "enum" for parse_options()
Ævar Arnfjörð Bjarmason [Tue, 9 Nov 2021 11:04:43 +0000 (12:04 +0100)] 
parse-options.[ch]: revert use of "enum" for parse_options()

Revert the parse_options() prototype change in my recent
352e761388b (parse-options.[ch]: consistently use "enum
parse_opt_result", 2021-10-08) was incorrect. The parse_options()
function returns the number of argc elements that haven't been
processed, not "enum parse_opt_result".

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: use only hyphens as word separators in placeholders
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:52 +0000 (19:48 +0100)] 
doc: use only hyphens as word separators in placeholders

According to CodingGuidelines, multi-word placeholders should use
hyphens as word separators.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoinit doc: --shared=0xxx does not give umask but perm bits
Junio C Hamano [Sat, 6 Nov 2021 18:48:58 +0000 (19:48 +0100)] 
init doc: --shared=0xxx does not give umask but perm bits

The description that 0640 makes sure that the group members can read
the repository is correct, but calling that octal number a <umask>
is wrong.  Let's call it <perm>, as the value is used to set the
permission bits.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: express grammar placeholders between angle brackets
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:51 +0000 (19:48 +0100)] 
doc: express grammar placeholders between angle brackets

This discerns user inputs from verbatim options in the synopsis.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: git-init: clarify file modes in octal.
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:57 +0000 (19:48 +0100)] 
doc: git-init: clarify file modes in octal.

The previous explanation was mixing the format with the identity of
the field.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: git-http-push: describe the refs as pattern pairs
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:56 +0000 (19:48 +0100)] 
doc: git-http-push: describe the refs as pattern pairs

Each member of the pair is explained but they are not defined
beforehand.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: uniformize <URL> placeholders' case
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:55 +0000 (19:48 +0100)] 
doc: uniformize <URL> placeholders' case

URL being an acronym, it deserves to be kept uppercase.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: use three dots for indicating repetition instead of star
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:54 +0000 (19:48 +0100)] 
doc: use three dots for indicating repetition instead of star

This is how it is specified in CodingGuidelines.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: git-ls-files: express options as optional alternatives
Jean-Noël Avila [Sat, 6 Nov 2021 18:48:53 +0000 (19:48 +0100)] 
doc: git-ls-files: express options as optional alternatives

That's how alternative options are expressed in general.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: pl: 2.34.0 round 2
Arusekk [Tue, 9 Nov 2021 13:48:08 +0000 (14:48 +0100)] 
l10n: pl: 2.34.0 round 2

Signed-off-by: Arusekk <arek_koz@o2.pl>
4 years agol10n: vi(5210t): Translation for v2.34.0 rd2
Tran Ngoc Quan [Mon, 8 Nov 2021 01:39:44 +0000 (08:39 +0700)] 
l10n: vi(5210t): Translation for v2.34.0 rd2

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
4 years agol10n: es: 2.34.0 round 2
Christopher Diaz Riveros [Sun, 10 Oct 2021 11:28:14 +0000 (13:28 +0200)] 
l10n: es: 2.34.0 round 2

Signed-off-by: Christopher Diaz Riveros <christopher.diaz.riv@gmail.com>
Signed-off-by: Omar Olivares <omar@olivares.cl>
Signed-off-by: Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
4 years agol10n: Update Catalan translation
Jordi Mas [Sat, 6 Nov 2021 12:43:08 +0000 (13:43 +0100)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
4 years agol10n: bg.po: Updated Bulgarian translation (5210t)
Alexander Shopov [Sat, 6 Nov 2021 10:31:37 +0000 (11:31 +0100)] 
l10n: bg.po: Updated Bulgarian translation (5210t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
4 years agoMerge branch 'pt-PT' of github.com:git-l10n-pt-PT/git-po
Jiang Xin [Sat, 6 Nov 2021 04:32:08 +0000 (12:32 +0800)] 
Merge branch 'pt-PT' of github.com:git-l10n-pt-PT/git-po

* 'pt-PT' of github.com:git-l10n-pt-PT/git-po:
  l10n: pt_PT: cleaning duplicate translations (#2)

4 years agoMerge branch 'l10n/zh_TW/211104' of github.com:l10n-tw/git-po
Jiang Xin [Sat, 6 Nov 2021 04:16:02 +0000 (12:16 +0800)] 
Merge branch 'l10n/zh_TW/211104' of github.com:l10n-tw/git-po

* 'l10n/zh_TW/211104' of github.com:l10n-tw/git-po:
  l10n: zh_TW.po: v2.34.0 round 2 (0 untranslated)

4 years agot/lib-git.sh: fix ACL-related permissions failure
Adam Dinwoodie [Fri, 5 Nov 2021 19:31:06 +0000 (19:31 +0000)] 
t/lib-git.sh: fix ACL-related permissions failure

As well as checking that the relevant functionality is available, the
GPGSSH prerequisite check creates the SSH keys that are used by the test
functions it gates.  If these keys are created in a directory that
has a default Access Control List, the key files can inherit those
permissions.

This can result in a scenario where the private keys are created
successfully, so the prerequisite check passes and the tests are run,
but the key files have permissions that are too permissive, meaning
OpenSSH will refuse to load them and the tests will fail.

To avoid this happening, before creating the keys, clear any default ACL
set on the directory that will contain them.  This step allowed to fail;
if setfacl isn't present, that's a very likely indicator that the
filesystem in question simply doesn't support default ACLs.

Helped-by: Fabian Stelzer <fs@gigacodes.de>
Signed-off-by: Adam Dinwoodie <adam@dinwoodie.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: fr: v2.34.0 round 2
Jean-Noël Avila [Fri, 5 Nov 2021 19:41:17 +0000 (20:41 +0100)] 
l10n: fr: v2.34.0 round 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agogenerate-cmdlist.sh: don't parse command-list.txt thrice
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:08 +0000 (15:08 +0100)] 
generate-cmdlist.sh: don't parse command-list.txt thrice

Change the "define_categories()" and "define_category_names()" functions
to take the already-parsed output of "category_list()" as an argument,
which brings our number of passes over "command-list.txt" from three
to two.

Then have "category_list()" itself take the output of "command_list()"
as an argument, bringing the number of times we parse the file to one.

Compared to the pre-image this speeds us up quite a bit:

    $ git show HEAD~:generate-cmdlist.sh >generate-cmdlist.sh.old
    $ hyperfine --warmup 10 -L v ,.old 'sh generate-cmdlist.sh{v} command-list.txt'
    Benchmark #1: sh generate-cmdlist.sh command-list.txt
      Time (mean ± σ):      22.9 ms ±   0.3 ms    [User: 15.8 ms, System: 9.6 ms]
      Range (min … max):    22.5 ms …  24.0 ms    125 runs

    Benchmark #2: sh generate-cmdlist.sh.old command-list.txt
      Time (mean ± σ):      30.1 ms ±   0.4 ms    [User: 24.4 ms, System: 17.5 ms]
      Range (min … max):    29.5 ms …  32.3 ms    96 runs

    Summary
      'sh generate-cmdlist.sh command-list.txt' ran
        1.32 ± 0.02 times faster than 'sh generate-cmdlist.sh.old command-list.txt'

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: replace "grep' invocation with a shell version
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:07 +0000 (15:08 +0100)] 
generate-cmdlist.sh: replace "grep' invocation with a shell version

Replace the "grep" we run to exclude certain programs from the
generated output with a pure-shell loop that strips out the comments,
and sees if the "cmd" we're reading is on a list of excluded
programs. This uses a trick similar to test_have_prereq() in
test-lib-functions.sh.

On my *nix system this makes things quite a bit slower compared to
HEAD~:
o
  'sh generate-cmdlist.sh.old command-list.txt' ran
    1.56 ± 0.11 times faster than 'sh generate-cmdlist.sh command-list.txt'
   18.00 ± 0.19 times faster than 'sh generate-cmdlist.sh.master command-list.txt'

But when I tried running generate-cmdlist.sh 100 times in CI I found
that it helped across the board even on OSX & Linux. I tried testing
it in CI with this ad-hoc few-liner:

    for i in $(seq -w 0 11 | sort -nr)
    do
     git show HEAD~$i:generate-cmdlist.sh >generate-cmdlist-HEAD$i.sh &&
     git add generate-cmdlist* &&
     cp t/t0000-generate-cmdlist.sh t/t00$i-generate-cmdlist.sh || : &&
     perl -pi -e "s/HEAD0/HEAD$i/g" t/t00$i-generate-cmdlist.sh &&
     git add t/t00*.sh
    done && git commit -m"generated it"

Here HEAD~02 and the t0002* file refers to this change, and HEAD~03
and t0003* file to the preceding commit, the relevant results were:

    linux-gcc:

    [12:05:33] t0002-generate-cmdlist.sh .. ok       14 ms ( 0.00 usr  0.00 sys +  3.64 cusr  3.09 csys =  6.73 CPU)
    [12:05:30] t0003-generate-cmdlist.sh .. ok       32 ms ( 0.00 usr  0.00 sys +  2.66 cusr  1.81 csys =  4.47 CPU)

    osx-gcc:

    [11:58:04] t0002-generate-cmdlist.sh .. ok    80081 ms ( 0.02 usr  0.02 sys + 17.80 cusr 10.07 csys = 27.91 CPU)
    [11:58:16] t0003-generate-cmdlist.sh .. ok    92127 ms ( 0.02 usr  0.01 sys + 22.54 cusr 14.27 csys = 36.84 CPU)

    vs-test:

    [12:03:14] t0002-generate-cmdlist.sh .. ok       30 s ( 0.02 usr  0.00 sys + 13.14 cusr 26.19 csys = 39.35 CPU)
    [12:03:20] t0003-generate-cmdlist.sh .. ok       32 s ( 0.00 usr  0.02 sys + 13.25 cusr 26.10 csys = 39.37 CPU)

I.e. even on *nix running 100 of these in a loop was up to ~2x faster
in absolute runtime, I suspect it's due factors that are exacerbated
in the CI, e.g. much slower process startup due to some platform
limits, or a slower FS.

The "cut -d" change here is because we're not emitting the
40-character aligned output anymore, i.e. we'll get the output from
command_list() now, not an as-is line from command-list.txt.

This also makes the parsing more reliable, as we could tweak the
whitespace alignment without breaking this parser. Let's reword a
now-inaccurate comment in "command-list.txt" describing that previous
alignment limitation. We'll still need the "### command-list [...]"
line due to the "Documentation/cmd-list.perl" logic added in
11c6659d85d (command-list: prepare machinery for upcoming "common
groups" section, 2015-05-21).

There was a proposed change subsequent to this one[3] which continued
moving more logic into the "command_list() function, i.e. replaced the
"cut | tr | grep" chain in "category_list()" with an argument to
"command_list()".

That change might have had a bit of an effect, but not as much as the
preceding commit, so I decided to drop it. The relevant performance
numbers from it were:

    linux-gcc:

    [12:05:33] t0001-generate-cmdlist.sh .. ok       13 ms ( 0.00 usr  0.00 sys +  3.33 cusr  2.78 csys =  6.11 CPU)
    [12:05:33] t0002-generate-cmdlist.sh .. ok       14 ms ( 0.00 usr  0.00 sys +  3.64 cusr  3.09 csys =  6.73 CPU)

    osx-gcc:

    [11:58:03] t0001-generate-cmdlist.sh .. ok    78416 ms ( 0.02 usr  0.01 sys + 11.78 cusr  6.22 csys = 18.03 CPU)
    [11:58:04] t0002-generate-cmdlist.sh .. ok    80081 ms ( 0.02 usr  0.02 sys + 17.80 cusr 10.07 csys = 27.91 CPU)

    vs-test:

    [12:03:20] t0001-generate-cmdlist.sh .. ok       34 s ( 0.00 usr  0.03 sys + 12.42 cusr 19.55 csys = 32.00 CPU)
    [12:03:14] t0002-generate-cmdlist.sh .. ok       30 s ( 0.02 usr  0.00 sys + 13.14 cusr 26.19 csys = 39.35 CPU)

As above HEAD~2 and t0002* are testing the code in this commit (and
the line is the same), but HEAD~1 and t0001* are testing that dropped
change in [3].

1. https://lore.kernel.org/git/cover-v2-00.10-00000000000-20211022T193027Z-avarab@gmail.com/
2. https://lore.kernel.org/git/patch-v2-08.10-83318d6c0da-20211022T193027Z-avarab@gmail.com/
3. https://lore.kernel.org/git/patch-v2-10.10-e10a43756d1-20211022T193027Z-avarab@gmail.com/

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: do not shell out to "sed"
Jeff King [Fri, 5 Nov 2021 14:08:06 +0000 (15:08 +0100)] 
generate-cmdlist.sh: do not shell out to "sed"

Replace the "sed" invocation in get_synopsis() with a pure-shell
version. This speeds up generate-cmdlist.sh significantly. Compared to
HEAD~ (old) and "master" we are, according to hyperfine(1):

  'sh generate-cmdlist.sh command-list.txt' ran
   12.69 ± 5.01 times faster than 'sh generate-cmdlist.sh.old command-list.txt'
   18.34 ± 3.03 times faster than 'sh generate-cmdlist.sh.master command-list.txt'

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: stop sorting category lines
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:05 +0000 (15:08 +0100)] 
generate-cmdlist.sh: stop sorting category lines

In a preceding commit we changed the print_command_list() loop to use
printf's auto-repeat feature. Let's now get rid of get_category_line()
entirely by not sorting the categories.

This will change the output of the generated code from e.g.:

    -       { "git-apply", N_("Apply a patch to files and/or to the index"), 0 | CAT_complete | CAT_plumbingmanipulators },

To:

    +       { "git-apply", N_("Apply a patch to files and/or to the index"), 0 | CAT_plumbingmanipulators | CAT_complete },

I.e. the categories are no longer sorted, but as they're OR'd together
it won't matter for the end result.

This speeds up the generate-cmdlist.sh a bit. Comparing HEAD~ (old)
and "master" to this code:

  'sh generate-cmdlist.sh command-list.txt' ran
    1.07 ± 0.33 times faster than 'sh generate-cmdlist.sh.old command-list.txt'
    1.15 ± 0.36 times faster than 'sh generate-cmdlist.sh.master command-list.txt'

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: replace for loop by printf's auto-repeat feature
Johannes Sixt [Fri, 5 Nov 2021 14:08:04 +0000 (15:08 +0100)] 
generate-cmdlist.sh: replace for loop by printf's auto-repeat feature

This is just a small code reduction. There is a small probability that
the new code breaks when the category list is empty. But that would be
noticed during the compile step.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: run "grep | sort", not "sort | grep"
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:03 +0000 (15:08 +0100)] 
generate-cmdlist.sh: run "grep | sort", not "sort | grep"

This doesn't matter for performance, but let's not include the empty
lines in our sorting. This makes the intent of the code clearer.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: don't call get_categories() from category_list()
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:02 +0000 (15:08 +0100)] 
generate-cmdlist.sh: don't call get_categories() from category_list()

This isn't for optimization as the get_categories() is a purely shell
function, but rather for ease of readability, let's just inline these
two lines. We'll be changing this code some more in subsequent commits
to make this worth it.

Rename the get_categories() function to get_category_line(), since
that's what it's doing now.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: spawn fewer processes
Johannes Sixt [Fri, 5 Nov 2021 14:08:01 +0000 (15:08 +0100)] 
generate-cmdlist.sh: spawn fewer processes

The function get_categories() is invoked in a loop over all commands.
As it runs several processes, this takes an awful lot of time on
Windows. To reduce the number of processes, move the process that
filters empty lines to the other invoker of the function, where it is
needed. The invocation of get_categories() in the loop does not need
the empty line filtered away because the result is word-split by the
shell, which eliminates the empty line automatically.

Furthermore, use sort -u instead of sort | uniq to remove yet another
process.

[Ævar: on Linux this seems to speed things up a bit, although with
hyperfine(1) the results are fuzzy enough to land within the
confidence interval]:

$ git show HEAD~:generate-cmdlist.sh >generate-cmdlist.sh.old
$ hyperfine --warmup 1 -L s ,.old -p 'make clean' 'sh generate-cmdlist.sh{s} command-list.txt'
Benchmark #1: sh generate-cmdlist.sh command-list.txt
  Time (mean ± σ):     371.3 ms ±  64.2 ms    [User: 430.4 ms, System: 72.5 ms]
  Range (min … max):   320.5 ms … 517.7 ms    10 runs

Benchmark #2: sh generate-cmdlist.sh.old command-list.txt
  Time (mean ± σ):     489.9 ms ± 185.4 ms    [User: 724.7 ms, System: 141.3 ms]
  Range (min … max):   346.0 ms … 885.3 ms    10 runs

Summary
  'sh generate-cmdlist.sh command-list.txt' ran
    1.32 ± 0.55 times faster than 'sh generate-cmdlist.sh.old command-list.txt'

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogenerate-cmdlist.sh: trivial whitespace change
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:08:00 +0000 (15:08 +0100)] 
generate-cmdlist.sh: trivial whitespace change

Add " " before a "|" at the end of a line in generate-cmdlist.sh for
consistency with other code in the file. Some of the surrounding code
will be modified in subsequent commits.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommand-list.txt: sort with "LC_ALL=C sort"
Ævar Arnfjörð Bjarmason [Fri, 5 Nov 2021 14:07:59 +0000 (15:07 +0100)] 
command-list.txt: sort with "LC_ALL=C sort"

We should keep these files sorted in the C locale, e.g. in the C
locale the order is:

    git-check-mailmap
    git-check-ref-format
    git-checkout

But under en_US.UTF-8 it's:

    git-check-mailmap
    git-checkout
    git-check-ref-format

In a subsequent commit I'll change generate-cmdlist.sh to use C sort
order, and without this change we'd be led to believe that that change
caused a meaningful change in the output, so let's do this as a
separate step, right now the generate-cmdlist.sh script just uses the
order found in this file.

Note that this refers to the sort order of the lines in
command-list.txt, a subsequent commit will also change how we treat
the sort order of the "category" fields, but that's unrelated to this
change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotest_bitmap_hashes(): handle repository without bitmaps
Jeff King [Fri, 5 Nov 2021 09:01:31 +0000 (05:01 -0400)] 
test_bitmap_hashes(): handle repository without bitmaps

If prepare_bitmap_git() returns NULL (one easy-to-trigger cause being
that the repository does not have bitmaps at all), then we'll segfault
accessing bitmap_git->hashes:

  $ t/helper/test-tool bitmap dump-hashes
  Segmentation fault

We should treat this the same as a repository with bitmaps but no
name-hashes, and quietly produce an empty output. The later call to
free_bitmap_index() in the cleanup label is OK, as it treats a NULL
pointer as a noop.

This isn't a big deal in practice, as this function is intended for and
used only by test-tool. It's probably worth fixing to avoid confusion,
but not worth adding coverage for this to the test suite.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'vk/readme-typo'
Pratyush Yadav [Fri, 5 Nov 2021 12:17:11 +0000 (17:47 +0530)] 
Merge branch 'vk/readme-typo'

Add missing punctuation.

* vk/readme-typo:
  git-gui: Fix a typo in README

4 years agogit-gui: Fix a typo in README
Vipul Kumar [Fri, 5 Nov 2021 06:23:33 +0000 (11:53 +0530)] 
git-gui: Fix a typo in README

Add a missing punctuation.

Signed-off-by: Vipul Kumar <kumar@onenetbeyond.org>
Signed-off-by: Pratyush Yadav <me@yadavpratyush.com>
4 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Fri, 5 Nov 2021 11:48:09 +0000 (19:48 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

* 'po-id' of github.com:bagasme/git-po:
  l10n: po-id for 2.34 (round 2)

4 years agol10n: po-id for 2.34 (round 2)
Bagas Sanjaya [Fri, 5 Nov 2021 08:24:29 +0000 (15:24 +0700)] 
l10n: po-id for 2.34 (round 2)

Translate following new components:

  * gpg-interface.c
  * send-pack.c
  * fetch-pack.c
  * upload-pack.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
4 years agol10n: zh_TW.po: v2.34.0 round 2 (0 untranslated)
pan93412 [Thu, 4 Nov 2021 12:09:26 +0000 (20:09 +0800)] 
l10n: zh_TW.po: v2.34.0 round 2 (0 untranslated)

Signed-off-by: pan93412 <pan93412@gmail.com>
4 years agoMerge branch 'master' of github.com:nafmo/git-l10n-sv
Jiang Xin [Fri, 5 Nov 2021 00:18:57 +0000 (08:18 +0800)] 
Merge branch 'master' of github.com:nafmo/git-l10n-sv

* 'master' of github.com:nafmo/git-l10n-sv:
  l10n: sv.po: Update Swedish translation (5210t0f0u)

4 years agoMerge branch 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po
Jiang Xin [Fri, 5 Nov 2021 00:17:50 +0000 (08:17 +0800)] 
Merge branch 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po

* 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po:
  l10n: zh_CN: 2.34.0 Round 2

4 years agol10n: sv.po: Update Swedish translation (5210t0f0u)
Peter Krefting [Mon, 1 Nov 2021 16:40:48 +0000 (17:40 +0100)] 
l10n: sv.po: Update Swedish translation (5210t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>