]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
6 months agosend-email: avoid duplicate specification warnings
Todd Zullinger [Thu, 16 Nov 2023 19:30:11 +0000 (14:30 -0500)] 
send-email: avoid duplicate specification warnings

A warning is issued for options which are specified more than once
beginning with perl-Getopt-Long >= 2.55.  In addition to causing users
to see warnings, this results in test failures which compare the output.
An example, from t9001-send-email.37:

  | +++ diff -u expect actual
  | --- expect      2023-11-14 10:38:23.854346488 +0000
  | +++ actual      2023-11-14 10:38:23.848346466 +0000
  | @@ -1,2 +1,7 @@
  | +Duplicate specification "no-chain-reply-to" for option "no-chain-reply-to"
  | +Duplicate specification "to-cover|to-cover!" for option "to-cover"
  | +Duplicate specification "cc-cover|cc-cover!" for option "cc-cover"
  | +Duplicate specification "no-thread" for option "no-thread"
  | +Duplicate specification "no-to-cover" for option "no-to-cover"
  |  fatal: longline.patch:35 is longer than 998 characters
  |  warning: no patches were sent
  | error: last command exited with $?=1
  | not ok 37 - reject long lines

Remove the duplicate option specs.  These are primarily the explicit
'--no-' prefix opts which were added in f471494303 (git-send-email.perl:
support no- prefix with older GetOptions, 2015-01-30).  This was done
specifically to support perl-5.8.0 which includes Getopt::Long 2.32[1].

Getopt::Long 2.33 added support for the '--no-' prefix natively by
appending '!' to the option specification string, which was included in
perl-5.8.1 and is not present in perl-5.8.0.  The previous commit bumped
the minimum supported Perl version to 5.8.1 so we no longer need to
provide the '--no-' variants for negatable options manually.

Teach `--git-completion-helper` to output the '--no-' options.  They are
not included in the options hash and would otherwise be lost.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 months agoperl: bump the required Perl version to 5.8.1 from 5.8.0
Todd Zullinger [Thu, 16 Nov 2023 19:30:10 +0000 (14:30 -0500)] 
perl: bump the required Perl version to 5.8.1 from 5.8.0

The following commit will make use of a Getopt::Long feature which is
only present in Perl >= 5.8.1.  Document that as the minimum version we
support.

Many of our Perl scripts will continue to run with 5.8.0 but this change
allows us to adjust them as needed without breaking any promises to our
users.

The Perl requirement was last changed in d48b284183 (perl: bump the
required Perl version to 5.8 from 5.6.[21], 2010-09-24).  At that time,
5.8.0 was 8 years old.  It is now over 21 years old.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agoGit 2.42 v2.42.0
Junio C Hamano [Mon, 21 Aug 2023 16:34:58 +0000 (09:34 -0700)] 
Git 2.42

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agoMerge branch 'jk/function-pointer-mismatches-fix' (early part)
Junio C Hamano [Mon, 21 Aug 2023 16:27:44 +0000 (09:27 -0700)] 
Merge branch 'jk/function-pointer-mismatches-fix' (early part)

Fix a minor regression that some compiler might notice.

* 'jk/function-pointer-mismatches-fix' (early part):
  fsck: use enum object_type for fsck_walk callback

9 months agoMerge tag 'l10n-2.42.0-rnd2' of https://github.com/git-l10n/git-po
Junio C Hamano [Mon, 21 Aug 2023 15:43:46 +0000 (08:43 -0700)] 
Merge tag 'l10n-2.42.0-rnd2' of https://github.com/git-l10n/git-po

l10n-2.42.0-rnd2

* tag 'l10n-2.42.0-rnd2' of https://github.com/git-l10n/git-po:
  l10n: zh_TW.po: Git 2.42
  l10n: zh_CN: 2.42.0 round 2
  l10n: zh_CN: v2.42.0 round 1
  l10n: Update German translation
  l10n: Update Catalan translation
  l10n: tr: git 2.42.0
  l10n: fr v2.42.0 rnd 2
  l10n: fr v2.42.0 rnd 1
  l10n: sv.po: Update Swedish translation 5549t0f0u
  l10n: uk: update translation (2.42.0)
  l10n: po-id for 2.42 (round 1)
  l10n: ru.po: update Russian translation

9 months agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sun, 20 Aug 2023 23:05:38 +0000 (07:05 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

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

9 months agol10n: zh_TW.po: Git 2.42
Yi-Jyun Pan [Sat, 5 Aug 2023 15:37:39 +0000 (23:37 +0800)] 
l10n: zh_TW.po: Git 2.42

Co-authored-by: Lumynous <lumynou5.tw@gmail.com>
Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
9 months agofsck: use enum object_type for fsck_walk callback
Jeff King [Sat, 19 Aug 2023 23:53:42 +0000 (19:53 -0400)] 
fsck: use enum object_type for fsck_walk callback

We switched the function interface for fsck callbacks in a1aad71601
(fsck.h: use "enum object_type" instead of "int", 2021-03-28). However,
we accidentally flipped the type back to "int" as part of 0b4e9013f1
(fsck: mark unused parameters in various fsck callbacks, 2023-07-03).
The mistake happened because that commit was written before a1aad71601
and rebased forward, and I screwed up while resolving the conflict.

Curiously, the compiler does not warn about this mismatch, at least not
when using gcc and clang on Linux (nor in any of our CI environments).
Based on 28abf260a5 (builtin/fsck.c: don't conflate "int" and "enum" in
callback, 2021-06-01), I'd guess that this would cause the AIX xlc
compiler to complain. I noticed because clang-18's UBSan now identifies
mis-matched function calls at runtime, and does complain of this case
when running the test suite.

I'm not entirely clear on whether this mismatch is a problem in
practice. Compilers are certainly free to make enums smaller than "int"
if they don't need the bits, but I suspect that they have to promote
back to int for function calls (though I didn't dig in the standard, and
I won't be surprised if I'm simply wrong and the real-world impact would
depend on the ABI).

Regardless, switching it back to enum is obviously the right thing to do
here; the switch to "int" was simply a mistake.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agoMerge branch 'l10n-de-2.42' of github.com:ralfth/git
Jiang Xin [Sat, 19 Aug 2023 13:09:31 +0000 (21:09 +0800)] 
Merge branch 'l10n-de-2.42' of github.com:ralfth/git

* 'l10n-de-2.42' of github.com:ralfth/git:
  l10n: Update German translation

9 months agoMerge branch 'catalan' of github.com:Softcatala/git-po
Jiang Xin [Sat, 19 Aug 2023 13:08:22 +0000 (21:08 +0800)] 
Merge branch 'catalan' of github.com:Softcatala/git-po

* 'catalan' of github.com:Softcatala/git-po:
  l10n: Update Catalan translation

9 months agoMerge branch 'update-uk-l10n' of github.com:arkid15r/git-ukrainian-l10n
Jiang Xin [Sat, 19 Aug 2023 13:07:47 +0000 (21:07 +0800)] 
Merge branch 'update-uk-l10n' of github.com:arkid15r/git-ukrainian-l10n

* 'update-uk-l10n' of github.com:arkid15r/git-ukrainian-l10n:
  l10n: uk: update translation (2.42.0)

9 months agoMerge branch 'tl/zh_CN_2.42.0_rnd1' of github.com:dyrone/git
Jiang Xin [Sat, 19 Aug 2023 13:07:03 +0000 (21:07 +0800)] 
Merge branch 'tl/zh_CN_2.42.0_rnd1' of github.com:dyrone/git

* 'tl/zh_CN_2.42.0_rnd1' of github.com:dyrone/git:
  l10n: zh_CN: 2.42.0 round 2
  l10n: zh_CN: v2.42.0 round 1

9 months agoMerge branch 'master' of github.com:nafmo/git-l10n-sv
Jiang Xin [Sat, 19 Aug 2023 13:05:00 +0000 (21:05 +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 5549t0f0u

9 months agoMerge branch 'l10n-tr' of github.com:bitigchi/git-po
Jiang Xin [Sat, 19 Aug 2023 13:04:09 +0000 (21:04 +0800)] 
Merge branch 'l10n-tr' of github.com:bitigchi/git-po

* 'l10n-tr' of github.com:bitigchi/git-po:
  l10n: tr: git 2.42.0

9 months agol10n: zh_CN: 2.42.0 round 2
Teng Long [Fri, 18 Aug 2023 02:23:09 +0000 (10:23 +0800)] 
l10n: zh_CN: 2.42.0 round 2

Signed-off-by: Teng Long <dyroneteng@gmail.com>
9 months agol10n: zh_CN: v2.42.0 round 1
Teng Long [Wed, 9 Aug 2023 09:48:02 +0000 (17:48 +0800)] 
l10n: zh_CN: v2.42.0 round 1

Signed-off-by: Teng Long <dyroneteng@gmail.com>
9 months agoMerge branch 'ps/revision-stdin-with-options'
Junio C Hamano [Thu, 17 Aug 2023 22:50:05 +0000 (15:50 -0700)] 
Merge branch 'ps/revision-stdin-with-options'

Typofix to documentation added during this cycle.

* ps/revision-stdin-with-options:
  rev-list-options: fix typo in `--stdin` documentation

9 months agoMerge branch 'sa/doc-ls-remote'
Junio C Hamano [Thu, 17 Aug 2023 22:50:05 +0000 (15:50 -0700)] 
Merge branch 'sa/doc-ls-remote'

Mark-up fix to documentation added during this cycle.

* sa/doc-ls-remote:
  show-ref doc: fix carets in monospace

9 months agoMerge branch 'tl/notes-separator'
Junio C Hamano [Thu, 17 Aug 2023 22:50:05 +0000 (15:50 -0700)] 
Merge branch 'tl/notes-separator'

Typo/grammofix to documentation added during this cycle.

* tl/notes-separator:
  notes doc: tidy up `--no-stripspace` paragraph
  notes doc: split up run-on sentences

9 months agol10n: Update German translation
Ralf Thielow [Thu, 17 Aug 2023 15:00:36 +0000 (17:00 +0200)] 
l10n: Update German translation

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
9 months agorev-list-options: fix typo in `--stdin` documentation
Martin Ågren [Wed, 16 Aug 2023 14:24:36 +0000 (16:24 +0200)] 
rev-list-options: fix typo in `--stdin` documentation

With `--stdin`, we read *from* standard input, not *for*.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agoshow-ref doc: fix carets in monospace
Martin Ågren [Wed, 16 Aug 2023 14:24:35 +0000 (16:24 +0200)] 
show-ref doc: fix carets in monospace

When commit 00bf685975 (show-ref doc: update for internal consistency,
2023-05-19) switched from double quotes to backticks around our {caret}
macro, we started rendering "{caret}" literally. Fix this by replacing
by a "^" character.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agonotes doc: tidy up `--no-stripspace` paragraph
Martin Ågren [Wed, 16 Aug 2023 14:24:34 +0000 (16:24 +0200)] 
notes doc: tidy up `--no-stripspace` paragraph

Where we document the `--no-stripspace` option, remove a superfluous
"For" to fix the grammar. Mark option names and command names using
`backticks` to set them in monospace.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agonotes doc: split up run-on sentences
Martin Ågren [Wed, 16 Aug 2023 14:24:33 +0000 (16:24 +0200)] 
notes doc: split up run-on sentences

When commit c4e2aa7d45 (notes.c: introduce "--[no-]stripspace" option,
2023-05-27) mentioned the new `--no-stripspace` in the documentation for
`-m` and `-F`, it created run-on sentences. It also used slightly
different language in the two sections for no apparent reason. Split the
sentences in two to improve readability, and while touching the two
sites, make them more similar.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agol10n: Update Catalan translation
Jordi Mas [Wed, 16 Aug 2023 16:25:02 +0000 (18:25 +0200)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
9 months agol10n: tr: git 2.42.0
Emir SARI [Mon, 7 Aug 2023 15:40:16 +0000 (18:40 +0300)] 
l10n: tr: git 2.42.0

Signed-off-by: Emir SARI <emir_sari@icloud.com>
9 months agol10n: fr v2.42.0 rnd 2
Jean-Noël Avila [Wed, 16 Aug 2023 09:50:23 +0000 (11:50 +0200)] 
l10n: fr v2.42.0 rnd 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
9 months agol10n: fr v2.42.0 rnd 1
Jean-Noël Avila [Sun, 6 Aug 2023 08:01:50 +0000 (10:01 +0200)] 
l10n: fr v2.42.0 rnd 1

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
9 months agol10n: sv.po: Update Swedish translation 5549t0f0u
Peter Krefting [Wed, 16 Aug 2023 06:42:51 +0000 (07:42 +0100)] 
l10n: sv.po: Update Swedish translation 5549t0f0u

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
9 months agol10n: uk: update translation (2.42.0)
Arkadii Yakovets [Wed, 16 Aug 2023 01:55:13 +0000 (18:55 -0700)] 
l10n: uk: update translation (2.42.0)

Co-authored-by: Kate Golovanova <kate@kgthreads.com>
Signed-off-by: Arkadii Yakovets <ark@cho.red>
Signed-off-by: Kate Golovanova <kate@kgthreads.com>
9 months agoMerge branch 'master' of github.com:git/git
Jiang Xin [Tue, 15 Aug 2023 23:24:56 +0000 (07:24 +0800)] 
Merge branch 'master' of github.com:git/git

* 'master' of github.com:git/git: (34 commits)
  Git 2.42-rc2
  t4053: avoid writing to unopened pipe
  t4053: avoid race when killing background processes
  Git 2.42-rc1
  git maintenance: avoid console window in scheduled tasks on Windows
  win32: add a helper to run `git.exe` without a foreground window
  t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1
  mv: handle lstat() failure correctly
  parse-options: disallow negating OPTION_SET_INT 0
  repack: free geometry struct
  send-email: avoid creating more than one Term::ReadLine object
  send-email: drop FakeTerm hack
  t0040: declare non-tab indentation to be okay in this script
  advice: handle "rebase" in error_resolve_conflict()
  A few more topics before -rc1
  mailmap: change primary address for Glen Choo
  gitignore: ignore clangd .cache directory
  docs: update when `git bisect visualize` uses `gitk`
  compat/mingw: implement a native locate_in_PATH()
  run-command: conditionally define locate_in_PATH()
  ...

9 months agoGit 2.42-rc2 v2.42.0-rc2
Junio C Hamano [Tue, 15 Aug 2023 17:20:02 +0000 (10:20 -0700)] 
Git 2.42-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 months agoMerge branch 'pw/diff-no-index-from-named-pipes'
Junio C Hamano [Tue, 15 Aug 2023 17:19:47 +0000 (10:19 -0700)] 
Merge branch 'pw/diff-no-index-from-named-pipes'

Test updates.

* pw/diff-no-index-from-named-pipes:
  t4053: avoid writing to unopened pipe
  t4053: avoid race when killing background processes

9 months agoMerge branch 'st/mv-lstat-fix'
Junio C Hamano [Tue, 15 Aug 2023 17:19:47 +0000 (10:19 -0700)] 
Merge branch 'st/mv-lstat-fix'

Correct use of lstat() that assumed a failing call would not
clobber the statbuf.

* st/mv-lstat-fix:
  mv: handle lstat() failure correctly

9 months agoMerge branch 'jc/send-email-pre-process-fix'
Junio C Hamano [Tue, 15 Aug 2023 17:19:47 +0000 (10:19 -0700)] 
Merge branch 'jc/send-email-pre-process-fix'

Test fix.

* jc/send-email-pre-process-fix:
  t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1

9 months agoMerge branch 'ds/maintenance-on-windows-fix'
Junio C Hamano [Tue, 15 Aug 2023 17:19:47 +0000 (10:19 -0700)] 
Merge branch 'ds/maintenance-on-windows-fix'

Windows updates.

* ds/maintenance-on-windows-fix:
  git maintenance: avoid console window in scheduled tasks on Windows
  win32: add a helper to run `git.exe` without a foreground window

9 months agoMerge branch 'js/allow-t4000-to-be-indented-with-spaces'
Junio C Hamano [Mon, 14 Aug 2023 20:26:41 +0000 (13:26 -0700)] 
Merge branch 'js/allow-t4000-to-be-indented-with-spaces'

File attribute update.

* js/allow-t4000-to-be-indented-with-spaces:
  t0040: declare non-tab indentation to be okay in this script

9 months agoMerge branch 'jk/send-email-with-new-readline'
Junio C Hamano [Mon, 14 Aug 2023 20:26:41 +0000 (13:26 -0700)] 
Merge branch 'jk/send-email-with-new-readline'

Adjust to newer Term::ReadLine to prevent it from breaking
the interactive prompt code in send-email.

* jk/send-email-with-new-readline:
  send-email: avoid creating more than one Term::ReadLine object
  send-email: drop FakeTerm hack

9 months agoMerge branch 'jk/repack-leakfix'
Junio C Hamano [Mon, 14 Aug 2023 20:26:40 +0000 (13:26 -0700)] 
Merge branch 'jk/repack-leakfix'

Leakfix.

* jk/repack-leakfix:
  repack: free geometry struct

9 months agoMerge branch 'rs/parse-opt-forbid-set-int-0-without-noneg'
Junio C Hamano [Mon, 14 Aug 2023 20:26:40 +0000 (13:26 -0700)] 
Merge branch 'rs/parse-opt-forbid-set-int-0-without-noneg'

Developer support to detect meaningless combination of options.

* rs/parse-opt-forbid-set-int-0-without-noneg:
  parse-options: disallow negating OPTION_SET_INT 0

9 months agoMerge branch 'ob/rebase-conflict-advice-i18n-fix'
Junio C Hamano [Mon, 14 Aug 2023 20:26:40 +0000 (13:26 -0700)] 
Merge branch 'ob/rebase-conflict-advice-i18n-fix'

i18n coverage improvement and avoidance of sentence lego.

* ob/rebase-conflict-advice-i18n-fix:
  advice: handle "rebase" in error_resolve_conflict()

9 months agot4053: avoid writing to unopened pipe
Jeff King [Sun, 13 Aug 2023 16:24:40 +0000 (12:24 -0400)] 
t4053: avoid writing to unopened pipe

This fixes an occasional hang I see when running t4053 with
--verbose-log using dash.

Commit 1e3f26542a (diff --no-index: support reading from named pipes,
2023-07-05) added a test that "diff --no-index" will complain when
comparing a named pipe and a directory. The minimum we need to test this
is to mkfifo the pipe, and then run "git diff --no-index pipe some_dir".
But the test does one thing more: it spawns a background shell process
that opens the pipe for writing, like this:

        {
                (>pipe) &
        } &&

This extra writer _could_ be useful if Git misbehaves and tries to open
the pipe for reading. Without the writer, Git would block indefinitely
and the test would never end. But since we do not have such a bug, Git
does not open the pipe and it is the writing process which will block
indefinitely, since there are no readers. The test addresses this by
running "kill $!" in a test_when_finished block. Since the writer should
be blocking forever, this kill command will reliably find it waiting.

However, this seems to be somewhat racy, in that the writing process
sometimes hangs around even after the "kill". In a normal run of the
test script without options, this doesn't have any effect; the
main test script completes anyway. But with --verbose-log, we spawn a
"tee" process that reads the script output, and it won't end until all
descriptors pointing to its input pipe are closed. And the background
process that is hanging around still has its stderr, etc, pointed into
that pipe.

You can reproduce the situation like this:

  cd t
  ./t4053-diff-no-index.sh --verbose-log --stress

Let that run for a few minutes, and then you'll find that some of the
runs have hung. For example, at 11:53, I ran:

  $ ps xk start o pid,start,command | grep tee | head
   713459 11:48:06 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-9.out
   713527 11:48:06 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-15.out
   719434 11:48:07 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-1.out
   728117 11:48:08 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-5.out
   738738 11:48:09 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-31.out
   739457 11:48:09 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-27.out
   744432 11:48:10 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-21.out
   744471 11:48:10 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-29.out
   761961 11:48:12 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-0.out
   812299 11:48:19 tee -a /home/peff/compile/git/t/test-results/t4053-diff-no-index.stress-8.out

All of these have been hung for several minutes. We can investigate one
and see that it's waiting to get EOF on its input:

  $ strace -p 713459
  strace: Process 713459 attached
  read(0,
  ^C

Who else has that descriptor open?

  $ lsof -a -p 713459 -d 0 +E
  COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
  tee     713459 peff    0r  FIFO   0,13      0t0 3943636 pipe 719203,sh,5w 719203,sh,7w 719203,sh,12w 719203,sh,13w
  sh      719203 peff    5w  FIFO   0,13      0t0 3943636 pipe 713459,tee,0r 719203,sh,7w 719203,sh,12w 719203,sh,13w
  sh      719203 peff    7w  FIFO   0,13      0t0 3943636 pipe 713459,tee,0r 719203,sh,5w 719203,sh,12w 719203,sh,13w
  sh      719203 peff   12w  FIFO   0,13      0t0 3943636 pipe 713459,tee,0r 719203,sh,5w 719203,sh,7w 719203,sh,13w
  sh      719203 peff   13w  FIFO   0,13      0t0 3943636 pipe 713459,tee,0r 719203,sh,5w 719203,sh,7w 719203,sh,12w

It's a shell, presumably a subshell spawned by the main script. Though
it may seem odd, having the same descriptor open several times is not
unreasonable (they're all basically the original stdout/stderr of the
script that has been copied). And they should all close when the process
exits. So what's it doing? Curiously, it will exit as soon as we strace
it:

  $ strace -s 64 -p 719203
  strace: Process 719203 attached
  openat(AT_FDCWD, "pipe", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)
  write(2, "./t4053-diff-no-index.sh: 7: eval: ", 35) = 35
  write(2, "cannot create pipe: Directory nonexistent", 41) = 41
  write(2, "\n", 1)                       = 1
  exit_group(2)                           = ?
  +++ exited with 2 +++

I think what happens is this:

  - it is blocking in the openat() call for the pipe, as we expect (so
    this is definitely the backgrounded subshell mentioned above)

  - strace sends signals (probably STOP/CONT); those cause the kernel to
    stop blocking, but libc will restart the system call automatically

  - by this time, the "pipe" fifo is gone, so we'll actually try to
    create a regular file. But of course the surrounding directory is
    gone, too! So we get ENOENT, and then exit as normal.

So the blocking is something we expect to happen. But what we didn't
expect is for the process to still exist at all! It should have been
killed earlier when the parent process called "kill", but it wasn't. And
we can't catch the race at this point, because it happened much earlier.

One can guess, though, that there is some race with the shell setting up
the signal handling in the backgrounded subshell, and possibly blocking
or ignoring signals at the time that the "kill" is received.  Curiously,
the race does not seem to happen if I use "bash" instead of "dash", so
presumably bash's setup here is more atomic.

One fix might be to try killing the subshell more aggressively, either
using SIGKILL, or looping on kill/wait. But that seems complex and
likely to introduce new problems/races. Instead, we can observe that the
writer is not needed at all. Git will notice the pipe via stat() before
it is ever opened. So we can simply drop the writer subshell entirely.

If we ever changed Git to open the path and fstat() it, this would
result in the test hanging. But we're not likely to do that. After all,
we have to stat() paths to see if they are openable at all (e.g., it
could be a directory), so this seems like a low risk. And anybody who
does make such a change will immediately see the issue, as Git would
hang consistently.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agot4053: avoid race when killing background processes
Phillip Wood [Thu, 10 Aug 2023 14:33:13 +0000 (14:33 +0000)] 
t4053: avoid race when killing background processes

The test 'diff --no-index reads from pipes' starts a couple of
background processes that write to the pipes that are passed to "diff
--no-index". If the test passes then we expect these processes to exit
as all their output will have been read. However if the test fails
then we want to make sure they do not hang about on the users machine
and the test remembers they should be killed by calling

      test_when_finished  "! kill $!"

after each background process is created. Unfortunately there is a
race where test_when_finished may run before the background process
exits even when all its output has been read resulting in the kill
command succeeding which causes the test to fail. Fix this by ignoring
the exit status of the kill command. If the diff is successful we
could instead wait for the background process to exit and check their
status but that feels like it is testing the platform's printf
implementation rather than git's code.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoGit 2.42-rc1 v2.42.0-rc1
Junio C Hamano [Wed, 9 Aug 2023 23:17:27 +0000 (16:17 -0700)] 
Git 2.42-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoMerge branch 'pw/rebase-skip-commit-message-fix'
Junio C Hamano [Wed, 9 Aug 2023 23:18:16 +0000 (16:18 -0700)] 
Merge branch 'pw/rebase-skip-commit-message-fix'

"git rebase -i" with a series of squash/fixup, when one of the
steps stopped in conflicts and ended up getting skipped, did not
handle the accumulated commit log messages, which has been
corrected.

* pw/rebase-skip-commit-message-fix:
  rebase --skip: fix commit message clean up when skipping squash

10 months agoMerge branch 'ma/locate-in-path-for-windows'
Junio C Hamano [Wed, 9 Aug 2023 23:18:15 +0000 (16:18 -0700)] 
Merge branch 'ma/locate-in-path-for-windows'

"git bisect visualize" stopped running "gitk" on Git for Windows
when the command was reimplemented in C around Git 2.34 timeframe.
This has been corrected.

* ma/locate-in-path-for-windows:
  docs: update when `git bisect visualize` uses `gitk`
  compat/mingw: implement a native locate_in_PATH()
  run-command: conditionally define locate_in_PATH()

10 months agoMerge branch 'bc/ignore-clangd-cache'
Junio C Hamano [Wed, 9 Aug 2023 23:18:15 +0000 (16:18 -0700)] 
Merge branch 'bc/ignore-clangd-cache'

.gitignore update.

* bc/ignore-clangd-cache:
  gitignore: ignore clangd .cache directory

10 months agoMerge branch 'bc/ident-dot-is-no-longer-crud-letter'
Junio C Hamano [Wed, 9 Aug 2023 23:18:15 +0000 (16:18 -0700)] 
Merge branch 'bc/ident-dot-is-no-longer-crud-letter'

Exclude "." from the set of characters to be removed from the
beginning and the end of the human-readable name.

* bc/ident-dot-is-no-longer-crud-letter:
  ident: don't consider '.' a crud

10 months agoMerge branch 'ew/hash-with-openssl-evp'
Junio C Hamano [Wed, 9 Aug 2023 23:18:15 +0000 (16:18 -0700)] 
Merge branch 'ew/hash-with-openssl-evp'

Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
its traditional API, by using its EVP API instead.

* ew/hash-with-openssl-evp:
  avoid SHA-1 functions deprecated in OpenSSL 3+
  sha256: avoid functions deprecated in OpenSSL 3+

10 months agogit maintenance: avoid console window in scheduled tasks on Windows
Johannes Schindelin [Wed, 9 Aug 2023 16:54:47 +0000 (16:54 +0000)] 
git maintenance: avoid console window in scheduled tasks on Windows

We just introduced a helper to avoid showing a console window when the
scheduled task runs `git.exe`. Let's actually use it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agowin32: add a helper to run `git.exe` without a foreground window
Johannes Schindelin [Wed, 9 Aug 2023 16:54:46 +0000 (16:54 +0000)] 
win32: add a helper to run `git.exe` without a foreground window

On Windows, there are two kinds of executables, console ones and
non-console ones. Git's executables are all console ones.

When launching the former e.g. in a scheduled task, a CMD window pops
up. This is not what we want for the tasks installed via the `git
maintenance` command.

To work around this, let's introduce `headless-git.exe`, which is a
non-console program that does _not_ pop up any window. All it does is to
re-launch `git.exe`, suppressing that console window, passing through
all command-line arguments as-are.

Helped-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Helped-by: Yuyi Wang <Strawberry_Str@hotmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agot9001: remove excessive GIT_SEND_EMAIL_NOTTY=1
Oswald Buddenhagen [Wed, 9 Aug 2023 17:15:31 +0000 (19:15 +0200)] 
t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1

This was added by 3ece9bf0f9 (send-email: clear the $message_id after
validation, 2023-05-17) for no apparent reason, as this is required only
in cases when git's stdin is (must be) redirected, which isn't the case
here.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agomv: handle lstat() failure correctly
Sebastian Thiel [Wed, 9 Aug 2023 07:47:41 +0000 (07:47 +0000)] 
mv: handle lstat() failure correctly

When moving a directory onto another with `git mv` various checks are
performed. One of of these validates that the destination is not existing.

When calling `lstat` on the destination path and it fails as the path
doesn't exist, some environments seem to overwrite the passed  in
`stat` memory nonetheless (I observed this issue on debian 12 of x86_64,
running on OrbStack on ARM, emulated with Rosetta).

This would affect the code that followed as it would still acccess a now
modified `st` structure, which now seems to contain uninitialized memory.
`S_ISDIR(st_dir_mode)` would then typically return false causing the code
to run into a bad case.

The fix avoids overwriting the existing `st` structure, providing an
alternative that exists only for that purpose.

Note that this patch minimizes complexity instead of stack-frame size.

Signed-off-by: Sebastian Thiel <sebastian.thiel@icloud.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoparse-options: disallow negating OPTION_SET_INT 0
René Scharfe [Tue, 8 Aug 2023 20:05:57 +0000 (22:05 +0200)] 
parse-options: disallow negating OPTION_SET_INT 0

An option of type OPTION_SET_INT can be defined to set its variable to
zero.  It's negated variant will do the same, though, which is
confusing.  Several such options were fixed by disabling negation,
changing the value to set or using a different option type:

991c552916 (ls-tree: fix --no-full-name, 2023-07-18)
e12cb98e1e (branch: reject "--no-all" and "--no-remotes" early, 2023-07-18)
68cbb20e73 (show-branch: reject --[no-](topo|date)-order, 2023-07-19)
3821eb6c3d (reset: reject --no-(mixed|soft|hard|merge|keep) option, 2023-07-19)
36f76d2a25 (pack-objects: fix --no-quiet, 2023-07-21)
3a5f308741 (pack-objects: fix --no-keep-true-parents, 2023-07-21)
c95ae3ff9c (describe: fix --no-exact-match, 2023-07-21)
d089a06421 (bundle: use OPT_PASSTHRU_ARGV, 2023-07-29)

Check for such options that allow negation in parse_options_check() and
report them to find future cases quicker.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agorepack: free geometry struct
Jeff King [Tue, 8 Aug 2023 18:50:23 +0000 (14:50 -0400)] 
repack: free geometry struct

When the program is ending, we call clear_pack_geometry() to free any
resources in the pack_geometry struct. But the struct itself is
allocated on the heap, and leak-checkers will complain about the
resulting small leak.

This one was marked by Coverity as a "new" leak, though it has existed
since 0fabafd0b9 (builtin/repack.c: add '--geometric' option,
2021-02-22). This might be because recent unrelated changes in the file
confused it about what is new and what is not. But regardless, it is
worth addressing.

We can fix it easily by free-ing the struct. We'll convert our "clear"
function to "free", since the allocation happens in the matching init()
function (though since there is only one call to each, and the struct is
local to this file, it's mostly academic).

Another option would be to put the struct on the stack rather than the
heap. However, this gets tricky, as we check the pointer against NULL in
several places to decide whether we're in geometric mode.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosend-email: avoid creating more than one Term::ReadLine object
Jeff King [Tue, 8 Aug 2023 18:15:31 +0000 (14:15 -0400)] 
send-email: avoid creating more than one Term::ReadLine object

Every time git-send-email calls its ask() function to prompt the user,
we call term(), which instantiates a new Term::ReadLine object. But in
v1.46 of Term::ReadLine::Gnu (which provides the Term::ReadLine
interface on some platforms), its constructor refuses to create a second
instance[1]. So on systems with that version of the module, most
git-send-email instances will fail (as we usually prompt for both "to"
and "in-reply-to" unless the user provided them on the command line).

We can fix this by keeping a single instance variable and returning it
for each call to term(). In perl 5.10 and up, we could do that with a
"state" variable. But since we only require 5.008, we'll do it the
old-fashioned way, with a lexical "my" in its own scope.

Note that the tests in t9001 detect this problem as-is, since the
failure mode is for the program to die. But let's also beef up the
"Prompting works" test to check that it correctly handles multiple
inputs (if we had chosen to keep our FakeTerm hack in the previous
commit, then the failure mode would be incorrectly ignoring prompts
after the first).

[1] For discussion of why multiple instances are forbidden, see:
    https://github.com/hirooih/perl-trg/issues/16

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosend-email: drop FakeTerm hack
Jeff King [Tue, 8 Aug 2023 18:14:36 +0000 (14:14 -0400)] 
send-email: drop FakeTerm hack

Back in 280242d1cc (send-email: do not barf when Term::ReadLine does not
like your terminal, 2006-07-02), we added a fallback for when
Term::ReadLine's constructor failed: we'd have a FakeTerm object
instead, which would then die if anybody actually tried to call
readline() on it. Since we instantiated the $term variable at program
startup, we needed this workaround to let the program run in modes when
we did not prompt the user.

But later, in f4dc9432fd (send-email: lazily load modules for a big
speedup, 2021-05-28), we started loading Term::ReadLine lazily only when
ask() is called. So at that point we know we're trying to prompt the
user, and we can just die if ReadLine instantiation fails, rather than
making this fake object to lazily delay showing the error.

This should be OK even if there is no tty (e.g., we're in a cron job),
because Term::ReadLine will return a stub object in that case whose "IN"
and "OUT" functions return undef. And since 5906f54e47 (send-email:
don't attempt to prompt if tty is closed, 2009-03-31), we check for that
case and skip prompting.

And we can be sure that FakeTerm was not kicking in for such a
situation, because it has actually been broken since that commit! It
does not define "IN" or "OUT" methods, so perl would barf with an error.
If FakeTerm was in use, we were neither honoring what 5906f54e47 tried
to do, nor producing the readable message that 280242d1cc intended.

So we're better off just dropping FakeTerm entirely, and letting the
error reported by constructing Term::ReadLine through.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agot0040: declare non-tab indentation to be okay in this script
Johannes Schindelin [Tue, 8 Aug 2023 10:37:34 +0000 (10:37 +0000)] 
t0040: declare non-tab indentation to be okay in this script

By necessity, this script needs to verify that certain Git output
matches expectations, including text indented with spaces instead of
tabs.

Most recently, such a check was introduced in 448abbba6347 (short help:
allow multi-line opthelp, 2023-07-18) which is reported by `git diff
--check 448abbba6347^!` as having whitespace issues.

Let's not complain about this because it is intentional.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoadvice: handle "rebase" in error_resolve_conflict()
Oswald Buddenhagen [Mon, 7 Aug 2023 17:09:35 +0000 (19:09 +0200)] 
advice: handle "rebase" in error_resolve_conflict()

This makes sure that we get a properly translated message rather than
inserting the command (which we failed to translate) into a generic
fallback message.

The function is called indirectly via die_resolve_conflict() with fixed
strings, and directly with the string obtained via action_name(), which
in turn returns a string from a fixed set. Hence we know that the now
covered set of strings is exhausitive, and will therefore BUG() out when
encountering an unexpected string. We also know that all covered strings
are actually used.

Arguably, the above suggests that it would be cleaner to pass the
command as an enum in the first place, but that's left for another time.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoA few more topics before -rc1
Junio C Hamano [Mon, 7 Aug 2023 17:18:48 +0000 (10:18 -0700)] 
A few more topics before -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agomailmap: change primary address for Glen Choo
Glen Choo [Mon, 7 Aug 2023 18:41:50 +0000 (18:41 +0000)] 
mailmap: change primary address for Glen Choo

Glen will lose access to his work email soon.

Signed-off-by: Glen Choo <chooglen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoMerge branch 'ew/sha256-gcrypt-leak-fixes'
Junio C Hamano [Mon, 7 Aug 2023 18:57:18 +0000 (11:57 -0700)] 
Merge branch 'ew/sha256-gcrypt-leak-fixes'

Leakfixes.

* ew/sha256-gcrypt-leak-fixes:
  sha256/gcrypt: die on gcry_md_open failures
  sha256/gcrypt: fix memory leak with SHA-256 repos
  sha256/gcrypt: fix build with SANITIZE=leak

10 months agoMerge branch 'rs/bundle-parseopt-cleanup'
Junio C Hamano [Mon, 7 Aug 2023 18:57:18 +0000 (11:57 -0700)] 
Merge branch 'rs/bundle-parseopt-cleanup'

Code clean-up.

* rs/bundle-parseopt-cleanup:
  bundle: use OPT_PASSTHRU_ARGV

10 months agoMerge branch 'am/doc-sha256'
Junio C Hamano [Mon, 7 Aug 2023 18:57:18 +0000 (11:57 -0700)] 
Merge branch 'am/doc-sha256'

Tone down the warning on SHA-256 repositories being an experimental
curiosity.  We do not have support for them to interoperate with
traditional SHA-1 repositories, but at this point, we do not plan
to make breaking changes to SHA-256 repositories and there is no
longer need for such a strongly phrased warning.

* am/doc-sha256:
  doc: sha256 is no longer experimental

10 months agoMerge branch 'tb/commit-graph-tests'
Junio C Hamano [Mon, 7 Aug 2023 18:57:18 +0000 (11:57 -0700)] 
Merge branch 'tb/commit-graph-tests'

Test updates.

* tb/commit-graph-tests:
  t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
  t5328: avoid top-level directory changes
  t5318: avoid top-level directory changes
  t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
  t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories

10 months agol10n: po-id for 2.42 (round 1)
Bagas Sanjaya [Sun, 6 Aug 2023 11:19:52 +0000 (18:19 +0700)] 
l10n: po-id for 2.42 (round 1)

Update following components:

* commit-graph.c
* diff-no-index.c
* builtin/notes.c
* builtin/pack-refs.c
* builtin/worktree.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
10 months agoMerge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru
Jiang Xin [Sat, 5 Aug 2023 15:26:39 +0000 (23:26 +0800)] 
Merge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru

* 'russian-l10n' of https://github.com/DJm00n/git-po-ru:
  l10n: ru.po: update Russian translation

10 months agogitignore: ignore clangd .cache directory
brian m. carlson [Fri, 4 Aug 2023 17:13:28 +0000 (17:13 +0000)] 
gitignore: ignore clangd .cache directory

In at least some versions of clangd, including version 15 in Ubuntu
23.04, a directory, .cache, is written in the root of the repository
with index information about the files in the repository.  Since clangd
is the most common language server protocol (LSP) implementation for C,
and we already support it using the GENERATE_COMPILATION_DATABASE flags
to make it functional, it's likely many users are using or will want to
use it.

As a result, ignore the ".cache" directory to help avoid users
accidentally committing the data.

Signed-off-by: brian m. carlson <bk2204@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoGit 2.42-rc0 v2.42.0-rc0
Junio C Hamano [Fri, 4 Aug 2023 17:01:45 +0000 (10:01 -0700)] 
Git 2.42-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoMerge branch 'jc/branch-in-use-error-message'
Junio C Hamano [Fri, 4 Aug 2023 17:52:31 +0000 (10:52 -0700)] 
Merge branch 'jc/branch-in-use-error-message'

"git branch -f X" to repoint the branch X said that X was "checked
out" in another worktree, even when branch X was not and instead
being bisected or rebased.  The message was reworded to say the
branch was "in use".

* jc/branch-in-use-error-message:
  branch: update the message to refuse touching a branch in-use

10 months agoMerge branch 'hy/blame-in-bare-with-contents'
Junio C Hamano [Fri, 4 Aug 2023 17:52:31 +0000 (10:52 -0700)] 
Merge branch 'hy/blame-in-bare-with-contents'

"git blame --contents=file" has been taught to work in a bare
repository.

* hy/blame-in-bare-with-contents:
  blame: allow --contents to work with bare repo

10 months agoMerge branch 'jc/parse-options-short-help'
Junio C Hamano [Fri, 4 Aug 2023 17:52:31 +0000 (10:52 -0700)] 
Merge branch 'jc/parse-options-short-help'

Command line parser fix, and a small parse-options API update.

* jc/parse-options-short-help:
  short help: allow a gap smaller than USAGE_GAP
  remote: simplify "remote add --tags" help text
  short help: allow multi-line opthelp

10 months agoMerge branch 'jc/doc-sent-patch-now-what'
Junio C Hamano [Fri, 4 Aug 2023 17:52:30 +0000 (10:52 -0700)] 
Merge branch 'jc/doc-sent-patch-now-what'

Process document update.

* jc/doc-sent-patch-now-what:
  MyFirstContribution: refrain from self-iterating too much

10 months agoMerge branch 'la/doc-choose-starting-point-fixup'
Junio C Hamano [Fri, 4 Aug 2023 17:52:30 +0000 (10:52 -0700)] 
Merge branch 'la/doc-choose-starting-point-fixup'

Clarify how to pick a starting point for a new topic in the
SubmittingPatches document.

* la/doc-choose-starting-point-fixup:
  SubmittingPatches: use of older maintenance tracks is an exception
  SubmittingPatches: explain why 'next' and above are inappropriate base
  SubmittingPatches: choice of base for fixing an older maintenance track

10 months agoMerge branch 'pv/doc-submodule-update-settings'
Junio C Hamano [Fri, 4 Aug 2023 17:52:30 +0000 (10:52 -0700)] 
Merge branch 'pv/doc-submodule-update-settings'

Rewrite the description of giving a custom command to the
submodule.<name>.update configuration variable.

* pv/doc-submodule-update-settings:
  doc: highlight that .gitmodules does not support !command

10 months agoMerge branch 'ja/worktree-orphan-fix'
Junio C Hamano [Fri, 4 Aug 2023 17:52:30 +0000 (10:52 -0700)] 
Merge branch 'ja/worktree-orphan-fix'

Fix tests with unportable regex patterns.

* ja/worktree-orphan-fix:
  t2400: rewrite regex to avoid unintentional PCRE
  builtin/worktree.c: convert tab in advice to space
  t2400: drop no-op `--sq` from rev-parse call

10 months agoMerge branch 'jc/retire-get-sha1-hex'
Junio C Hamano [Fri, 4 Aug 2023 17:52:30 +0000 (10:52 -0700)] 
Merge branch 'jc/retire-get-sha1-hex'

The implementation of "get_sha1_hex()" that reads a hexadecimal
string that spells a full object name has been extended to cope
with any hash function used in the repository, but the "sha1" in
its name survived.  Rename it to get_hash_hex(), a name that is
more consistent within its friends like get_hash_hex_algop().

* jc/retire-get-sha1-hex:
  hex: retire get_sha1_hex()

10 months agoMerge branch 'la/doc-choose-starting-point'
Junio C Hamano [Fri, 4 Aug 2023 17:52:29 +0000 (10:52 -0700)] 
Merge branch 'la/doc-choose-starting-point'

Clarify how to choose the starting point for a new topic in
developer guidance document.

* la/doc-choose-starting-point:
  SubmittingPatches: simplify guidance for choosing a starting point
  SubmittingPatches: emphasize need to communicate non-default starting points
  SubmittingPatches: de-emphasize branches as starting points
  SubmittingPatches: discuss subsystems separately from git.git
  SubmittingPatches: reword awkward phrasing

10 months agodocs: update when `git bisect visualize` uses `gitk`
Matthias Aßhauer [Fri, 4 Aug 2023 04:08:44 +0000 (04:08 +0000)] 
docs: update when `git bisect visualize` uses `gitk`

This check has involved more environment variables than just `DISPLAY` since
508e84a790 (bisect view: check for MinGW32 and MacOSX in addition to X11,
2008-02-14), so let's update the documentation accordingly.

Signed-off-by: Matthias Aßhauer <mha1993@live.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agocompat/mingw: implement a native locate_in_PATH()
Matthias Aßhauer [Fri, 4 Aug 2023 04:08:43 +0000 (04:08 +0000)] 
compat/mingw: implement a native locate_in_PATH()

since 5e1f28d (bisect--helper: reimplement `bisect_visualize()` shell
 function in C, 2021-09-13) `git bisect visualize` uses exists_in_PATH()
to check wether it should call `gitk`, but exists_in_PATH() relies on
locate_in_PATH() which currently only understands POSIX-ish PATH variables
(a list of paths, separated by colons) on native Windows executables
we encounter Windows PATH variables (a list of paths that often contain
drive letters (and thus colons), separated by semicolons). Luckily we do
already have a function that can lookup executables on windows PATHs:
path_lookup(). Implement a small replacement for the existing
locate_in_PATH() based on path_lookup().

Reported-by: Louis Strous <Louis.Strous@intellimagic.com>
Signed-off-by: Matthias Aßhauer <mha1993@live.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agorun-command: conditionally define locate_in_PATH()
Matthias Aßhauer [Fri, 4 Aug 2023 04:08:42 +0000 (04:08 +0000)] 
run-command: conditionally define locate_in_PATH()

This commit doesn't change any behaviour by itself, but allows us to easily
define compat replacements for locate_in_PATH(). It prepares us for the next
commit that adds a native Windows implementation of locate_in_PATH().

Signed-off-by: Matthias Aßhauer <mha1993@live.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agorebase --skip: fix commit message clean up when skipping squash
Phillip Wood [Thu, 3 Aug 2023 13:09:35 +0000 (13:09 +0000)] 
rebase --skip: fix commit message clean up when skipping squash

During a series of "fixup" and/or "squash" commands, the interactive
rebase accumulates a commit message from all the commits that are being
squashed together. If one of the commits has conflicts when it is picked
and the user chooses to skip that commit then we need to remove that
commit's message from accumulated messages.  To do this 15ef69314d5
(rebase --skip: clean up commit message after a failed fixup/squash,
2018-04-27) updated commit_staged_changes() to reset the accumulated
message to the commit message of HEAD (which does not contain the
message from the skipped commit) when the last command was "fixup" or
"squash" and there are no staged changes. Unfortunately the code to do
this contains two bugs.

(1) If parse_head() fails we pass an invalid pointer to
    unuse_commit_buffer().

(2) The reconstructed message uses the entire commit buffer from HEAD
    including the headers, rather than just the commit message.

The first issue is fixed by splitting up the "if" condition into several
statements each with its own error handling. The second issue is fixed
by finding the start of the commit message within the commit buffer
using find_commit_subject().

The existing test added by 15ef69314d5 is modified to show the effect of
this bug.  The bug is triggered when skipping the first command in the
chain (as the test does before this commit) but the effect is hidden
because opts->current_fixup_count is set to zero which leads
update_squash_messages() to recreate the squash message file from
scratch overwriting the bad message created by
commit_staged_changes(). The test is also updated to explicitly check
the commit messages rather than relying on grep to ensure they do not
contain any stray commit headers.

To check the commit message the function test_commit_message() is moved
from t3437-rebase-fixup-options.sh to test-lib.sh. As the function is
now publicly available it is updated to provide better error detection
and avoid overwriting the commonly used files "actual" and "expect".
Support for reading the expected commit message from stdin is also
added.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoident: don't consider '.' a crud
brian m. carlson [Wed, 2 Aug 2023 16:49:32 +0000 (09:49 -0700)] 
ident: don't consider '.' a crud

When we process a user's name (as in user.name), we strip all
leading and trailing crud from it.  Right now, we consider a dot
a crud character, and strip it off.

However, this is unsuitable for many personal names because humans
frequently have abbreviated suffixes, such as "Jr." or "Sr." at the end
of their names, and this corrupts them.  Some other users may wish to
use an abbreviated name or initial, which will pose a problem especially
in cultures that write the family name first, followed by the personal
name.

Since the current approach causes lots of practical problems, let's
avoid it by no longer considering a dot to be crud.

Note that "." in the name forces the entire name to be quoted to
please mailers, but stripping "." only at the beginning and the end
does not help a name with "." in the middle (like "brian m. carlson")
so this change will not make it much worse.  A name like "Given
Family, Jr." that did not have to be quoted now would need to be, in
order to be placed on the e-mail headers, though.

This is based on a weather-balloon patch by Jeff King sent in Aug 2021
https://lore.kernel.org/git/YSKm8Q8nyTavQaox@coredump.intra.peff.net/

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoThe eighteenth batch
Junio C Hamano [Wed, 2 Aug 2023 15:44:02 +0000 (08:44 -0700)] 
The eighteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoDocumentation/RelNotes/2.42.0.txt: typofix
Taylor Blau [Tue, 1 Aug 2023 18:20:18 +0000 (14:20 -0400)] 
Documentation/RelNotes/2.42.0.txt: typofix

Fix a typo introduced in aa9166bcc0 (The ninth batch, 2023-07-08).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoMerge branch 'ks/ref-filter-describe'
Junio C Hamano [Wed, 2 Aug 2023 16:37:24 +0000 (09:37 -0700)] 
Merge branch 'ks/ref-filter-describe'

"git branch --list --format=<format>" and friends are taught
a new "%(describe)" placeholder.

* ks/ref-filter-describe:
  ref-filter: add new "describe" atom
  ref-filter: add multiple-option parsing functions

10 months agoMerge branch 'ah/sequencer-rewrite-todo-fix'
Junio C Hamano [Wed, 2 Aug 2023 16:37:23 +0000 (09:37 -0700)] 
Merge branch 'ah/sequencer-rewrite-todo-fix'

When the user edits "rebase -i" todo file so that it starts with a
"fixup", which would make it invalid, the command truncated the
rest of the file before giving an error and returning the control
back to the user.  Stop truncating to make it easier to correct
such a malformed todo file.

* ah/sequencer-rewrite-todo-fix:
  sequencer: finish parsing the todo list despite an invalid first line

10 months agoMerge branch 'bb/use-trace2-counters-for-fsync-stats'
Junio C Hamano [Wed, 2 Aug 2023 16:37:23 +0000 (09:37 -0700)] 
Merge branch 'bb/use-trace2-counters-for-fsync-stats'

Instead of inventing a custom counter variables for debugging,
use existing trace2 facility in the fsync customization codepath.

* bb/use-trace2-counters-for-fsync-stats:
  wrapper: use trace2 counters to collect fsync stats

10 months agoMerge branch 'ah/autoconf-fixes'
Junio C Hamano [Wed, 2 Aug 2023 16:37:23 +0000 (09:37 -0700)] 
Merge branch 'ah/autoconf-fixes'

"./configure --with-expat=no" did not work as a way to refuse use
of the expat library on a system with the library installed, which
has been corrected.

* ah/autoconf-fixes:
  configure.ac: always save NO_ICONV to config.status
  configure.ac: don't overwrite NO_CURL option
  configure.ac: don't overwrite NO_EXPAT option

10 months agoMerge branch 'jc/tree-walk-drop-base-offset'
Junio C Hamano [Wed, 2 Aug 2023 16:37:23 +0000 (09:37 -0700)] 
Merge branch 'jc/tree-walk-drop-base-offset'

Code simplification.

* jc/tree-walk-drop-base-offset:
  tree-walk: drop unused base_offset from do_match()
  tree-walk: lose base_offset that is never used in tree_entry_interesting

10 months agoavoid SHA-1 functions deprecated in OpenSSL 3+
Eric Wong [Tue, 1 Aug 2023 02:54:54 +0000 (02:54 +0000)] 
avoid SHA-1 functions deprecated in OpenSSL 3+

OpenSSL 3+ deprecates the SHA1_Init, SHA1_Update, and SHA1_Final
functions, leading to errors when building with `DEVELOPER=1'.

Use the newer EVP_* API with OpenSSL 3+ (only) despite being more
error-prone and less efficient due to heap allocations.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosha256: avoid functions deprecated in OpenSSL 3+
Eric Wong [Tue, 1 Aug 2023 02:54:53 +0000 (02:54 +0000)] 
sha256: avoid functions deprecated in OpenSSL 3+

OpenSSL 3+ deprecates the SHA256_Init, SHA256_Update, and SHA256_Final
functions, leading to errors when building with `DEVELOPER=1'.

Use the newer EVP_* API with OpenSSL 3+ despite being more
error-prone and less efficient due to heap allocations.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agodoc: sha256 is no longer experimental
Adam Majer [Mon, 31 Jul 2023 13:42:02 +0000 (15:42 +0200)] 
doc: sha256 is no longer experimental

Remove scary wording that basically stops people using sha256
repositories not because of interoperability issues with sha1
repositories, but from fear that their work will suddenly become
incompatible in some future version of git.

We should be clear that currently sha256 repositories will not work with
sha1 repositories but stop the scary words.

Signed-off-by: Adam Majer <adamm@zombino.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosha256/gcrypt: die on gcry_md_open failures
Eric Wong [Mon, 31 Jul 2023 12:08:08 +0000 (12:08 +0000)] 
sha256/gcrypt: die on gcry_md_open failures

`gcry_md_open' allocates memory and must (like all allocation
functions) be checked for failure.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosha256/gcrypt: fix memory leak with SHA-256 repos
Eric Wong [Mon, 31 Jul 2023 12:08:07 +0000 (12:08 +0000)] 
sha256/gcrypt: fix memory leak with SHA-256 repos

`gcry_md_open' needs to be paired with `gcry_md_close' to ensure
resources are released.  Since our internal APIs don't have
separate close/release callbacks, sticking it into the finalization
callback seems appropriate.

Building with SANITIZE=leak and running `git fsck' on a SHA-256
repository no longer reports leaks.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agosha256/gcrypt: fix build with SANITIZE=leak
Eric Wong [Mon, 31 Jul 2023 12:08:06 +0000 (12:08 +0000)] 
sha256/gcrypt: fix build with SANITIZE=leak

Non-static functions cause `undefined reference' errors when
building with `SANITIZE=leak' due to the lack of prototypes.
Mark all these functions as `static inline' as we do in
sha256/nettle.h to avoid the need to maintain prototypes.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agobundle: use OPT_PASSTHRU_ARGV
René Scharfe [Sat, 29 Jul 2023 20:40:27 +0000 (22:40 +0200)] 
bundle: use OPT_PASSTHRU_ARGV

"git bundle" passes the progress control options to "git pack-objects"
by parsing and then recreating them explicitly.  Simplify that process
by using OPT_PASSTHRU_ARGV instead.

This also fixes --no-quiet, which has been doing the same as --quiet
since its introduction by 79862b6b77 (bundle-create: progress output
control, 2019-11-10) because it had been defined using OPT_SET_INT with
a value of 0, which sets 0 when negated as well.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoThe seventeenth batch
Junio C Hamano [Fri, 28 Jul 2023 16:17:53 +0000 (09:17 -0700)] 
The seventeenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 months agoMerge branch 'rs/pack-objects-parseopt-fix'
Junio C Hamano [Fri, 28 Jul 2023 16:45:22 +0000 (09:45 -0700)] 
Merge branch 'rs/pack-objects-parseopt-fix'

Command line parser fix.

* rs/pack-objects-parseopt-fix:
  pack-objects: fix --no-quiet
  pack-objects: fix --no-keep-true-parents

10 months agoMerge branch 'rs/describe-parseopt-fix'
Junio C Hamano [Fri, 28 Jul 2023 16:45:21 +0000 (09:45 -0700)] 
Merge branch 'rs/describe-parseopt-fix'

Command line parser fix.

* rs/describe-parseopt-fix:
  describe: fix --no-exact-match