git.git
14 hours agoDocumentation/RelNotes/2.45.0.txt: fix typomainmaster
Taylor Blau [Wed, 24 Apr 2024 16:27:05 +0000 (24 12:27 -0400)]
Documentation/RelNotes/2.45.0.txt: fix typo

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
34 hours agoGit 2.45-rc1v2.45.0-rc1
Junio C Hamano [Tue, 23 Apr 2024 22:05:07 +0000 (23 15:05 -0700)]
Git 2.45-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
34 hours agoMerge branch 'ps/run-auto-maintenance-in-receive-pack'
Junio C Hamano [Tue, 23 Apr 2024 22:05:56 +0000 (23 15:05 -0700)]
Merge branch 'ps/run-auto-maintenance-in-receive-pack'

The "receive-pack" program (which responds to "git push") was not
converted to run "git maintenance --auto" when other codepaths that
used to run "git gc --auto" were updated, which has been corrected.

* ps/run-auto-maintenance-in-receive-pack:
  builtin/receive-pack: convert to use git-maintenance(1)
  run-command: introduce function to prepare auto-maintenance process

34 hours agoMerge branch 'pk/bisect-use-show'
Junio C Hamano [Tue, 23 Apr 2024 22:05:56 +0000 (23 15:05 -0700)]
Merge branch 'pk/bisect-use-show'

When "git bisect" reports the commit it determined to be the
culprit, we used to show it in a format that does not honor common
UI tweaks, like log.date and log.decorate.  The code has been
taught to use "git show" to follow more customizations.

* pk/bisect-use-show:
  bisect: report the found commit with "show"

37 hours agoA bit more topics before -rc1
Junio C Hamano [Tue, 23 Apr 2024 18:52:19 +0000 (23 11:52 -0700)]
A bit more topics before -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
37 hours agoMerge branch 'rs/apply-reject-long-name'
Junio C Hamano [Tue, 23 Apr 2024 18:52:41 +0000 (23 11:52 -0700)]
Merge branch 'rs/apply-reject-long-name'

The filename used for rejected hunks "git apply --reject" creates
was limited to PATH_MAX, which has been lifted.

* rs/apply-reject-long-name:
  apply: avoid using fixed-size buffer in write_out_one_reject()

37 hours agoMerge branch 'mr/rerere-crash-fix'
Junio C Hamano [Tue, 23 Apr 2024 18:52:41 +0000 (23 11:52 -0700)]
Merge branch 'mr/rerere-crash-fix'

When .git/rr-cache/ rerere database gets corrupted or rerere is fed to
work on a file with conflicted hunks resolved incompletely, the rerere
machinery got confused and segfaulted, which has been corrected.

* mr/rerere-crash-fix:
  rerere: fix crashes due to unmatched opening conflict markers

37 hours agoMerge branch 'rs/imap-send-simplify-cmd-issuing-codepath'
Junio C Hamano [Tue, 23 Apr 2024 18:52:41 +0000 (23 11:52 -0700)]
Merge branch 'rs/imap-send-simplify-cmd-issuing-codepath'

Code simplification.

* rs/imap-send-simplify-cmd-issuing-codepath:
  imap-send: increase command size limit

37 hours agoMerge branch 'xx/rfc2822-date-format-in-doc'
Junio C Hamano [Tue, 23 Apr 2024 18:52:40 +0000 (23 11:52 -0700)]
Merge branch 'xx/rfc2822-date-format-in-doc'

Docfix.

* xx/rfc2822-date-format-in-doc:
  Documentation: fix typos describing date format

37 hours agoMerge branch 'ps/missing-btmp-fix'
Junio C Hamano [Tue, 23 Apr 2024 18:52:40 +0000 (23 11:52 -0700)]
Merge branch 'ps/missing-btmp-fix'

GIt 2.44 introduced a regression that makes the updated code to
barf in repositories with multi-pack index written by older
versions of Git, which has been corrected.

* ps/missing-btmp-fix:
  pack-bitmap: gracefully handle missing BTMP chunks

37 hours agoMerge branch 'la/format-trailer-info'
Junio C Hamano [Tue, 23 Apr 2024 18:52:39 +0000 (23 11:52 -0700)]
Merge branch 'la/format-trailer-info'

The code to format trailers have been cleaned up.

* la/format-trailer-info:
  trailer: finish formatting unification
  trailer: begin formatting unification
  format_trailer_info(): append newline for non-trailer lines
  format_trailer_info(): drop redundant unfold_value()
  format_trailer_info(): use trailer_item objects

37 hours agoMerge branch 'dd/t9604-use-posix-timezones'
Junio C Hamano [Tue, 23 Apr 2024 18:52:39 +0000 (23 11:52 -0700)]
Merge branch 'dd/t9604-use-posix-timezones'

The cvsimport tests required that the platform understands
traditional timezone notations like CST6CDT, which has been
updated to work on those systems as long as they understand
POSIX notation with explicit tz transition dates.

* dd/t9604-use-posix-timezones:
  t9604: Fix test for musl libc and new Debian

37 hours agoMerge branch 'rj/launch-editor-error-message'
Junio C Hamano [Tue, 23 Apr 2024 18:52:39 +0000 (23 11:52 -0700)]
Merge branch 'rj/launch-editor-error-message'

Git writes a "waiting for your editor" message on an incomplete
line after launching an editor, and then append another error
message on the same line if the editor errors out.  It now clears
the "waiting for..." line before giving the error message.

* rj/launch-editor-error-message:
  launch_editor: waiting message on error

37 hours agoMerge branch 'yb/replay-doc-linkfix'
Junio C Hamano [Tue, 23 Apr 2024 18:52:38 +0000 (23 11:52 -0700)]
Merge branch 'yb/replay-doc-linkfix'

Docfix.

* yb/replay-doc-linkfix:
  Documentation: fix linkgit reference

37 hours agoMerge branch 'rs/no-openssl-compilation-fix-on-macos'
Junio C Hamano [Tue, 23 Apr 2024 18:52:38 +0000 (23 11:52 -0700)]
Merge branch 'rs/no-openssl-compilation-fix-on-macos'

Build fix.

* rs/no-openssl-compilation-fix-on-macos:
  git-compat-util: fix NO_OPENSSL on current macOS

37 hours agoMerge branch 'ta/fast-import-parse-path-fix'
Junio C Hamano [Tue, 23 Apr 2024 18:52:37 +0000 (23 11:52 -0700)]
Merge branch 'ta/fast-import-parse-path-fix'

The way "git fast-import" handles paths described in its input has
been tightened up and more clearly documented.

* ta/fast-import-parse-path-fix:
  fast-import: make comments more precise
  fast-import: forbid escaped NUL in paths
  fast-import: document C-style escapes for paths
  fast-import: improve documentation for path quoting
  fast-import: remove dead strbuf
  fast-import: allow unquoted empty path for root
  fast-import: directly use strbufs for paths
  fast-import: tighten path unquoting

37 hours agoMerge branch 'ps/reftable-block-iteration-optim'
Junio C Hamano [Tue, 23 Apr 2024 18:52:37 +0000 (23 11:52 -0700)]
Merge branch 'ps/reftable-block-iteration-optim'

The code to iterate over reftable blocks has seen some optimization
to reduce memory allocation and deallocation.

* ps/reftable-block-iteration-optim:
  reftable/block: avoid copying block iterators on seek
  reftable/block: reuse `zstream` state on inflation
  reftable/block: open-code call to `uncompress2()`
  reftable/block: reuse uncompressed blocks
  reftable/reader: iterate to next block in place
  reftable/block: move ownership of block reader into `struct table_iter`
  reftable/block: introduce `block_reader_release()`
  reftable/block: better grouping of functions
  reftable/block: merge `block_iter_seek()` and `block_reader_seek()`
  reftable/block: rename `block_reader_start()`

2 days agodocs: address typos in Git v2.45 changelog
Patrick Steinhardt [Mon, 22 Apr 2024 06:35:11 +0000 (22 08:35 +0200)]
docs: address typos in Git v2.45 changelog

Address some typos in the Git v2.45 changelog.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 days agodocs: improve changelog entry for `git pack-refs --auto`
Patrick Steinhardt [Mon, 22 Apr 2024 06:35:06 +0000 (22 08:35 +0200)]
docs: improve changelog entry for `git pack-refs --auto`

The changelog entry for the new `git pack-refs --auto` mode only says
that the new flag is useful, but doesn't really say what it does. Add
some more information.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 days agodocs: remove duplicate entry and fix typo in 2.45 changelog
Orgad Shaneh [Sat, 20 Apr 2024 19:51:30 +0000 (20 19:51 +0000)]
docs: remove duplicate entry and fix typo in 2.45 changelog

Signed-off-by: Orgad Shaneh <orgads@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 days agoGit 2.45-rc0v2.45.0-rc0
Junio C Hamano [Fri, 19 Apr 2024 16:11:41 +0000 (19 09:11 -0700)]
Git 2.45-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 days agoMerge branch 'la/mailmap-entry'
Junio C Hamano [Fri, 19 Apr 2024 16:13:47 +0000 (19 09:13 -0700)]
Merge branch 'la/mailmap-entry'

Update contact address for Linus Arver.

* la/mailmap-entry:
  mailmap: change primary address for Linus Arver

5 days agoMerge branch 'pf/commitish-committish'
Junio C Hamano [Fri, 19 Apr 2024 16:13:47 +0000 (19 09:13 -0700)]
Merge branch 'pf/commitish-committish'

Spellfix.

* pf/commitish-committish:
  typo: replace 'commitish' with 'committish'

7 days agobuiltin/receive-pack: convert to use git-maintenance(1)
Patrick Steinhardt [Wed, 17 Apr 2024 06:16:35 +0000 (17 08:16 +0200)]
builtin/receive-pack: convert to use git-maintenance(1)

In 850b6edefa (auto-gc: extract a reusable helper from "git fetch",
2020-05-06), we have introduced a helper function `run_auto_gc()` that
kicks off `git gc --auto`. The intent of this function was to pass down
the "--quiet" flag to git-gc(1) as required without duplicating this at
all callsites. In 7c3e9e8cfb (auto-gc: pass --quiet down from am,
commit, merge and rebase, 2020-05-06) we then converted callsites that
need to pass down this flag to use the new helper function. This has the
notable omission of git-receive-pack(1), which is the only remaining
user of `git gc --auto` that sets up the proccess manually. This is
probably because it unconditionally passes down the `--quiet` flag and
thus didn't benefit much from the new helper function.

In a95ce12430 (maintenance: replace run_auto_gc(), 2020-09-17) we then
replaced `run_auto_gc()` with `run_auto_maintenance()` which invokes
git-maintenance(1) instead of git-gc(1). This command is the modern
replacement for git-gc(1) and is both more thorough and also more
flexible because administrators can configure which tasks exactly to run
during maintenance.

But due to git-receive-pack(1) not using `run_auto_gc()` in the first
place it did not get converted to use git-maintenance(1) like we do
everywhere else now. Address this oversight and start to use the newly
introduced function `prepare_auto_maintenance()`. This will also make it
easier for us to adapt this code together with all the other callsites
that invoke auto-maintenance in the future.

This removes the last internal user of `git gc --auto`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
7 days agorun-command: introduce function to prepare auto-maintenance process
Patrick Steinhardt [Wed, 17 Apr 2024 06:16:31 +0000 (17 08:16 +0200)]
run-command: introduce function to prepare auto-maintenance process

The `run_auto_maintenance()` function is responsible for spawning a new
`git maintenance run --auto` process. To do so, it sets up the `sturct
child_process` and then runs it by executing `run_command()` directly.
This is rather inflexible in case callers want to modify the child
process somewhat, e.g. to redirect stderr or stdout.

Introduce a new `prepare_auto_maintenance()` function to plug this gap.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 days agomailmap: change primary address for Linus Arver
Linus Arver [Tue, 16 Apr 2024 23:21:51 +0000 (16 23:21 +0000)]
mailmap: change primary address for Linus Arver

Linus will lose access to his work email soon.

Signed-off-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 days agoThe twentieth batch
Junio C Hamano [Tue, 16 Apr 2024 21:01:39 +0000 (16 14:01 -0700)]
The twentieth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 days agoMerge branch 'pw/t3428-cleanup'
Junio C Hamano [Tue, 16 Apr 2024 21:50:31 +0000 (16 14:50 -0700)]
Merge branch 'pw/t3428-cleanup'

Test cleanup.

* pw/t3428-cleanup:
  t3428: restore coverage for "apply" backend
  t3428: use test_commit_message
  t3428: modernize test setup

8 days agoMerge branch 'ba/osxkeychain-updates'
Junio C Hamano [Tue, 16 Apr 2024 21:50:30 +0000 (16 14:50 -0700)]
Merge branch 'ba/osxkeychain-updates'

Update osxkeychain backend with features required for the recent
credential subsystem.

* ba/osxkeychain-updates:
  osxkeychain: store new attributes
  osxkeychain: erase matching passwords only
  osxkeychain: erase all matching credentials
  osxkeychain: replace deprecated SecKeychain API

8 days agoMerge branch 'jt/reftable-geometric-compaction'
Junio C Hamano [Tue, 16 Apr 2024 21:50:30 +0000 (16 14:50 -0700)]
Merge branch 'jt/reftable-geometric-compaction'

The strategy to compact multiple tables of reftables after many
operations accumulate many entries has been improved to avoid
accumulating too many tables uncollected.

* jt/reftable-geometric-compaction:
  reftable/stack: use geometric table compaction
  reftable/stack: add env to disable autocompaction
  reftable/stack: expose option to disable auto-compaction

8 days agoMerge branch 'tb/make-indent-conditional-with-non-spaces'
Junio C Hamano [Tue, 16 Apr 2024 21:50:29 +0000 (16 14:50 -0700)]
Merge branch 'tb/make-indent-conditional-with-non-spaces'

Adjust to an upcoming changes to GNU make that breaks our Makefiles.

* tb/make-indent-conditional-with-non-spaces:
  Makefile(s): do not enforce "all indents must be done with tab"
  Makefile(s): avoid recipe prefix in conditional statements

8 days agoMerge branch 'rs/usage-fallback-to-show-message-format'
Junio C Hamano [Tue, 16 Apr 2024 21:50:29 +0000 (16 14:50 -0700)]
Merge branch 'rs/usage-fallback-to-show-message-format'

vreportf(), which is usede by error() and friends, has been taught
to give the error message printf-format string when its vsnprintf()
call fails, instead of showing nothing useful to identify the
nature of the error.

* rs/usage-fallback-to-show-message-format:
  usage: report vsnprintf(3) failure

8 days agoMerge branch 'rs/date-mode-pass-by-value'
Junio C Hamano [Tue, 16 Apr 2024 21:50:28 +0000 (16 14:50 -0700)]
Merge branch 'rs/date-mode-pass-by-value'

The codepaths that reach date_mode_from_type() have been updated to
pass "struct date_mode" by value to make them thread safe.

* rs/date-mode-pass-by-value:
  date: make DATE_MODE thread-safe

8 days agoMerge branch 'sj/userdiff-c-sharp'
Junio C Hamano [Tue, 16 Apr 2024 21:50:28 +0000 (16 14:50 -0700)]
Merge branch 'sj/userdiff-c-sharp'

The userdiff patterns for C# has been updated.

Acked-by: Johannes Sixt <j6t@kdbg.org>
cf. <c2154457-3f2f-496e-9b8b-c8ea7257027b@kdbg.org>

* sj/userdiff-c-sharp:
  userdiff: better method/property matching for C#

8 days agoMerge branch 'tb/t7700-fixup'
Junio C Hamano [Tue, 16 Apr 2024 21:50:28 +0000 (16 14:50 -0700)]
Merge branch 'tb/t7700-fixup'

Test fix.

* tb/t7700-fixup:
  t/t7700-repack.sh: fix test breakages with `GIT_TEST_MULTI_PACK_INDEX=1 `

8 days agoMerge branch 'jc/local-extern-shell-rules'
Junio C Hamano [Tue, 16 Apr 2024 21:50:27 +0000 (16 14:50 -0700)]
Merge branch 'jc/local-extern-shell-rules'

Document and apply workaround for a buggy version of dash that
mishandles "local var=val" construct.

* jc/local-extern-shell-rules:
  t1016: local VAR="VAL" fix
  t0610: local VAR="VAL" fix
  t: teach lint that RHS of 'local VAR=VAL' needs to be quoted
  t: local VAR="VAL" (quote ${magic-reference})
  t: local VAR="VAL" (quote command substitution)
  t: local VAR="VAL" (quote positional parameters)
  CodingGuidelines: quote assigned value in 'local var=$val'
  CodingGuidelines: describe "export VAR=VAL" rule

8 days agoapply: avoid using fixed-size buffer in write_out_one_reject()
René Scharfe [Tue, 16 Apr 2024 20:16:05 +0000 (16 22:16 +0200)]
apply: avoid using fixed-size buffer in write_out_one_reject()

On some systems PATH_MAX is not a hard limit.  Support longer paths by
building them on the heap instead of using static buffers.

Take care to work around (arguably buggy) implementations of free(3)
that change errno by calling it only after using the errno value.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 days agorerere: fix crashes due to unmatched opening conflict markers
Marcel Röthke [Tue, 16 Apr 2024 10:52:48 +0000 (16 12:52 +0200)]
rerere: fix crashes due to unmatched opening conflict markers

When rerere handles a conflict with an unmatched opening conflict marker
in a file with other conflicts, it will fail create a preimage and also
fail allocate the status member of struct rerere_dir. Currently the
status member is allocated after the error handling. This will lead to a
SEGFAULT when the status member is accessed during cleanup of the failed
parse.

Additionally, in subsequent executions of rerere, after removing the
MERGE_RR.lock manually, rerere crashes for a similar reason. MERGE_RR
points to a conflict id that has no preimage, therefore the status
member is not allocated and a SEGFAULT happens when trying to check if a
preimage exists.

Solve this by making sure the status field is allocated correctly and add
tests to prevent the bug from reoccurring.

This does not fix the root cause, failing to parse stray conflict
markers, but I don't think we can do much better than recognizing it,
printing an error, and moving on gracefully.

Signed-off-by: Marcel Röthke <marcel@roethke.info>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoThe ninteenth batch
Junio C Hamano [Mon, 15 Apr 2024 21:11:30 +0000 (15 14:11 -0700)]
The ninteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoMerge branch 'jc/t2104-style-fixes'
Junio C Hamano [Mon, 15 Apr 2024 21:11:44 +0000 (15 14:11 -0700)]
Merge branch 'jc/t2104-style-fixes'

Test style fixes.

* jc/t2104-style-fixes:
  t2104: style fixes

9 days agoMerge branch 'jc/unleak-core-excludesfile'
Junio C Hamano [Mon, 15 Apr 2024 21:11:44 +0000 (15 14:11 -0700)]
Merge branch 'jc/unleak-core-excludesfile'

The variable that holds the value read from the core.excludefile
configuration variable used to leak, which has been corrected.

* jc/unleak-core-excludesfile:
  config: do not leak excludes_file

9 days agoMerge branch 'jk/libcurl-8.7-regression-workaround'
Junio C Hamano [Mon, 15 Apr 2024 21:11:44 +0000 (15 14:11 -0700)]
Merge branch 'jk/libcurl-8.7-regression-workaround'

Fix was added to work around a regression in libcURL 8.7.0 (which has
already been fixed in their tip of the tree).

* jk/libcurl-8.7-regression-workaround:
  remote-curl: add Transfer-Encoding header only for older curl
  INSTALL: bump libcurl version to 7.21.3
  http: reset POSTFIELDSIZE when clearing curl handle

9 days agoMerge branch 'ps/t0610-umask-fix'
Junio C Hamano [Mon, 15 Apr 2024 21:11:43 +0000 (15 14:11 -0700)]
Merge branch 'ps/t0610-umask-fix'

The "shared repository" test in the t0610 reftable test failed
under restrictive umask setting (e.g. 007), which has been
corrected.

* ps/t0610-umask-fix:
  t0610: execute git-pack-refs(1) with specified umask
  t0610: make `--shared=` tests reusable

9 days agoMerge branch 'gt/add-u-commit-i-pathspec-check'
Junio C Hamano [Mon, 15 Apr 2024 21:11:43 +0000 (15 14:11 -0700)]
Merge branch 'gt/add-u-commit-i-pathspec-check'

"git add -u <pathspec>" and "git commit [-i] <pathspec>" did not
diagnose a pathspec element that did not match any files in certain
situations, unlike "git add <pathspec>" did.

* gt/add-u-commit-i-pathspec-check:
  builtin/add: error out when passing untracked path with -u
  builtin/commit: error out when passing untracked path with -i
  revision: optionally record matches with pathspec elements

9 days agoMerge branch 'ds/fetch-config-parse-microfix'
Junio C Hamano [Mon, 15 Apr 2024 21:11:43 +0000 (15 14:11 -0700)]
Merge branch 'ds/fetch-config-parse-microfix'

A config parser callback function fell through instead of returning
after recognising and processing a variable, wasting cycles, which
has been corrected.

* ds/fetch-config-parse-microfix:
  fetch: return when parsing submodule.recurse

9 days agoMerge branch 'rs/apply-reject-fd-leakfix'
Junio C Hamano [Mon, 15 Apr 2024 21:11:42 +0000 (15 14:11 -0700)]
Merge branch 'rs/apply-reject-fd-leakfix'

A file descriptor leak in an error codepath, used when "git apply
--reject" fails to create the *.rej file, has been corrected.

* rs/apply-reject-fd-leakfix:
  apply: don't leak fd on fdopen() error

9 days agoMerge branch 'rs/apply-lift-path-length-limit'
Junio C Hamano [Mon, 15 Apr 2024 21:11:42 +0000 (15 14:11 -0700)]
Merge branch 'rs/apply-lift-path-length-limit'

"git apply" has been updated to lift the hardcoded pathname length
limit, which in turn allowed a mksnpath() function that is no
longer used.

* rs/apply-lift-path-length-limit:
  path: remove mksnpath()
  apply: avoid fixed-size buffer in create_one_file()

9 days agoMerge branch 'ma/win32-unix-domain-socket'
Junio C Hamano [Mon, 15 Apr 2024 21:11:42 +0000 (15 14:11 -0700)]
Merge branch 'ma/win32-unix-domain-socket'

Windows binary used to decide the use of unix-domain socket at
build time, but it learned to make the decision at runtime instead.

* ma/win32-unix-domain-socket:
  Win32: detect unix socket support at runtime

9 days agoimap-send: increase command size limit
René Scharfe [Sun, 14 Apr 2024 16:47:52 +0000 (14 18:47 +0200)]
imap-send: increase command size limit

nfvasprintf() has a 8KB limit, but it's not relevant, as its result is
combined with other strings and added to a 1KB buffer by its caller.
That 1KB limit is not mentioned in RFC 9051, which specifies IMAP.

While 1KB is plenty for user names, passwords and mailbox names,
there's no point in limiting our commands like that.  Call xstrvfmt()
instead of open-coding it and use strbuf to format the command to
send, as we need its length.  Fail hard if it exceeds INT_MAX, because
socket_write() can't take more than that.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agobisect: report the found commit with "show"
Peter Krefting [Sat, 13 Apr 2024 20:14:48 +0000 (13 21:14 +0100)]
bisect: report the found commit with "show"

When "git bisect" finds the first bad commit and shows it to the user,
it calls "git diff-tree" to do so, whose output is meant to be stable
and deliberately ignores end-user customizations.

As the output is supposed to be consumed by humans, replace this with
a call to "git show". This command honors configuration options (such
as "log.date" and "log.mailmap") and other UI improvements (renames
are detected).

Pass some hard-coded options to "git show" to make the output similar
to the one we are replacing, such as showing a patch summary only.

Reported-by: Michael Osipov <michael.osipov@innomotics.com>
Signed-off-By: Peter Krefting <peter@softwolves.pp.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoDocumentation: fix linkgit reference
Yehezkel Bernat [Sun, 14 Apr 2024 22:08:02 +0000 (14 22:08 +0000)]
Documentation: fix linkgit reference

In git-replay documentation, linkgit to git-rev-parse is missing the
man section, which breaks its rendering.

Add section number as done in other references to this command.

Signed-off-by: Yehezkel Bernat <YehezkelShB@gmail.com>
Acked-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agogit-compat-util: fix NO_OPENSSL on current macOS
René Scharfe [Sun, 14 Apr 2024 16:47:54 +0000 (14 18:47 +0200)]
git-compat-util: fix NO_OPENSSL on current macOS

b195aa00c1 (git-compat-util: suppress unavoidable Apple-specific
deprecation warnings, 2014-12-16) started to define
__AVAILABILITY_MACROS_USES_AVAILABILITY in git-compat-util.h.  On
current versions it is already defined (e.g. on macOS 14.4.1).  Undefine
it before redefining it to avoid a compilation error.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agopack-bitmap: gracefully handle missing BTMP chunks
Patrick Steinhardt [Mon, 15 Apr 2024 06:41:25 +0000 (15 08:41 +0200)]
pack-bitmap: gracefully handle missing BTMP chunks

In 0fea6b73f1 (Merge branch 'tb/multi-pack-verbatim-reuse', 2024-01-12)
we have introduced multi-pack verbatim reuse of objects. This series has
introduced a new BTMP chunk, which encodes information about bitmapped
objects in the multi-pack index. Starting with dab60934e3 (pack-bitmap:
pass `bitmapped_pack` struct to pack-reuse functions, 2023-12-14) we use
this information to figure out objects which we can reuse from each of
the packfiles.

One thing that we glossed over though is backwards compatibility with
repositories that do not yet have BTMP chunks in their multi-pack index.
In that case, `nth_bitmapped_pack()` would return an error, which causes
us to emit a warning followed by another error message. These warnings
are visible to users that fetch from a repository:

```
$ git fetch
...
remote: error: MIDX does not contain the BTMP chunk
remote: warning: unable to load pack: 'pack-f6bb7bd71d345ea9fe604b60cab9ba9ece54ffbe.idx', disabling pack-reuse
remote: Enumerating objects: 40, done.
remote: Counting objects: 100% (40/40), done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 40 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
...
```

While the fetch succeeds the user is left wondering what they did wrong.
Furthermore, as visible both from the warning and from the reuse stats,
pack-reuse is completely disabled in such repositories.

What is quite interesting is that this issue can even be triggered in
case `pack.allowPackReuse=single` is set, which is the default value.
One could have expected that in this case we fall back to the old logic,
which is to use the preferred packfile without consulting BTMP chunks at
all. But either we fail with the above error in case they are missing,
or we use the first pack in the multi-pack-index. The former case
disables pack-reuse altogether, whereas the latter case may result in
reusing objects from a suboptimal packfile.

Fix this issue by partially reverting the logic back to what we had
before this patch series landed. Namely, in the case where we have no
BTMP chunks or when `pack.allowPackReuse=single` are set, we use the
preferred pack instead of consulting the BTMP chunks.

Helped-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: avoid copying block iterators on seek
Patrick Steinhardt [Mon, 8 Apr 2024 12:17:08 +0000 (8 14:17 +0200)]
reftable/block: avoid copying block iterators on seek

When seeking a reftable record in a block we need to position the
iterator _before_ the sought-after record so that the next call to
`block_iter_next()` would yield that record. To achieve this, the loop
that performs the linear seeks to restore the previous position once it
has found the record.

This is done by advancing two `block_iter`s: one to check whether the
next record is our sought-after record, and one that we update after
every iteration. This of course involves quite a lot of copying and also
leads to needless memory allocations.

Refactor the code to get rid of the `next` iterator and the copying this
involves. Instead, we can restore the previous offset such that the call
to `next` will return the correct record.

Next to being simpler conceptually this also leads to a nice speedup.
The following benchmark parser 10k refs out of 100k existing refs via
`git-rev-list --no-walk`:

  Benchmark 1: rev-list: print many refs (HEAD~)
    Time (mean ± σ):     170.2 ms ±   1.7 ms    [User: 86.1 ms, System: 83.6 ms]
    Range (min … max):   166.4 ms … 180.3 ms    500 runs

  Benchmark 2: rev-list: print many refs (HEAD~)
    Time (mean ± σ):     161.6 ms ±   1.6 ms    [User: 78.1 ms, System: 83.0 ms]
    Range (min … max):   158.4 ms … 172.3 ms    500 runs

  Summary
    rev-list: print many refs (HEAD) ran
      1.05 ± 0.01 times faster than rev-list: print many refs (HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: reuse `zstream` state on inflation
Patrick Steinhardt [Mon, 8 Apr 2024 12:17:04 +0000 (8 14:17 +0200)]
reftable/block: reuse `zstream` state on inflation

When calling `inflateInit()` and `inflate()`, the zlib library will
allocate several data structures for the underlying `zstream` to keep
track of various information. Thus, when inflating repeatedly, it is
possible to optimize memory allocation patterns by reusing the `zstream`
and then calling `inflateReset()` on it to prepare it for the next chunk
of data to inflate.

This is exactly what the reftable code is doing: when iterating through
reflogs we need to potentially inflate many log blocks, but we discard
the `zstream` every single time. Instead, as we reuse the `block_reader`
for each of the blocks anyway, we can initialize the `zstream` once and
then reuse it for subsequent inflations.

Refactor the code to do so, which leads to a significant reduction in
the number of allocations. The following measurements were done when
iterating through 1 million reflog entries. Before:

  HEAP SUMMARY:
      in use at exit: 13,473 bytes in 122 blocks
    total heap usage: 23,028 allocs, 22,906 frees, 162,813,552 bytes allocated

After:

  HEAP SUMMARY:
      in use at exit: 13,473 bytes in 122 blocks
    total heap usage: 302 allocs, 180 frees, 88,352 bytes allocated

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: open-code call to `uncompress2()`
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:59 +0000 (8 14:16 +0200)]
reftable/block: open-code call to `uncompress2()`

The reftable format stores log blocks in a compressed format. Thus,
whenever we want to read such a block we first need to decompress it.
This is done by calling the convenience function `uncompress2()` of the
zlib library, which is a simple wrapper that manages the lifecycle of
the `zstream` structure for us.

While nice for one-off inflation of data, when iterating through reflogs
we will likely end up inflating many such log blocks. This requires us
to reallocate the state of the `zstream` every single time, which adds
up over time. It would thus be great to reuse the `zstream` instead of
discarding it after every inflation.

Open-code the call to `uncompress2()` such that we can start reusing the
`zstream` in the subsequent commit. Note that our open-coded variant is
different from `uncompress2()` in two ways:

  - We do not loop around `inflate()` until we have processed all input.
    As our input is limited by the maximum block size, which is 16MB, we
    should not hit limits of `inflate()`.

  - We use `Z_FINISH` instead of `Z_NO_FLUSH`. Quoting the `inflate()`
    documentation: "inflate() should normally be called until it returns
    Z_STREAM_END or an error. However if all decompression is to be
    performed in a single step (a single call of inflate), the parameter
    flush should be set to Z_FINISH."

    Furthermore, "Z_FINISH also informs inflate to not maintain a
    sliding window if the stream completes, which reduces inflate's
    memory footprint."

Other than that this commit is expected to be functionally equivalent
and does not yet reuse the `zstream`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: reuse uncompressed blocks
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:54 +0000 (8 14:16 +0200)]
reftable/block: reuse uncompressed blocks

The reftable backend stores reflog entries in a compressed format and
thus needs to uncompress blocks before one can read records from it.
For each reflog block we thus have to allocate an array that we can
decompress the block contents into. This block is being discarded
whenever the table iterator moves to the next block. Consequently, we
reallocate a new array on every block, which is quite wasteful.

Refactor the code to reuse the uncompressed block data when moving the
block reader to a new block. This significantly reduces the number of
allocations when iterating through many compressed blocks. The following
measurements are done with `git reflog list` when listing 100k reflogs.
Before:

  HEAP SUMMARY:
      in use at exit: 13,473 bytes in 122 blocks
    total heap usage: 45,755 allocs, 45,633 frees, 254,779,456 bytes allocated

After:

  HEAP SUMMARY:
      in use at exit: 13,473 bytes in 122 blocks
    total heap usage: 23,028 allocs, 22,906 frees, 162,813,547 bytes allocated

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/reader: iterate to next block in place
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:50 +0000 (8 14:16 +0200)]
reftable/reader: iterate to next block in place

The table iterator has to iterate towards the next block once it has
yielded all records of the current block. This is done by creating a new
table iterator, initializing it to the next block, releasing the old
iterator and then copying over the data.

Refactor the code to instead advance the table iterator in place. This
is simpler and unlocks some optimizations in subsequent patches. Also,
it allows us to avoid some allocations.

The following measurements show a single matching ref out of 1 million
refs. Before this change:

  HEAP SUMMARY:
      in use at exit: 13,603 bytes in 125 blocks
    total heap usage: 7,235 allocs, 7,110 frees, 301,481 bytes allocated

After:

  HEAP SUMMARY:
      in use at exit: 13,603 bytes in 125 blocks
    total heap usage: 315 allocs, 190 frees, 107,027 bytes allocated

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: move ownership of block reader into `struct table_iter`
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:45 +0000 (8 14:16 +0200)]
reftable/block: move ownership of block reader into `struct table_iter`

The table iterator allows the caller to iterate through all records in a
reftable table. To do so it iterates through all blocks of the desired
type one by one, where for each block it creates a new block iterator
and yields all its entries.

One of the things that is somewhat confusing in this context is who owns
the block reader that is being used to read the blocks and pass them to
the block iterator. Intuitively, as the table iterator is responsible
for iterating through the blocks, one would assume that this iterator is
also responsible for managing the lifecycle of the reader. And while it
somewhat is, the block reader is ultimately stored inside of the block
iterator.

Refactor the code such that the block reader is instead fully managed by
the table iterator. Instead of passing the reader to the block iterator,
we now only end up passing the block data to it. Despite clearing up the
lifecycle of the reader, it will also allow for better reuse of the
reader in subsequent patches.

The following benchmark prints a single matching ref out of 1 million
refs. Before:

  HEAP SUMMARY:
      in use at exit: 13,603 bytes in 125 blocks
    total heap usage: 6,607 allocs, 6,482 frees, 509,635 bytes allocated

After:

  HEAP SUMMARY:
      in use at exit: 13,603 bytes in 125 blocks
    total heap usage: 7,235 allocs, 7,110 frees, 301,481 bytes allocated

Note that while there are more allocation and free calls now, the
overall number of bytes allocated is significantly lower. The number of
allocations will be reduced significantly by the next patch though.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: introduce `block_reader_release()`
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:40 +0000 (8 14:16 +0200)]
reftable/block: introduce `block_reader_release()`

Introduce a new function `block_reader_release()` that releases
resources acquired by the block reader. This function will be extended
in a subsequent commit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: better grouping of functions
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:36 +0000 (8 14:16 +0200)]
reftable/block: better grouping of functions

Function definitions and declaration of `struct block_reader` and
`struct block_iter` are somewhat mixed up, making it hard to see which
functions belong together. Rearrange them.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: merge `block_iter_seek()` and `block_reader_seek()`
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:31 +0000 (8 14:16 +0200)]
reftable/block: merge `block_iter_seek()` and `block_reader_seek()`

The function `block_iter_seek()` is merely a simple wrapper around
`block_reader_seek()`. Merge those two functions into a new function
`block_iter_seek_key()` that more clearly says what it is actually
doing.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agoreftable/block: rename `block_reader_start()`
Patrick Steinhardt [Mon, 8 Apr 2024 12:16:26 +0000 (8 14:16 +0200)]
reftable/block: rename `block_reader_start()`

The function `block_reader_start()` does not really apply to the block
reader, but to the block iterator. It's name is thus somewhat confusing.
Rename it to `block_iter_seek_start()` to clarify.

We will rename `block_reader_seek()` in similar spirit in the next
commit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agolaunch_editor: waiting message on error
Rubén Justo [Sun, 14 Apr 2024 07:39:44 +0000 (14 09:39 +0200)]
launch_editor: waiting message on error

When advice.waitingForEditor configuration is not set to false, we show
a hint telling that we are waiting for user's editor to close the file
when we launch an editor and wait for it to return control back to us.
We give the message on an incomplete line, expecting that we can go back
to the beginning of the line and clear the message when the editor returns.

However, it is possible that the editor exits with an error status, in
which case we show an error message and then return to our caller.  In
such a case, the error message is given where the terminal cursor
happens to be, which is most likely after the "we are waiting for your
editor" message on the same line.

Clear the line before showing the error.

While we're here, make the error message follow our CodingGuideLines.

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: make comments more precise
Thalia Archibald [Sun, 14 Apr 2024 01:12:27 +0000 (14 01:12 +0000)]
fast-import: make comments more precise

The former is somewhat imprecise. The latter became out of sync with the
behavior in e814c39c2f (fast-import: refactor parsing of spaces,
2014-06-18).

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: forbid escaped NUL in paths
Thalia Archibald [Sun, 14 Apr 2024 01:12:19 +0000 (14 01:12 +0000)]
fast-import: forbid escaped NUL in paths

NUL cannot appear in paths. Even disregarding filesystem path
limitations, the tree object format delimits with NUL, so such a path
cannot be encoded by Git.

When a quoted path is unquoted, it could possibly contain NUL from
"\000". Forbid it so it isn't truncated.

fast-import still has other issues with NUL, but those will be addressed
later.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: document C-style escapes for paths
Thalia Archibald [Sun, 14 Apr 2024 01:12:12 +0000 (14 01:12 +0000)]
fast-import: document C-style escapes for paths

Simply saying “C-style” string quoting is imprecise, as only a subset of
C escapes are supported. Document the exact escapes.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: improve documentation for path quoting
Thalia Archibald [Sun, 14 Apr 2024 01:12:04 +0000 (14 01:12 +0000)]
fast-import: improve documentation for path quoting

It describes what characters cannot be in an unquoted path, but not
their semantics. Reframe it as a definition of unquoted paths. From the
perspective of the parser, whether it starts with `"` is what defines
whether it will parse it as quoted or unquoted.

The restrictions on characters in unquoted paths (with starting-", LF,
and spaces) are explained in the quoted paragraph. Move it to the
unquoted paragraph and reword.

The restriction that the source paths of filecopy and filerename cannot
contain SP is only stated in their respective sections. Restate it in
the <path> section.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: remove dead strbuf
Thalia Archibald [Sun, 14 Apr 2024 01:11:59 +0000 (14 01:11 +0000)]
fast-import: remove dead strbuf

The strbuf in `note_change_n` is to copy the remainder of `p` before
potentially invalidating it when reading the next line. However, `p` is
not used after that point. It has been unused since the function was
created in a8dd2e7d2b (fast-import: Add support for importing commit
notes, 2009-10-09) and looks to be a fossil from adapting
`file_change_m`. Remove it.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: allow unquoted empty path for root
Thalia Archibald [Sun, 14 Apr 2024 01:11:52 +0000 (14 01:11 +0000)]
fast-import: allow unquoted empty path for root

Ever since filerename was added in f39a946a1f (Support wholesale
directory renames in fast-import, 2007-07-09) and filecopy in b6f3481bb4
(Teach fast-import to recursively copy files/directories, 2007-07-15),
both have produced an error when the destination path is empty. Later,
when support for targeting the root directory with an empty string was
added in 2794ad5244 (fast-import: Allow filemodify to set the root,
2010-10-10), this had the effect of allowing the quoted empty string
(`""`), but forbidding its unquoted variant (``). This seems to have
been intended as simple data validation for parsing two paths, rather
than a syntax restriction, because it was not extended to the other
operations.

All other occurrences of paths (in filemodify, filedelete, the source of
filecopy and filerename, and ls) allow both.

For most of this feature's lifetime, the documentation has not
prescribed the use of quoted empty strings. In e5959106d6
(Documentation/fast-import: put explanation of M 040000 <dataref> "" in
context, 2011-01-15), its documentation was changed from “`<path>` may
also be an empty string (`""`) to specify the root of the tree” to “The
root of the tree can be represented by an empty string as `<path>`”.

Thus, we should assume that some front-ends have depended on this
behavior.

Remove this restriction for the destination paths of filecopy and
filerename and change tests targeting the root to test `""` and ``.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: directly use strbufs for paths
Thalia Archibald [Sun, 14 Apr 2024 01:11:44 +0000 (14 01:11 +0000)]
fast-import: directly use strbufs for paths

Previously, one case would not write the path to the strbuf: when the
path is unquoted and at the end of the string. It was essentially
copy-on-write. However, with the logic simplification of the previous
commit, this case was eliminated and the strbuf is always populated.

Directly use the strbufs now instead of an alias.

Since this already changes all the lines that use the strbufs, rename
them from `uq` to be more descriptive. That they are unquoted is not
their most important property, so name them after what they carry.

Additionally, `file_change_m` no longer needs to copy the path before
reading inline data.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 days agofast-import: tighten path unquoting
Thalia Archibald [Sun, 14 Apr 2024 01:11:37 +0000 (14 01:11 +0000)]
fast-import: tighten path unquoting

Path parsing in fast-import is inconsistent and many unquoting errors
are suppressed or not checked.

<path> appears in the grammar in these places:

    filemodify ::= 'M' SP <mode> (<dataref> | 'inline') SP <path> LF
    filedelete ::= 'D' SP <path> LF
    filecopy   ::= 'C' SP <path> SP <path> LF
    filerename ::= 'R' SP <path> SP <path> LF
    ls         ::= 'ls' SP <dataref> SP <path> LF
    ls-commit  ::= 'ls' SP <path> LF

and fast-import.c parses them in five different ways:

1. For filemodify and filedelete:
   Try to unquote <path>. If it unquotes without errors, use the
   unquoted version; otherwise, treat it as literal bytes to the end of
   the line (including any number of SP).
2. For filecopy (source) and filerename (source):
   Try to unquote <path>. If it unquotes without errors, use the
   unquoted version; otherwise, treat it as literal bytes up to, but not
   including, the next SP.
3. For filecopy (dest) and filerename (dest):
   Like 1., but an unquoted empty string is forbidden.
4. For ls:
   If <path> starts with `"`, unquote it and report parse errors;
   otherwise, treat it as literal bytes to the end of the line
   (including any number of SP).
5. For ls-commit:
   Unquote <path> and report parse errors.
   (It must start with `"` to disambiguate from ls.)

In the first three, any errors from trying to unquote a string are
suppressed, so a quoted string that contains invalid escapes would be
interpreted as literal bytes. For example, `"\xff"` would fail to
unquote (because hex escapes are not supported), and it would instead be
interpreted as the byte sequence '"', '\\', 'x', 'f', 'f', '"', which is
certainly not intended. Some front-ends erroneously use their language's
standard quoting routine instead of matching Git's, which could silently
introduce escapes that would be incorrectly parsed due to this and lead
to data corruption.

The documentation states “To use a source path that contains SP the path
must be quoted.”, so it is expected that some implementations depend on
spaces being allowed in paths in the final position. Thus we have two
documented ways to parse paths, so simplify the implementation to that.

Now we have:

1. `parse_path_eol` for filemodify, filedelete, filecopy (dest),
   filerename (dest), ls, and ls-commit:

   If <path> starts with `"`, unquote it and report parse errors;
   otherwise, treat it as literal bytes to the end of the line
   (including any number of SP).

2. `parse_path_space` for filecopy (source) and filerename (source):

   If <path> starts with `"`, unquote it and report parse errors;
   otherwise, treat it as literal bytes up to, but not including, the
   next SP. It must be followed by SP.

There remain two special cases: The dest <path> in filecopy and rename
cannot be an unquoted empty string (this will be addressed subsequently)
and <path> in ls-commit must be quoted to disambiguate it from ls.

Signed-off-by: Thalia Archibald <thalia@archibald.dev>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 days agoThe eighteenth batch
Junio C Hamano [Fri, 12 Apr 2024 17:57:45 +0000 (12 10:57 -0700)]
The eighteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 days agoMerge branch 'tb/midx-write'
Junio C Hamano [Fri, 12 Apr 2024 18:31:39 +0000 (12 11:31 -0700)]
Merge branch 'tb/midx-write'

Code clean-up by splitting code responsible for writing midx files
into its own file.

* tb/midx-write:
  midx-write.c: use `--stdin-packs` when repacking
  midx-write.c: check count of packs to repack after grouping
  midx-write.c: factor out common want_included_pack() routine
  midx-write: move writing-related functions from midx.c

12 days agoMerge branch 'rs/t-prio-queue-cleanup'
Junio C Hamano [Fri, 12 Apr 2024 18:31:39 +0000 (12 11:31 -0700)]
Merge branch 'rs/t-prio-queue-cleanup'

t-prio-queue test has been cleaned up by using C99 compound
literals; this is meant to also serve as a weather-balloon to smoke
out folks with compilers who have trouble compiling code that uses
the feature.

* rs/t-prio-queue-cleanup:
  t-prio-queue: simplify using compound literals

12 days agoMerge branch 'ps/reftable-binsearch-updates'
Junio C Hamano [Fri, 12 Apr 2024 18:31:39 +0000 (12 11:31 -0700)]
Merge branch 'ps/reftable-binsearch-updates'

Reftable code clean-up and some bugfixes.

* ps/reftable-binsearch-updates:
  reftable/block: avoid decoding keys when searching restart points
  reftable/record: extract function to decode key lengths
  reftable/block: fix error handling when searching restart points
  reftable/block: refactor binary search over restart points
  reftable/refname: refactor binary search over refnames
  reftable/basics: improve `binsearch()` test
  reftable/basics: fix return type of `binsearch()` to be `size_t`

12 days agoMerge branch 'jc/checkout-detach-wo-tracking-report'
Junio C Hamano [Fri, 12 Apr 2024 18:31:39 +0000 (12 11:31 -0700)]
Merge branch 'jc/checkout-detach-wo-tracking-report'

"git checkout/switch --detach foo", after switching to the detached
HEAD state, gave the tracking information for the 'foo' branch,
which was pointless.

Tested-by: M Hickford <mirth.hickford@gmail.com>
cf. <CAGJzqsmE9FDEBn=u3ge4LA3ha4fDbm4OWiuUbMaztwjELBd7ug@mail.gmail.com>

* jc/checkout-detach-wo-tracking-report:
  checkout: omit "tracking" information on a detached HEAD

12 days agoMerge branch 'rs/imap-send-use-xsnprintf'
Junio C Hamano [Fri, 12 Apr 2024 18:31:38 +0000 (12 11:31 -0700)]
Merge branch 'rs/imap-send-use-xsnprintf'

Code clean-up and duplicate reduction.

* rs/imap-send-use-xsnprintf:
  imap-send: use xsnprintf to format command

12 days agoMerge branch 'js/merge-tree-3-trees'
Junio C Hamano [Fri, 12 Apr 2024 18:31:38 +0000 (12 11:31 -0700)]
Merge branch 'js/merge-tree-3-trees'

Match the option argument type in the help text to the correct type
updated by a recent series.

* js/merge-tree-3-trees:
  merge-tree: fix argument type of the `--merge-base` option

12 days agomerge-tree: fix argument type of the `--merge-base` option
Johannes Schindelin [Fri, 12 Apr 2024 12:10:40 +0000 (12 12:10 +0000)]
merge-tree: fix argument type of the `--merge-base` option

In 5f43cf5b2e4 (merge-tree: accept 3 trees as arguments, 2024-01-28), I
taught `git merge-tree` to perform three-way merges on trees. This
commit even changed the manual page to state that the `--merge-base`
option takes a tree-ish rather than requiring a commit.

But I forgot to adjust the in-program help text. This patch fixes that.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 days agoDocumentation: fix typos describing date format
Xing Xin [Fri, 12 Apr 2024 08:51:16 +0000 (12 08:51 +0000)]
Documentation: fix typos describing date format

This commit corrects a typographical error found in both
date-formats.txt and git-fast-import.txt documentation, where the term
`email format` was mistakenly used instead of `date format`.

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 days agotypo: replace 'commitish' with 'committish'
Pi Fisher [Sun, 7 Apr 2024 21:21:08 +0000 (7 17:21 -0400)]
typo: replace 'commitish' with 'committish'

Across only three files, comments and a single function name used
'commitish' rather than 'commit-ish' or 'committish' as the spelling.
The git glossary accepts a hyphen or a double-t, but not a single-t.
Despite the typo in a translation file, none of the typos appear in
user-visible locations.

Signed-off-by: Pi Fisher <Pi.L.D.Fisher@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoThe seventeenth batch
Junio C Hamano [Wed, 10 Apr 2024 16:59:55 +0000 (10 09:59 -0700)]
The seventeenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoMerge branch 'jc/t2104-style-update'
Junio C Hamano [Wed, 10 Apr 2024 17:00:09 +0000 (10 10:00 -0700)]
Merge branch 'jc/t2104-style-update'

Coding style fixes.

* jc/t2104-style-update:
  t2104: style fixes

2 weeks agoMerge branch 'kn/clarify-update-ref-doc'
Junio C Hamano [Wed, 10 Apr 2024 17:00:08 +0000 (10 10:00 -0700)]
Merge branch 'kn/clarify-update-ref-doc'

Doc update, as a preparation to enhance "git update-ref --stdin".

* kn/clarify-update-ref-doc:
  githooks: use {old,new}-oid instead of {old,new}-value
  update-ref: use {old,new}-oid instead of {old,new}value

2 weeks agoMerge branch 'vs/complete-with-set-u-fix'
Junio C Hamano [Wed, 10 Apr 2024 17:00:08 +0000 (10 10:00 -0700)]
Merge branch 'vs/complete-with-set-u-fix'

Another "set -u" fix for the bash prompt (in contrib/) script.

* vs/complete-with-set-u-fix:
  completion: protect prompt against unset SHOWUPSTREAM in nounset mode
  completion: fix prompt with unset SHOWCONFLICTSTATE in nounset mode

2 weeks agoMerge branch 'rs/mem-pool-size-t-safety'
Junio C Hamano [Wed, 10 Apr 2024 17:00:08 +0000 (10 10:00 -0700)]
Merge branch 'rs/mem-pool-size-t-safety'

size_t arithmetic safety.

* rs/mem-pool-size-t-safety:
  mem-pool: use st_add() in mem_pool_strvfmt()

2 weeks agoMerge branch 'ds/typofix-core-config-doc'
Junio C Hamano [Wed, 10 Apr 2024 17:00:08 +0000 (10 10:00 -0700)]
Merge branch 'ds/typofix-core-config-doc'

Typofix.

* ds/typofix-core-config-doc:
  config: fix some small capitalization issues, as spotted

2 weeks agot9604: Fix test for musl libc and new Debian
Đoàn Trần Công Danh [Wed, 10 Apr 2024 03:28:12 +0000 (10 10:28 +0700)]
t9604: Fix test for musl libc and new Debian

CST6CDT and the like are POSIX timezone, with no rule for transition.
And POSIX doesn't enforce how to interpret the rule if it's omitted.
Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
Other libc (e.g. musl) interpret that as no transition at all [1].

In addition, distributions (notoriously Debian-derived, which uses IANA
db for CST6CDT and the like) started to split "legacy" timezones
like CST6CDT, EST5EDT into `tzdata-legacy', which will not be installed
by default [2].

In those cases, t9604 will run into failure.

Let's switch to POSIX timezone with rules to change timezone.

1: http://mm.icann.org/pipermail/tz/2024-March/058751.html
2: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1043250

Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agot2104: style fixes
Junio C Hamano [Tue, 2 Apr 2024 18:41:03 +0000 (2 11:41 -0700)]
t2104: style fixes

We use tabs to indent, not two or four spaces.

These days, even the test fixture preparation should be done inside
test_expect_success block.

Address these two style violations in this test.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agot3428: restore coverage for "apply" backend
Phillip Wood [Tue, 9 Apr 2024 15:27:24 +0000 (9 15:27 +0000)]
t3428: restore coverage for "apply" backend

This test file assumes the "apply" backend is the default which is not
the case since 2ac0d6273f (rebase: change the default backend from "am"
to "merge", 2020-02-15). Make sure the "apply" backend is tested by
specifying it explicitly.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agot3428: use test_commit_message
Phillip Wood [Tue, 9 Apr 2024 15:27:23 +0000 (9 15:27 +0000)]
t3428: use test_commit_message

Using a helper function makes the tests shorter and avoids running "git
cat-file" upstream of a pipe.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agot3428: modernize test setup
Phillip Wood [Tue, 9 Apr 2024 15:27:22 +0000 (9 15:27 +0000)]
t3428: modernize test setup

Perform the setup in a dedicated test so the later tests can be run
independently. Also avoid running git upstream of a pipe and take
advantage of test_commit.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoThe sixteenth batch
Junio C Hamano [Tue, 9 Apr 2024 21:31:31 +0000 (9 14:31 -0700)]
The sixteenth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 weeks agoMerge branch 'rj/use-adv-if-enabled'
Junio C Hamano [Tue, 9 Apr 2024 21:31:45 +0000 (9 14:31 -0700)]
Merge branch 'rj/use-adv-if-enabled'

Use advice_if_enabled() API to rewrite a simple pattern to
call advise() after checking advice_enabled().

* rj/use-adv-if-enabled:
  add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO
  add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC
  add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE

2 weeks agoMerge branch 'ps/pack-refs-auto'
Junio C Hamano [Tue, 9 Apr 2024 21:31:45 +0000 (9 14:31 -0700)]
Merge branch 'ps/pack-refs-auto'

"git pack-refs" learned the "--auto" option, which is a useful
addition to be triggered from "git gc --auto".

Acked-by: Karthik Nayak <karthik.188@gmail.com>
cf. <CAOLa=ZRAEA7rSUoYL0h-2qfEELdbPHbeGpgBJRqesyhHi9Q6WQ@mail.gmail.com>

* ps/pack-refs-auto:
  builtin/gc: pack refs when using `git maintenance run --auto`
  builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
  t6500: extract objects with "17" prefix
  builtin/gc: move `struct maintenance_run_opts`
  builtin/pack-refs: introduce new "--auto" flag
  builtin/pack-refs: release allocated memory
  refs/reftable: expose auto compaction via new flag
  refs: remove `PACK_REFS_ALL` flag
  refs: move `struct pack_refs_opts` to where it's used
  t/helper: drop pack-refs wrapper
  refs/reftable: print errors on compaction failure
  reftable/stack: gracefully handle failed auto-compaction due to locks
  reftable/stack: use error codes when locking fails during compaction
  reftable/error: discern locked/outdated errors
  reftable/stack: fix error handling in `reftable_stack_init_addition()`

2 weeks agoMerge branch 'es/test-cron-safety'
Junio C Hamano [Tue, 9 Apr 2024 21:31:44 +0000 (9 14:31 -0700)]
Merge branch 'es/test-cron-safety'

The test script had an incomplete and ineffective attempt to avoid
clobbering the testing user's real crontab (and its equivalents),
which has been completed.

* es/test-cron-safety:
  test-lib: fix non-functioning GIT_TEST_MAINT_SCHEDULER fallback

2 weeks agoMerge branch 'rj/add-p-explicit-reshow'
Junio C Hamano [Tue, 9 Apr 2024 21:31:44 +0000 (9 14:31 -0700)]
Merge branch 'rj/add-p-explicit-reshow'

"git add -p" and other "interactive hunk selection" UI has learned to
skip showing the hunk immediately after it has already been shown, and
an additional action to explicitly ask to reshow the current hunk.

* rj/add-p-explicit-reshow:
  add-patch: do not print hunks repeatedly
  add-patch: introduce 'p' in interactive-patch

2 weeks agoMerge branch 'mg/editorconfig-makefile'
Junio C Hamano [Tue, 9 Apr 2024 21:31:44 +0000 (9 14:31 -0700)]
Merge branch 'mg/editorconfig-makefile'

The .editorconfig file has been taught that a Makefile uses HT
indentation.

* mg/editorconfig-makefile:
  editorconfig: add Makefiles to "text files"

2 weeks agoMerge branch 'ja/doc-markup-updates'
Junio C Hamano [Tue, 9 Apr 2024 21:31:44 +0000 (9 14:31 -0700)]
Merge branch 'ja/doc-markup-updates'

Documentation rules has been explicitly described how to mark-up
literal parts and a few manual pages have been updated as examples.

* ja/doc-markup-updates:
  doc: git-clone: do not autoreference the manpage in itself
  doc: git-clone: apply new documentation formatting guidelines
  doc: git-init: apply new documentation formatting guidelines
  doc: allow literal and emphasis format in doc vs help tests
  doc: rework CodingGuidelines with new formatting rules