]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
2 years 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>
2 years 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

2 years 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()

2 years 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

2 years 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

2 years 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+

2 years 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>
2 years 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>
2 years 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

2 years 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

2 years 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

2 years 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

2 years 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>
2 years 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>
2 years 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

2 years 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

2 years 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

2 years 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

2 years 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

2 years 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

2 years 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

2 years 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()

2 years 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

2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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

2 years 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

2 years 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

2 years 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

2 years 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

2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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>
2 years 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

2 years 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

2 years agoMerge branch 'bb/trace2-comment-fix'
Junio C Hamano [Fri, 28 Jul 2023 16:45:21 +0000 (09:45 -0700)] 
Merge branch 'bb/trace2-comment-fix'

In-code comment fix.

* bb/trace2-comment-fix:
  trace2: fix a comment

2 years agoMyFirstContribution: refrain from self-iterating too much
Junio C Hamano [Fri, 28 Jul 2023 00:43:17 +0000 (17:43 -0700)] 
MyFirstContribution: refrain from self-iterating too much

Finding mistakes in and improving your own patches is a good idea,
but doing so too quickly is being inconsiderate to reviewers who
have just seen the initial iteration and taking their time to review
it.  Encourage new developers to perform such a self review before
they send out their patches, not after.  After sending a patch that
they immediately found mistakes in, they are welcome to comment on
them, mentioning what and how they plan to improve them in an
updated version, before sending out their updates.

Helped-by: Torsten Bögershausen <tboegi@web.de>
Helped-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe sixteenth batch
Junio C Hamano [Thu, 27 Jul 2023 22:02:38 +0000 (15:02 -0700)] 
The sixteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'jc/parse-options-reset'
Junio C Hamano [Thu, 27 Jul 2023 22:26:37 +0000 (15:26 -0700)] 
Merge branch 'jc/parse-options-reset'

Command line parser fix.

* jc/parse-options-reset:
  reset: reject --no-(mixed|soft|hard|merge|keep) option

2 years agoMerge branch 'jc/parse-options-show-branch'
Junio C Hamano [Thu, 27 Jul 2023 22:26:37 +0000 (15:26 -0700)] 
Merge branch 'jc/parse-options-show-branch'

Command line parser fixes.

* jc/parse-options-show-branch:
  show-branch: reject --[no-](topo|date)-order
  show-branch: --no-sparse should give dense output

2 years agoMerge branch 'jc/transport-parseopt-fix'
Junio C Hamano [Thu, 27 Jul 2023 22:26:37 +0000 (15:26 -0700)] 
Merge branch 'jc/transport-parseopt-fix'

Command line parser fixes.

* jc/transport-parseopt-fix:
  fetch: reject --no-ipv[46]
  parse-options: introduce OPT_IPVERSION()

2 years agoMerge branch 'jc/gitignore-doc-pattern-markup'
Junio C Hamano [Thu, 27 Jul 2023 22:26:36 +0000 (15:26 -0700)] 
Merge branch 'jc/gitignore-doc-pattern-markup'

Doc mark-up update.

* jc/gitignore-doc-pattern-markup:
  gitignore.txt: mark up explanation of patterns consistently

2 years agoSubmittingPatches: use of older maintenance tracks is an exception
Junio C Hamano [Wed, 26 Jul 2023 05:21:12 +0000 (22:21 -0700)] 
SubmittingPatches: use of older maintenance tracks is an exception

While we could technically fix each and every bug on top of the
commit that introduced it, it is not necessarily practical.  For
trivial and low-value bugfixes, it often is simpler and sufficient
to just fix it in the current maintenance track, leaving the bug
unfixed in the older maintenance tracks.

Demote the "use older maintenance track to fix old bugs" as a side
note, and explain that the choice is used only in exceptional cases.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoSubmittingPatches: explain why 'next' and above are inappropriate base
Junio C Hamano [Wed, 26 Jul 2023 05:17:31 +0000 (22:17 -0700)] 
SubmittingPatches: explain why 'next' and above are inappropriate base

The 'next' branch is primarily meant to be a testing ground to make
sure that topics that are reasonably well done work well together.
Building a new work on it would mean everything that was already in
'next' must have graduated to 'master' before the new work can also
be merged to 'master', and that is why we do not encourage basing
new work on 'next'.

Helped-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot2400: rewrite regex to avoid unintentional PCRE
Jacob Abel [Wed, 26 Jul 2023 21:42:34 +0000 (21:42 +0000)] 
t2400: rewrite regex to avoid unintentional PCRE

Replace all cases of `\s` with ` ` as it is not part of POSIX BRE or ERE
and therefore not all versions of grep handle it.

For the same reason all cases of `\S` are replaced with `[^ ]`. It is
not an exact replacement but it is close enough for this use case.

Also, do not write `\+` in BRE and expect it to mean 1 or more;
it is a GNU extension that may not work everywhere.

Remove `.*` from the end of a pattern that is not right-anchored.

Signed-off-by: Jacob Abel <jacobabel@nullpo.dev>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agobuiltin/worktree.c: convert tab in advice to space
Jacob Abel [Wed, 26 Jul 2023 21:42:24 +0000 (21:42 +0000)] 
builtin/worktree.c: convert tab in advice to space

Signed-off-by: Jacob Abel <jacobabel@nullpo.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot2400: drop no-op `--sq` from rev-parse call
Jacob Abel [Wed, 26 Jul 2023 21:42:18 +0000 (21:42 +0000)] 
t2400: drop no-op `--sq` from rev-parse call

Signed-off-by: Jacob Abel <jacobabel@nullpo.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe fifteenth batch
Junio C Hamano [Wed, 26 Jul 2023 20:40:42 +0000 (13:40 -0700)] 
The fifteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'jc/branch-parseopt-fix'
Junio C Hamano [Wed, 26 Jul 2023 21:13:15 +0000 (14:13 -0700)] 
Merge branch 'jc/branch-parseopt-fix'

Command line parser fixes.

* jc/branch-parseopt-fix:
  branch: reject "--no-all" and "--no-remotes" early

2 years agoMerge branch 'jc/am-parseopt-fix'
Junio C Hamano [Wed, 26 Jul 2023 21:13:15 +0000 (14:13 -0700)] 
Merge branch 'jc/am-parseopt-fix'

Code simplification.

* jc/am-parseopt-fix:
  am: simplify parsing of "--[no-]keep-cr"

2 years agoMerge branch 'rs/ls-tree-no-full-name-fix'
Junio C Hamano [Wed, 26 Jul 2023 21:13:15 +0000 (14:13 -0700)] 
Merge branch 'rs/ls-tree-no-full-name-fix'

Command line parser fix.

* rs/ls-tree-no-full-name-fix:
  ls-tree: fix --no-full-name

2 years agoMerge branch 'jr/gitignore-doc-example-markup'
Junio C Hamano [Wed, 26 Jul 2023 21:13:15 +0000 (14:13 -0700)] 
Merge branch 'jr/gitignore-doc-example-markup'

Doc update.

* jr/gitignore-doc-example-markup:
  gitignore.txt: use backticks instead of double quotes

2 years agoSubmittingPatches: choice of base for fixing an older maintenance track
Junio C Hamano [Wed, 26 Jul 2023 05:16:49 +0000 (22:16 -0700)] 
SubmittingPatches: choice of base for fixing an older maintenance track

When working on an high-value bugfix that must be given to ancient
maintenance tracks, a starting point that is older than `maint` may
have to be chosen.

Helped-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agodoc: highlight that .gitmodules does not support !command
Petar Vutov [Tue, 25 Jul 2023 21:22:18 +0000 (23:22 +0200)] 
doc: highlight that .gitmodules does not support !command

Bugfix for fc01a5d2 (submodule update documentation: don't repeat
ourselves, 2016-12-27).

The `custom command` and `none` options are described as sharing the
same limitations, but one is allowed in .gitmodules and the other is
not.

Rewrite the description for custom commands to be more precise,
and make it easier for readers to notice that custom commands cannot
be used in the .gitmodules file.

Signed-off-by: Petar Vutov <pvutov@imap.cc>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe fourteenth batch
Junio C Hamano [Tue, 25 Jul 2023 19:05:40 +0000 (12:05 -0700)] 
The fourteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'jk/nested-points-at'
Junio C Hamano [Tue, 25 Jul 2023 19:05:24 +0000 (12:05 -0700)] 
Merge branch 'jk/nested-points-at'

"git tag --list --points-at X" showed tags that directly refers to
object X, but did not list a tag that points at such a tag, which
has been corrected.

* jk/nested-points-at:
  ref-filter: simplify return type of match_points_at
  ref-filter: avoid parsing non-tags in match_points_at()
  ref-filter: avoid parsing tagged objects in match_points_at()
  ref-filter: handle nested tags in --points-at option

2 years agoMerge branch 'rs/strbuf-addftime-simplify'
Junio C Hamano [Tue, 25 Jul 2023 19:05:24 +0000 (12:05 -0700)] 
Merge branch 'rs/strbuf-addftime-simplify'

Code clean-up.

* rs/strbuf-addftime-simplify:
  strbuf: use skip_prefix() in strbuf_addftime()

2 years agoMerge branch 'rs/ref-filter-signature-fix'
Junio C Hamano [Tue, 25 Jul 2023 19:05:24 +0000 (12:05 -0700)] 
Merge branch 'rs/ref-filter-signature-fix'

Test fix.

* rs/ref-filter-signature-fix:
  t6300: fix setup with GPGSSH but without GPG

2 years agoMerge branch 'jk/unused-parameter'
Junio C Hamano [Tue, 25 Jul 2023 19:05:24 +0000 (12:05 -0700)] 
Merge branch 'jk/unused-parameter'

Mark-up unused parameters in the code so that we can eventually
enable -Wunused-parameter by default.

* jk/unused-parameter:
  t/helper: mark unused callback void data parameters
  tag: mark unused parameters in each_tag_name_fn callbacks
  rev-parse: mark unused parameter in for_each_abbrev callback
  replace: mark unused parameter in each_mergetag_fn callback
  replace: mark unused parameter in ref callback
  merge-tree: mark unused parameter in traverse callback
  fsck: mark unused parameters in various fsck callbacks
  revisions: drop unused "opt" parameter in "tweak" callbacks
  count-objects: mark unused parameter in alternates callback
  am: mark unused keep_cr parameters
  http-push: mark unused parameter in xml callback
  http: mark unused parameters in curl callbacks
  do_for_each_ref_helper(): mark unused repository parameter
  test-ref-store: drop unimplemented reflog-expire command

2 years agoMerge branch 'dk/bundle-i18n-more'
Junio C Hamano [Tue, 25 Jul 2023 19:05:24 +0000 (12:05 -0700)] 
Merge branch 'dk/bundle-i18n-more'

Update message mark-up for i18n in "git bundle".

* dk/bundle-i18n-more:
  i18n: mark more bundle.c strings for translation

2 years agoMerge branch 'mh/mingw-case-sensitive-build'
Junio C Hamano [Tue, 25 Jul 2023 19:05:23 +0000 (12:05 -0700)] 
Merge branch 'mh/mingw-case-sensitive-build'

Names of MinGW header files are spelled in mixed case in some
source files, but the build host can be using case sensitive
filesystem with header files with their name spelled in all
lowercase.

* mh/mingw-case-sensitive-build:
  mingw: use lowercase includes for some Windows headers

2 years agoMerge branch 'dk/t4002-syntaxo-fix'
Junio C Hamano [Tue, 25 Jul 2023 19:05:23 +0000 (12:05 -0700)] 
Merge branch 'dk/t4002-syntaxo-fix'

Test fix.

* dk/t4002-syntaxo-fix:
  t4002: fix "diff can read from stdin" syntax

2 years agoMerge branch 'tb/object-access-overflow-protection'
Junio C Hamano [Tue, 25 Jul 2023 19:05:23 +0000 (12:05 -0700)] 
Merge branch 'tb/object-access-overflow-protection'

Various offset computation in the code that accesses the packfiles
and other data in the object layer has been hardened against
arithmetic overflow, especially on 32-bit systems.

* tb/object-access-overflow-protection:
  commit-graph.c: prevent overflow in `verify_commit_graph()`
  commit-graph.c: prevent overflow in `write_commit_graph()`
  commit-graph.c: prevent overflow in `merge_commit_graph()`
  commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
  commit-graph.c: prevent overflow in `load_tree_for_commit()`
  commit-graph.c: prevent overflow in `fill_commit_in_graph()`
  commit-graph.c: prevent overflow in `fill_commit_graph_info()`
  commit-graph.c: prevent overflow in `load_oid_from_graph()`
  commit-graph.c: prevent overflow in add_graph_to_chain()
  commit-graph.c: prevent overflow in `write_commit_graph_file()`
  pack-bitmap.c: ensure that eindex lookups don't overflow
  midx.c: prevent overflow in `fill_included_packs_batch()`
  midx.c: prevent overflow in `write_midx_internal()`
  midx.c: store `nr`, `alloc` variables as `size_t`'s
  midx.c: prevent overflow in `nth_midxed_offset()`
  midx.c: prevent overflow in `nth_midxed_object_oid()`
  midx.c: use `size_t`'s for fanout nr and alloc
  packfile.c: use checked arithmetic in `nth_packed_object_offset()`
  packfile.c: prevent overflow in `load_idx()`
  packfile.c: prevent overflow in `nth_packed_object_id()`

2 years agoMerge branch 'ah/advise-force-pushing'
Junio C Hamano [Tue, 25 Jul 2023 19:05:23 +0000 (12:05 -0700)] 
Merge branch 'ah/advise-force-pushing'

Help newbies by suggesting that there are cases where force-pushing
is a valid and sensible thing to update a branch at a remote
repository, rather than reconciling with merge/rebase.

* ah/advise-force-pushing:
  push: don't imply that integration is always required before pushing
  remote: don't imply that integration is always required before pushing
  wt-status: don't show divergence advice when committing

2 years agohex: retire get_sha1_hex()
Junio C Hamano [Mon, 24 Jul 2023 23:11:03 +0000 (16:11 -0700)] 
hex: retire get_sha1_hex()

The naming convention around get_sha1_hex() and its friends is
awkward these days, after "struct object_id" was introduced.

There are three public functions around this area:

 * get_sha1_hex()       - use the implied the_hash_algo, fill uchar *
 * get_oid_hex()        - use the implied the_hash_algo, fill oid *
 * get_oid_hex_algop()  - use the passed algop, fill oid *

Between the latter two, the "_algop" suffix signals whether the
the_hash_algo is used as the implied algorithm or the caller should
pass an algorithm explicitly.  That is very much understandable and
is a good convention.

Between the former two, however, the "SHA1" vs "OID" in the names
differentiate in what type of variable the result is stored.

We could argue that it makes sense to use "SHA1" to mean "flat byte
buffer" to honor the historical practice in the days before "struct
object_id" was invented, but the natural fourth friend of the above
group would take an algop and fill a flat byte buffer, and it would
be strange to name it get_sha1_hex_algop().  Do we use the passed in
algo, or are we limited to SHA-1 ;-)?

In fact, such a function exists, albeit as a private helper function
used by the implementation of these functions, and is named a lot
more sensibly: get_hash_hex_algop().

Correct the misnomer of get_sha1_hex() and use "hash", instead of
"sha1", as "flat byte buffer that stores binary (as opposed to
hexadecimal) representation of the hash".

The four (2x2) friends now become:

 * get_hash_hex()       - use the implied the_hash_algo, fill uchar *
 * get_oid_hex()        - use the implied the_hash_algo, fill oid *
 * get_hash_hex_algop() - use the passed algop, fill uchar *
 * get_oid_hex_algop()  - use the passed algop, fill oid *

As there are only two remaining calls to get_sha1_hex() in the
codebase right now, the blast radious of this change is fairly
small.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
Taylor Blau [Mon, 24 Jul 2023 16:39:34 +0000 (12:39 -0400)] 
t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`

In a previous commit, we introduced a sub-shell in the implementation of
`graph_git_behavior()`, in order to allow us to pass `-C "$DIR"`
directly to the git processes spawned by `graph_git_two_modes()`.

Now that its callers are always operating from the "$TRASH_DIRECTORY"
instead of one of its sub-directories, we can drop the inner sub-shell,
as it is no longer required.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot5328: avoid top-level directory changes
Taylor Blau [Mon, 24 Jul 2023 16:39:31 +0000 (12:39 -0400)] 
t5328: avoid top-level directory changes

In a similar spirit as the last commit, avoid top-level directory
changes in the last remaining commit-graph related test, t5328.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot5318: avoid top-level directory changes
Taylor Blau [Mon, 24 Jul 2023 16:39:28 +0000 (12:39 -0400)] 
t5318: avoid top-level directory changes

Avoid changing the current working directory from outside of a sub-shell
during the tests in t5318.

Each test has mostly straightforward changes, either:

  - Removing the top-level `cd "$TRASH_DIRECTORY/full"`, which is
    unnecessary after ensuring that other tests don't change their
    working directory outside of a sub-shell.

  - Changing any Git invocations which want to be in a sub-directory by
    either (a) adding a "-C $DIR" argument, or (b) moving the whole test
    into a sub-shell.

While we're here, remove any explicit "git config core.commitGraph true"
invocations which were designed to enable use of the commit-graph. These
are unnecessary following 31b1de6a09b (commit-graph: turn on
commit-graph by default, 2019-08-13).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
Taylor Blau [Mon, 24 Jul 2023 16:39:25 +0000 (12:39 -0400)] 
t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`

The `graph_git_behavior()` helper asserts that a number of common Git
operations (such as `git log --oneline`, `git log --topo-order`, etc.)
produce identical output regardless of whether or not a commit-graph is
in use.

This helper takes as its second argument the location (relative to the
`$TRASH_DIRECTORY`) of the Git repostiory under test. In order to run
each of its commands within that repository, it first changes into that
directory, without the use of a sub-shell.

This pollutes future tests which expect to be run in the top-level
`$TRASH_DIRECTORY` as usual. We could wrap `graph_git_behavior()` in a
sub-shell, like:

    graph_git_behavior() {
      # ...
      (
        cd "$TRASH_DIRECTORY/$DIR" &&
        graph_git_two_modesl
      )
    }

, but since we're invoking git directly, we can pass along a "-C $DIR"
when "$DIR" is non-empty.

Note, however, that until the remaining callers are cleaned up to avoid
changing working directories outside of a sub-shell, that we need to
ensure that we are operating in the top-level $TRASH_DIRECTORY. The
inner-subshell will go away in a future commit once it is no longer
necessary.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
Taylor Blau [Mon, 24 Jul 2023 16:39:22 +0000 (12:39 -0400)] 
t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories

The `graph_read_expect()` function is used to ensure that the output of
the "read-graph" test helper matches certain parameters (e.g., how many
commits are in the graph, which chunks were written, etc.).

It expects the Git repository being tested to be at the current working
directory. However, a handful of t5318 tests use different repositories
stored in sub-directories. To work around this, several tests in t5318
change into the relevant repository outside of a sub-shell, altering the
context for the rest of the suite.

Prepare to remove these globally-scoped directory changes by teaching
`graph_read_expect()` to take an optional "-C dir" to specify where the
repository containing the commit-graph being tested is.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoref-filter: add new "describe" atom
Kousik Sanagavarapu [Sun, 23 Jul 2023 16:19:59 +0000 (21:49 +0530)] 
ref-filter: add new "describe" atom

Duplicate the logic of %(describe) and friends from pretty to
ref-filter. In the future, this change helps in unifying both the
formats as ref-filter will be able to do everything that pretty is doing
and we can have a single interface.

The new atom "describe" and its friends are equivalent to the existing
pretty formats with the same name.

Helped-by: Junio C Hamano <gitster@pobox.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Kousik Sanagavarapu <five231003@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoref-filter: add multiple-option parsing functions
Kousik Sanagavarapu [Sun, 23 Jul 2023 16:19:58 +0000 (21:49 +0530)] 
ref-filter: add multiple-option parsing functions

The functions

match_placeholder_arg_value()
match_placeholder_bool_arg()

were added in pretty 4f732e0fd7 (pretty: allow %(trailers) options
with explicit value, 2019-01-29) to parse multiple options in an
argument to --pretty. For example,

git log --pretty="%(trailers:key=Signed-Off-By,separator=%x2C )"

will output all the trailers matching the key and seperates them by
a comma followed by a space per commit.

Add similar functions,

match_atom_arg_value()
match_atom_bool_arg()

in ref-filter.

There is no atom yet that can use these functions in ref-filter, but we
are going to add a new %(describe) atom in a subsequent commit where we
parse options like tags=<bool-value> or match=<pattern> given to it.

Helped-by: Junio C Hamano <gitster@pobox.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Kousik Sanagavarapu <five231003@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agosequencer: finish parsing the todo list despite an invalid first line
Alex Henrie [Sat, 22 Jul 2023 21:28:25 +0000 (15:28 -0600)] 
sequencer: finish parsing the todo list despite an invalid first line

Before the todo list is edited it is rewritten to shorten the OIDs of
the commits being picked and to append advice about editing the list.
The exact advice depends on whether the todo list is being edited for
the first time or not. After the todo list has been edited it is
rewritten to lengthen the OIDs of the commits being picked and to remove
the advice. If the edited list cannot be parsed then this last step is
skipped.

Prior to db81e50724 (rebase-interactive: use todo_list_write_to_file()
in edit_todo_list(), 2019-03-05) if the existing todo list could not be
parsed then the initial rewrite was skipped as well. This had the
unfortunate consequence that if the list could not be parsed after the
initial edit the advice given to the user was wrong when they re-edited
the list. This change relied on todo_list_parse_insn_buffer() returning
the whole todo list even when it cannot be parsed. Unfortunately if the
list starts with a "fixup" command then it will be truncated and the
remaining lines are lost. Fix this by continuing to parse after an
initial "fixup" commit as we do when we see any other invalid line.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
[jc: removed an apparently unneeded subshell around the test body]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agobranch: update the message to refuse touching a branch in-use
Junio C Hamano [Fri, 21 Jul 2023 21:53:12 +0000 (14:53 -0700)] 
branch: update the message to refuse touching a branch in-use

The "git branch -f" command can refuse to force-update a branch that
is used by another worktree.  The original rationale for this
behaviour was that updating a branch that is checked out in another
worktree, without making a matching change to the index and the
working tree files in that worktree, will lead to a very confused
user.  "git diff HEAD" will no longer give a useful patch, because
HEAD is a commit unrelated to what the index and the working tree in
the worktree were based on, for example.

These days, the same mechanism also protects branches that are being
rebased or bisected, and the same machanism is expected to be the
right place to add more checks, when we decide to protect branches
undergoing other kinds of operations.  We however forgot to rethink
the messaging, which originally said that we are refusing to touch
the branch because it is "checked out" elsewhere, when d2ba271a
(branch: check for bisects and rebases, 2022-06-14) started to
protect branches that are being rebased or bisected.

The spirit of the check has always been that we do not want to
disrupt the use of the same branch in other worktrees.  Let's reword
the message slightly to say that the branch is "used by" another
worktree, instead of "checked out".

We could teach the branch.c:prepare_checked_out_branches() function
to remember why it decided that a particular branch needs protecting
(i.e. was it because it was checked out?  being bisected?  something
else?) in addition to which worktree the branch was in use, and use
that in the error message to say "you cannot force update this
branch because it is being bisected in the worktree X", etc., but it
is dubious that such extra complexity is worth it.  The message
already tells which directory the worktree in question is, and it
should be just a "chdir" away for the user to find out what state it
is in, if the user felt curious enough.  So let's not go there yet.

Helped-by: Josh Sref <jsoref@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe thirteenth batch
Junio C Hamano [Fri, 21 Jul 2023 20:47:13 +0000 (13:47 -0700)] 
The thirteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'tb/refs-exclusion-and-packed-refs'
Junio C Hamano [Fri, 21 Jul 2023 20:47:26 +0000 (13:47 -0700)] 
Merge branch 'tb/refs-exclusion-and-packed-refs'

Enumerating refs in the packed-refs file, while excluding refs that
match certain patterns, has been optimized.

* tb/refs-exclusion-and-packed-refs:
  ls-refs.c: avoid enumerating hidden refs where possible
  upload-pack.c: avoid enumerating hidden refs where possible
  builtin/receive-pack.c: avoid enumerating hidden references
  refs.h: implement `hidden_refs_to_excludes()`
  refs.h: let `for_each_namespaced_ref()` take excluded patterns
  revision.h: store hidden refs in a `strvec`
  refs/packed-backend.c: add trace2 counters for jump list
  refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
  refs/packed-backend.c: refactor `find_reference_location()`
  refs: plumb `exclude_patterns` argument throughout
  builtin/for-each-ref.c: add `--exclude` option
  ref-filter.c: parameterize match functions over patterns
  ref-filter: add `ref_filter_clear()`
  ref-filter: clear reachable list pointers after freeing
  ref-filter.h: provide `REF_FILTER_INIT`
  refs.c: rename `ref_filter`

2 years agopack-objects: fix --no-quiet
René Scharfe [Fri, 21 Jul 2023 12:41:53 +0000 (14:41 +0200)] 
pack-objects: fix --no-quiet

Since 99fb6e04cb (pack-objects: convert to use parse_options(),
2012-02-01) git pack-objects has accepted the option --no-quiet, but it
does the same as --quiet.  That's because it's defined using OPT_SET_INT
with a value of 0, which sets 0 when negated, too.

Make --no-quiet equivalent to --progress and ignore it if --all-progress
was given.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopack-objects: fix --no-keep-true-parents
René Scharfe [Fri, 21 Jul 2023 12:41:56 +0000 (14:41 +0200)] 
pack-objects: fix --no-keep-true-parents

Since 99fb6e04cb (pack-objects: convert to use parse_options(),
2012-02-01) git pack-objects has accepted --no-keep-true-parents, but
this option does the same as --keep-true-parents.  That's because it's
defined using OPT_SET_INT with a value of 0, which sets 0 when negated
as well.

Turn --no-keep-true-parents into the opposite of --keep-true-parents by
using OPT_BOOL and storing the option's status directly in a variable
named "grafts_keep_true_parents" instead of in negative form in
"grafts_replace_parents".

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agodescribe: fix --no-exact-match
René Scharfe [Fri, 21 Jul 2023 13:41:33 +0000 (15:41 +0200)] 
describe: fix --no-exact-match

Since 2c33f75754 (Teach git-describe --exact-match to avoid expensive
tag searches, 2008-02-24) git describe accepts --no-exact-match, but it
does the same as --exact-match, an alias for --candidates=0.  That's
because it's defined using OPT_SET_INT with a value of 0, which sets 0
when negated as well.

Let --no-exact-match set the number of candidates to the default value
instead.  Users that need a more specific lack of exactitude can specify
their preferred value using --candidates, as before.

The "--no-exact-match" option was not covered in the tests, so let's
add a few.  Also add a case where --exact-match option is used on a
commit that cannot be described without distance from tags and make
sure the command fails.

Signed-off-by: René Scharfe <l.s.r@web.de>
[jc: added trivial tests]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoblame: allow --contents to work with bare repo
Han Young [Fri, 21 Jul 2023 03:57:58 +0000 (11:57 +0800)] 
blame: allow --contents to work with bare repo

The --contents option can be used with git blame to blame the file
as if it had the contents from the specified file. Since 1a3119ed
(blame: allow --contents to work with non-HEAD commit, 2023-03-24),
the --contents option can work with non-HEAD commit. However, if you
try to use --contents in a bare repository, you get the following
error:

    fatal: this operation must be run in a work tree

This is because before trying to generate a fake working tree
commit, we always call setup_work_tree(). But in a bare repo,
working tree is not available. The call to setup_work_tree is used
to prepare the reading of the blamed file in the working tree, which
isn't necessary if we are reading the contents from the specific
file instead of the file in the working tree.

Add a check in setup_scoreboard to skip setup_work_tree if we are
reading from the file specified in --contents.

This enables us to use --contents in a bare repo. This is a nice
addition on top of 1a3119ed, having a working tree to use --contents
is optional.

Add test for the --contents option with bare repo to the
annotate-tests.sh test script.

Signed-off-by: Han Young <hanyang.tony@bytedance.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agowrapper: use trace2 counters to collect fsync stats
Beat Bolli [Thu, 20 Jul 2023 16:48:23 +0000 (18:48 +0200)] 
wrapper: use trace2 counters to collect fsync stats

As mentioned in the thread starting at [1], trace2 counters should be
used to count events instead of ad-hoc static variables.

Convert the two fsync static variables to trace2 counters, reducing the
coupling between wrapper.c and the trace2 subsystem. Adjust t/t5351 to
match the trace2 counter output format.

The counters are not per-thread because the ones being replaced also
were not.

[1] https://lore.kernel.org/git/20230627195251.1973421-2-calvinwan@google.com/

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreset: reject --no-(mixed|soft|hard|merge|keep) option
Junio C Hamano [Wed, 19 Jul 2023 13:37:39 +0000 (06:37 -0700)] 
reset: reject --no-(mixed|soft|hard|merge|keep) option

"git reset --no-mixed" behaved exactly like "git reset --mixed",
which was nonsense.

If there were only two kinds, e.g. "mixed" vs "separate", it might
have made sense to make "git reset --no-mixed" behave identically to
"git reset --separate" and vice-versa, but because we have many
types of reset, let's just forbid "--no-mixed" and negated form of
other types.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshow-branch: reject --[no-](topo|date)-order
Junio C Hamano [Wed, 19 Jul 2023 16:32:36 +0000 (09:32 -0700)] 
show-branch: reject --[no-](topo|date)-order

"git show-branch --no-topo-order" behaved exactly the same way as
"git show-branch --topo-order" did, which was nonsense.  This was
because we choose between topo- and date- by setting a variable to
either REV_SORT_IN_GRAPH_ORDER or REV_SORT_BY_COMMIT_DATE with
OPT_SET_INT() and REV_SORT_IN_GRAPH_ORDER happens to be 0.  The
OPT_SET_INT() macro assigns 0 to the target variable in respose to
the negated form of its option.

"--no-date-order" by luck behaves identically to "--topo-order"
exactly for the same reason, and it sort-of makes sense right now,
but the "sort-of makes sense" will quickly break down once we add a
third way to sort.  Not-A may be B when there are only two choices
between A and B, but once your choices become among A, B, and C,
not-A does not mean B.

Just mark these two ordering options to reject negation, and add a
test, which was missing.  "git show-branch --no-reflog" is also
unnegatable, so throw in a test for that while we are at it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: fix a comment
Beat Bolli [Wed, 19 Jul 2023 23:24:43 +0000 (01:24 +0200)] 
trace2: fix a comment

When the trace2 counter mechanism was added in 81071626ba (trace2: add
global counter mechanism, 2022-10-24), the name of the file where new
counters are added was misspelled in a comment.

Use the correct file name.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshort help: allow a gap smaller than USAGE_GAP
Junio C Hamano [Tue, 18 Jul 2023 22:58:00 +0000 (15:58 -0700)] 
short help: allow a gap smaller than USAGE_GAP

The parse-options API responds to "git cmd -h" by listing the option
flag (padded to the USAGE_OPTS_WIDTH column), followed by USAGE_GAP
(set to 2) whitespaces, followed by the help text.  If the flags
part does not fit within the USAGE_OPTS_WIDTH, the help text is given
on its own line.  Imagine that "@" below depicts the USAGE_OPTS_WIDTH'th
column, and "#" are for the usage help text, the output may look
like this:

    @@@@@@@@@@@@@  ########################################
    -f    description of the flag '-f' comes here
    --short=<num>  description of the flag '--short'
    --very-long-option=<number>
                   description of the flag '--very-long-option'

This is all good and nice in principle, but it becomes awkward when
the flags part is just one column over the limit and forces a line
break.  See the description of the "--almost" option below:

    @@@@@@@@@@@@@  ########################################
    -f    description of the flag '-f' comes here
    --short=<num>  description of the flag '--short'
    --almost=<num>
                   description of the flag '--almost'
    --very-long-option=<number>
                   description of the flag '--very-long-option'

If we allow shrinking the gap to a single whitespace only in such a
case, we would instead get:

    @@@@@@@@@@@@@  ########################################
    -f    description of the flag '-f' comes here
    --short=<num>  description of the flag '--short'
    --almost=<num> description of the flag '--almost'
    --very-long-option=<number>
                   description of the flag '--very-long-option'

and the boundary between the flags and their descriptions does not
become any harder to see, while saving precious vertical screen real
estate.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoremote: simplify "remote add --tags" help text
Junio C Hamano [Tue, 18 Jul 2023 22:31:03 +0000 (15:31 -0700)] 
remote: simplify "remote add --tags" help text

The help text for the --tags option was split into two option[]
entries, which was a hacky way to give two lines of help text (the
second entry did not have either short or long help, and there was
no way to invoke its entry---it was there only for the help text).

As we now support multi-line text in the option help, let's make
the second line of the help a proper second line and remove the
hacky second entry.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshort help: allow multi-line opthelp
Junio C Hamano [Tue, 18 Jul 2023 22:54:04 +0000 (15:54 -0700)] 
short help: allow multi-line opthelp

When "-h" triggers the short-help in a command that implements its
option parsing using the parse-options API, the option help text is
shown with a single fprintf() as a long line.  When the text is
multi-line, the second and subsequent lines are not left padded,
that breaks the alignment across options.

Borrowing the idea from the advice API where its hint strings are
shown with (localized) "hint:" prefix, let's internally split the
(localized) help text into lines, and showing the first line, pad
the remaining lines to align.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoconfigure.ac: always save NO_ICONV to config.status
Andreas Herrmann [Wed, 19 Jul 2023 14:29:58 +0000 (16:29 +0200)] 
configure.ac: always save NO_ICONV to config.status

In case 'configure --with-iconv=no' is used, NO_ICONV is not saved to
config.status and thus git is built with iconv support.

Always save NO_ICONV to config.status to honor what user selected
during configure step.

Signed-off-by: Andreas Herrmann <aherrmann@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoconfigure.ac: don't overwrite NO_CURL option
Andreas Herrmann [Wed, 19 Jul 2023 14:29:56 +0000 (16:29 +0200)] 
configure.ac: don't overwrite NO_CURL option

Even if 'configure --with-curl=no' was run, curl support is used,
because library detection overwrites it. Avoid this overwrite.
Configure should obey what the user has specified.

Signed-off-by: Andreas Herrmann <aherrmann@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoconfigure.ac: don't overwrite NO_EXPAT option
Andreas Herrmann [Wed, 19 Jul 2023 14:29:54 +0000 (16:29 +0200)] 
configure.ac: don't overwrite NO_EXPAT option

Even if 'configure --with-expat=no' was run, expat support is used,
because library detection overwrites it. Avoid this overwrite.
Configure should obey what the user has specified.

Signed-off-by: Andreas Herrmann <aherrmann@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>