https://github.com/git/git

sort by:
Revision Author Date Message Commit Date
0d464a4 Git 2.43.3 Signed-off-by: Junio C Hamano <gitster@pobox.com> 23 February 2024, 00:13:38 UTC
5dc7366 Merge branch 'la/trailer-cleanups' into maint-2.43 * la/trailer-cleanups: trailer: fix comment/cut-line regression with opts->no_divider 23 February 2024, 00:09:45 UTC
bc47139 trailer: fix comment/cut-line regression with opts->no_divider Commit 97e9d0b78a (trailer: find the end of the log message, 2023-10-20) combined two code paths for finding the end of the log message. For the "no_divider" case, we used to use find_trailer_end(), and that has now been rolled into find_end_of_log_message(). But there's a regression; that function returns early when no_divider is set, returning the whole string. That's not how find_trailer_end() behaved. Although it did skip the "---" processing (which is what "no_divider" is meant to do), we should still respect ignored_log_message_bytes(), which covers things like comments, "commit -v" cut lines, and so on. The bug is actually in the interpret-trailers command, but the obvious way to experience it is by running "commit -v" with a "--trailer" option. The new trailer will be added at the end of the verbose diff, rather than before it (and consequently will be ignored entirely, since everything after the diff's intro scissors line is thrown away). I've added two tests here: one for interpret-trailers directly, which shows the bug via the parsing routines, and one for "commit -v". The fix itself is pretty simple: instead of returning early, no_divider just skips the "---" handling but still calls ignored_log_message_bytes(). Reported-by: Philippe Blain <levraiphilippeblain@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 February 2024, 03:06:18 UTC
efb050b Git 2.43.2 Signed-off-by: Junio C Hamano <gitster@pobox.com> 13 February 2024, 22:44:51 UTC
dc55772 Merge branch 'pb/template-for-single-commit-pr' into maint-2.43 Doc update. * pb/template-for-single-commit-pr: .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs 13 February 2024, 22:44:51 UTC
1e73351 Merge branch 'jc/bisect-doc' into maint-2.43 Doc update. * jc/bisect-doc: bisect: document command line arguments for "bisect start" bisect: document "terms" subcommand more fully 13 February 2024, 22:44:51 UTC
8d792dc Merge branch 'js/win32-retry-pipe-write-on-enospc' into maint-2.43 Update to the code that writes to pipes on Windows. * js/win32-retry-pipe-write-on-enospc: win32: special-case `ENOSPC` when writing to a pipe 13 February 2024, 22:44:51 UTC
08b7e46 Merge branch 'tb/pack-bitmap-drop-unused-struct-member' into maint-2.43 Code clean-up. * tb/pack-bitmap-drop-unused-struct-member: pack-bitmap: drop unused `reuse_objects` 13 February 2024, 22:44:51 UTC
8f1c4a7 Merge branch 'jt/p4-spell-re-with-raw-string' into maint-2.43 "git p4" update to squelch warnings from Python. * jt/p4-spell-re-with-raw-string: git-p4: use raw string literals for regular expressions 13 February 2024, 22:44:50 UTC
b6fdf92 Merge branch 'jc/coc-whitespace-fix' into maint-2.43 Docfix. * jc/coc-whitespace-fix: CoC: whitespace fix 13 February 2024, 22:44:50 UTC
81e3eea Merge branch 'sd/negotiate-trace-fix' into maint-2.43 Tracing fix. * sd/negotiate-trace-fix: push: region_leave trace for negotiate_using_fetch 13 February 2024, 22:44:50 UTC
05a9617 Merge branch 'jc/majordomo-to-subspace' into maint-2.43 Doc update. * jc/majordomo-to-subspace: Docs: majordomo@vger.kernel.org has been decomissioned 13 February 2024, 22:44:50 UTC
f2e7998 Merge branch 'nb/rebase-x-shell-docfix' into maint-2.43 Doc update. * nb/rebase-x-shell-docfix: rebase: fix documentation about used shell in -x 13 February 2024, 22:44:49 UTC
2928250 Merge branch 'la/strvec-comment-fix' into maint-2.43 Comment fix. * la/strvec-comment-fix: strvec: use correct member name in comments 13 February 2024, 22:44:49 UTC
5193aee Merge branch 'ne/doc-filter-blob-limit-fix' into maint-2.43 Docfix. * ne/doc-filter-blob-limit-fix: rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer 13 February 2024, 22:44:49 UTC
7687ca5 Merge branch 'cp/git-flush-is-an-env-bool' into maint-2.43 Recent conversion to allow more than 0/1 in GIT_FLUSH broke the mechanism by flipping what yes/no means by mistake, which has been corrected. * cp/git-flush-is-an-env-bool: write-or-die: fix the polarity of GIT_FLUSH environment variable 13 February 2024, 22:44:49 UTC
bd10c45 Merge branch 'ps/report-failure-from-git-stash' into maint-2.43 "git stash" sometimes was silent even when it failed due to unwritable index file, which has been corrected. * ps/report-failure-from-git-stash: builtin/stash: report failure to write to index 13 February 2024, 22:44:49 UTC
07fa383 Merge branch 'jc/sign-buffer-failure-propagation-fix' into maint-2.43 A failed "git tag -s" did not necessarily result in an error depending on the crypto backend, which has been corrected. * jc/sign-buffer-failure-propagation-fix: ssh signing: signal an error with a negative return value tag: fix sign_buffer() call to create a signed tag 13 February 2024, 22:44:48 UTC
a1cd814 Merge branch 'jc/comment-style-fixes' into maint-2.43 Rewrite //-comments to /* comments */ in files whose comments prevalently use the latter. * jc/comment-style-fixes: reftable/pq_test: comment style fix merge-ort.c: comment style fix builtin/worktree: comment style fixes 13 February 2024, 22:44:48 UTC
5071cb7 Merge branch 'jk/diff-external-with-no-index' into maint-2.43 "git diff --no-index file1 file2" segfaulted while invoking the external diff driver, which has been corrected. * jk/diff-external-with-no-index: diff: handle NULL meta-info when spawning external diff 13 February 2024, 22:44:48 UTC
d982de5 Merge branch 'rs/parse-options-with-keep-unknown-abbrev-fix' into maint-2.43 "git diff --no-rename A B" did not disable rename detection but did not trigger an error from the command line parser. * rs/parse-options-with-keep-unknown-abbrev-fix: parse-options: simplify positivation handling parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN 13 February 2024, 22:44:48 UTC
904ca69 Merge branch 'en/diffcore-delta-final-line-fix' into maint-2.43 Rename detection logic ignored the final line of a file if it is an incomplete line. * en/diffcore-delta-final-line-fix: diffcore-delta: avoid ignoring final 'line' of file 13 February 2024, 22:44:48 UTC
908fde1 Merge branch 'tc/show-ref-exists-fix' into maint-2.43 Update to a new feature recently added, "git show-ref --exists". * tc/show-ref-exists-fix: builtin/show-ref: treat directory as non-existing in --exists 13 February 2024, 22:44:47 UTC
b40ba17 write-or-die: fix the polarity of GIT_FLUSH environment variable When GIT_FLUSH is set to 1, true, on, yes, then we should disable skip_stdout_flush, but the conversion somehow did the opposite. With the understanding of the original motivation behind "skip" in 06f59e9f (Don't fflush(stdout) when it's not helpful, 2007-06-29), we can sympathize with the current naming (we wanted to avoid useless flushing of stdout by default, with an escape hatch to always flush), but it is still not a good excuse. Retire the "skip_stdout_flush" variable and replace it with "flush_stdout" that tells if we do or do not want to run fflush(). Reported-by: Xiaoguang WANG <wxiaoguang@gmail.com> Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com> 13 February 2024, 19:57:28 UTC
7adf215 Merge branch 'pb/imap-send-wo-curl-build-fix' into maint-2.43 * pb/imap-send-wo-curl-build-fix: imap-send: add missing "strbuf.h" include under NO_CURL 12 February 2024, 17:57:59 UTC
3526e67 Git 2.43.1 Signed-off-by: Junio C Hamano <gitster@pobox.com> 09 February 2024, 00:22:12 UTC
963eda2 Merge branch 'ib/rebase-reschedule-doc' into maint-2.43 Doc update. * ib/rebase-reschedule-doc: rebase: clarify --reschedule-failed-exec default 09 February 2024, 00:22:12 UTC
a064af6 Merge branch 'jk/index-pack-lsan-false-positive-fix' into maint-2.43 Fix false positive reported by leak sanitizer. * jk/index-pack-lsan-false-positive-fix: index-pack: spawn threads atomically 09 February 2024, 00:22:12 UTC
16a830f Merge branch 'cp/sideband-array-index-comment-fix' into maint-2.43 In-code comment fix. * cp/sideband-array-index-comment-fix: sideband.c: remove redundant 'NEEDSWORK' tag 09 February 2024, 00:22:12 UTC
d690c8e Merge branch 'ms/rebase-insnformat-doc-fix' into maint-2.43 Docfix. * ms/rebase-insnformat-doc-fix: Documentation: fix statement about rebase.instructionFormat 09 February 2024, 00:22:12 UTC
5b49c1a Merge branch 'jx/sideband-chomp-newline-fix' into maint-2.43 Sideband demultiplexer fixes. * jx/sideband-chomp-newline-fix: pkt-line: do not chomp newlines for sideband messages pkt-line: memorize sideband fragment in reader test-pkt-line: add option parser for unpack-sideband 09 February 2024, 00:22:11 UTC
fb3ead6 Merge branch 'jk/t1006-cat-file-objectsize-disk' into maint-2.43 Test update. * jk/t1006-cat-file-objectsize-disk: t1006: prefer shell loop to awk for packed object sizes t1006: add tests for %(objectsize:disk) 09 February 2024, 00:22:11 UTC
5a322a2 Merge branch 'js/contributor-docs-updates' into maint-2.43 Doc update. * js/contributor-docs-updates: SubmittingPatches: hyphenate non-ASCII SubmittingPatches: clarify GitHub artifact format SubmittingPatches: clarify GitHub visual SubmittingPatches: provide tag naming advice SubmittingPatches: update extra tags list SubmittingPatches: discourage new trailers SubmittingPatches: drop ref to "What's in git.git" CodingGuidelines: write punctuation marks CodingGuidelines: move period inside parentheses 09 February 2024, 00:22:11 UTC
232953b Merge branch 'rs/fast-import-simplify-mempool-allocation' into maint-2.43 Code simplification. * rs/fast-import-simplify-mempool-allocation: fast-import: use mem_pool_calloc() 09 February 2024, 00:22:11 UTC
0f7a10a Merge branch 'en/header-cleanup' into maint-2.43 Remove unused header "#include". * en/header-cleanup: treewide: remove unnecessary includes in source files treewide: add direct includes currently only pulled in transitively trace2/tr2_tls.h: remove unnecessary include submodule-config.h: remove unnecessary include pkt-line.h: remove unnecessary include line-log.h: remove unnecessary include http.h: remove unnecessary include fsmonitor--daemon.h: remove unnecessary includes blame.h: remove unnecessary includes archive.h: remove unnecessary include treewide: remove unnecessary includes in source files treewide: remove unnecessary includes from header files 09 February 2024, 00:22:10 UTC
3aea0da Merge branch 'ml/doc-merge-updates' into maint-2.43 Doc update. * ml/doc-merge-updates: Documentation/git-merge.txt: use backticks for command wrapping Documentation/git-merge.txt: fix reference to synopsis 09 February 2024, 00:22:10 UTC
974c936 Merge branch 'jc/orphan-unborn' into maint-2.43 Doc updates to clarify what an "unborn branch" means. * jc/orphan-unborn: orphan/unborn: fix use of 'orphan' in end-user facing messages orphan/unborn: add to the glossary and use them consistently 09 February 2024, 00:22:10 UTC
541d0d7 Merge branch 'la/trailer-cleanups' into maint-2.43 Code clean-up. * la/trailer-cleanups: trailer: use offsets for trailer_start/trailer_end trailer: find the end of the log message commit: ignore_non_trailer computes number of bytes to ignore 09 February 2024, 00:22:09 UTC
edf4c0d Merge branch 'jc/retire-cas-opt-name-constant' into maint-2.43 Code clean-up. * jc/retire-cas-opt-name-constant: remote.h: retire CAS_OPT_NAME 09 February 2024, 00:22:09 UTC
2873a96 Merge branch 'rs/rebase-use-strvec-pushf' into maint-2.43 Code clean-up. * rs/rebase-use-strvec-pushf: rebase: use strvec_pushf() for format-patch revisions 09 February 2024, 00:22:09 UTC
f5fa75a Merge branch 'rs/t6300-compressed-size-fix' into maint-2.43 Test fix. * rs/t6300-compressed-size-fix: t6300: avoid hard-coding object sizes 09 February 2024, 00:22:09 UTC
bb58c03 Merge branch 'sp/test-i18ngrep' into maint-2.43 Error message fix in the test framework. * sp/test-i18ngrep: test-lib-functions.sh: fix test_grep fail message wording 09 February 2024, 00:22:08 UTC
a1121a7 Merge branch 'jc/doc-misspelt-refs-fix' into maint-2.43 Doc update. * jc/doc-misspelt-refs-fix: doc: format.notes specify a ref under refs/notes/ hierarchy 09 February 2024, 00:22:08 UTC
79f79e5 Merge branch 'jc/doc-most-refs-are-not-that-special' into maint-2.43 Doc updates. * jc/doc-most-refs-are-not-that-special: docs: MERGE_AUTOSTASH is not that special docs: AUTO_MERGE is not that special refs.h: HEAD is not that special git-bisect.txt: BISECT_HEAD is not that special git.txt: HEAD is not that special 09 February 2024, 00:22:08 UTC
7b95c64 Merge branch 'es/add-doc-list-short-form-of-all-in-synopsis' into maint-2.43 Doc update. * es/add-doc-list-short-form-of-all-in-synopsis: git-add.txt: add missing short option -A to synopsis 09 February 2024, 00:22:08 UTC
b1184c3 Merge branch 'ps/chainlint-self-check-update' into maint-2.43 Test framework update. * ps/chainlint-self-check-update: tests: adjust whitespace in chainlint expectations 09 February 2024, 00:22:07 UTC
546f8d2 Merge branch 'ps/reftable-fixes' into maint-2.43 Bunch of small fix-ups to the reftable code. * ps/reftable-fixes: reftable/block: reuse buffer to compute record keys reftable/block: introduce macro to initialize `struct block_iter` reftable/merged: reuse buffer to compute record keys reftable/stack: fix use of unseeded randomness reftable/stack: fix stale lock when dying reftable/stack: reuse buffers when reloading stack reftable/stack: perform auto-compaction with transactional interface reftable/stack: verify that `reftable_stack_add()` uses auto-compaction reftable: handle interrupted writes reftable: handle interrupted reads reftable: wrap EXPECT macros in do/while 09 February 2024, 00:22:07 UTC
b471ea3 Merge branch 'jk/config-cleanup' into maint-2.43 Code clean-up around use of configuration variables. * jk/config-cleanup: sequencer: simplify away extra git_config_string() call gpg-interface: drop pointless config_error_nonbool() checks push: drop confusing configset/callback redundancy config: use git_config_string() for core.checkRoundTripEncoding diff: give more detailed messages for bogus diff.* config config: use config_error_nonbool() instead of custom messages imap-send: don't use git_die_config() inside callback git_xmerge_config(): prefer error() to die() config: reject bogus values for core.checkstat 09 February 2024, 00:22:07 UTC
6479e12 Merge branch 'rs/incompatible-options-messages' into maint-2.43 Clean-up code that handles combinations of incompatible options. * rs/incompatible-options-messages: worktree: simplify incompatibility message for --orphan and commit-ish worktree: standardize incompatibility messages clean: factorize incompatibility message revision, rev-parse: factorize incompatibility messages about - -exclude-hidden revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs repack: use die_for_incompatible_opt3() for -A/-k/--cruft push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror 09 February 2024, 00:22:06 UTC
1dbc469 Merge branch 'mk/doc-gitfile-more' into maint-2.43 Doc update. * mk/doc-gitfile-more: doc: make the gitfile syntax easier to discover 09 February 2024, 00:22:06 UTC
67bb8ff Merge branch 'ps/ref-tests-update-more' into maint-2.43 Tests update. * ps/ref-tests-update-more: t6301: write invalid object ID via `test-tool ref-store` t5551: stop writing packed-refs directly t5401: speed up creation of many branches t4013: simplify magic parsing and drop "failure" t3310: stop checking for reference existence via `test -f` t1417: make `reflog --updateref` tests backend agnostic t1410: use test-tool to create empty reflog t1401: stop treating FETCH_HEAD as real reference t1400: split up generic reflog tests from the reffile-specific ones t0410: mark tests to require the reffiles backend 09 February 2024, 00:22:06 UTC
a7ea468 Merge branch 'rs/column-leakfix' into maint-2.43 Leakfix. * rs/column-leakfix: column: release strbuf and string_list after use 09 February 2024, 00:22:06 UTC
25e2039 Merge branch 'rs/i18n-cannot-be-used-together' into maint-2.43 Clean-up code that handles combinations of incompatible options. * rs/i18n-cannot-be-used-together: i18n: factorize even more 'incompatible options' messages 09 February 2024, 00:22:05 UTC
173d774 Merge branch 'jb/reflog-expire-delete-dry-run-options' into maint-2.43 Command line parsing fix for "git reflog". * jb/reflog-expire-delete-dry-run-options: builtin/reflog.c: fix dry-run option short name 09 February 2024, 00:22:05 UTC
bcab40f Merge branch 'js/packfile-h-typofix' into maint-2.43 Typofix. * js/packfile-h-typofix: packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration 09 February 2024, 00:22:05 UTC
1685e9f Merge branch 'jk/commit-graph-slab-clear-fix' into maint-2.43 Clearing in-core repository (happens during e.g., "git fetch --recurse-submodules" with commit graph enabled) made in-core commit object in an inconsistent state by discarding the necessary data from commit-graph too early, which has been corrected. * jk/commit-graph-slab-clear-fix: commit-graph: retain commit slab when closing NULL commit_graph 09 February 2024, 00:22:05 UTC
3c2ee13 Merge branch 'cp/git-flush-is-an-env-bool' into maint-2.43 Unlike other environment variables that took the usual true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1, which has been corrected. * cp/git-flush-is-an-env-bool: write-or-die: make GIT_FLUSH a Boolean environment variable 09 February 2024, 00:22:04 UTC
8566311 Merge branch 'jc/sparse-checkout-set-default-fix' into maint-2.43 "git sparse-checkout set" added default patterns even when the patterns are being fed from the standard input, which has been corrected. * jc/sparse-checkout-set-default-fix: sparse-checkout: use default patterns for 'set' only !stdin 09 February 2024, 00:22:04 UTC
878f8c4 Merge branch 'jc/archive-list-with-extra-args' into maint-2.43 "git archive --list extra garbage" silently ignored excess command line parameters, which has been corrected. * jc/archive-list-with-extra-args: archive: "--list" does not take further options 09 February 2024, 00:22:04 UTC
a593e2f Merge branch 'rj/status-bisect-while-rebase' into maint-2.43 "git status" is taught to show both the branch being bisected and being rebased when both are in effect at the same time. cf. <xmqqil76kyov.fsf@gitster.g> * rj/status-bisect-while-rebase: status: fix branch shown when not only bisecting 09 February 2024, 00:22:04 UTC
8f7cc56 Merge branch 'sh/completion-with-reftable' into maint-2.43 Command line completion script (in contrib/) learned to work better with the reftable backend. * sh/completion-with-reftable: completion: support pseudoref existence checks for reftables completion: refactor existence checks for pseudorefs 09 February 2024, 00:22:04 UTC
ce54593 Merge branch 'jx/fetch-atomic-error-message-fix' into maint-2.43 "git fetch --atomic" issued an unnecessary empty error message, which has been corrected. cf. <ZX__e7VjyLXIl-uV@tanuki> * jx/fetch-atomic-error-message-fix: fetch: no redundant error message for atomic fetch t5574: test porcelain output of atomic fetch 09 February 2024, 00:22:03 UTC
0e92593 Merge branch 'jk/mailinfo-iterative-unquote-comment' into maint-2.43 The code to parse the From e-mail header has been updated to avoid recursion. * jk/mailinfo-iterative-unquote-comment: mailinfo: avoid recursion when unquoting From headers t5100: make rfc822 comment test more careful mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair() 09 February 2024, 00:22:03 UTC
952916f Merge branch 'rs/show-ref-incompatible-options' into maint-2.43 Code clean-up for sanity checking of command line options for "git show-ref". * rs/show-ref-incompatible-options: show-ref: use die_for_incompatible_opt3() 09 February 2024, 00:22:03 UTC
28b4745 Merge branch 'jk/implicit-true' into maint-2.43 Some codepaths did not correctly parse configuration variables specified with valueless "true", which has been corrected. * jk/implicit-true: fsck: handle NULL value when parsing message config trailer: handle NULL value when parsing trailer-specific config submodule: handle NULL value when parsing submodule.*.branch help: handle NULL value for alias.* config trace2: handle NULL values in tr2_sysenv config callback setup: handle NULL value when parsing extensions config: handle NULL value when parsing non-bools 09 February 2024, 00:22:03 UTC
5baedc6 Merge branch 'jk/bisect-reset-fix' into maint-2.43 "git bisect reset" has been taught to clean up state files and refs even when BISECT_START file is gone. * jk/bisect-reset-fix: bisect: always clean on reset 09 February 2024, 00:22:03 UTC
19fa15f Merge branch 'jk/end-of-options' into maint-2.43 "git $cmd --end-of-options --rev -- --path" for some $cmd failed to interpret "--rev" as a rev, and "--path" as a path. This was fixed for many programs like "reset" and "checkout". * jk/end-of-options: parse-options: decouple "--end-of-options" and "--" 09 February 2024, 00:22:02 UTC
4b50f86 Merge branch 'jc/revision-parse-int' into maint-2.43 The command line parser for the "log" family of commands was too loose when parsing certain numbers, e.g., silently ignoring the extra 'q' in "git log -n 1q" without complaining, which has been tightened up. * jc/revision-parse-int: revision: parse integer arguments to --max-count, --skip, etc., more carefully 09 February 2024, 00:22:02 UTC
7c05241 Merge branch 'jp/use-diff-index-in-pre-commit-sample' into maint-2.43 The sample pre-commit hook that tries to catch introduction of new paths that use potentially non-portable characters did not notice an existing path getting renamed to such a problematic path, when rename detection was enabled. * jp/use-diff-index-in-pre-commit-sample: hooks--pre-commit: detect non-ASCII when renaming 09 February 2024, 00:22:02 UTC
13031f6 Merge branch 'jh/trace2-redact-auth' into maint-2.43 trace2 streams used to record the URLs that potentially embed authentication material, which has been corrected. * jh/trace2-redact-auth: t0212: test URL redacting in EVENT format t0211: test URL redacting in PERF format trace2: redact passwords from https:// URLs by default trace2: fix signature of trace2_def_param() macro 09 February 2024, 00:22:01 UTC
efbae05 Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 Stale URLs have been updated to their current counterparts (or archive.org) and HTTP links are replaced with working HTTPS links. * js/update-urls-in-doc-and-comment: doc: refer to internet archive doc: update links for andre-simon.de doc: switch links to https doc: update links to current pages 09 February 2024, 00:22:01 UTC
50b8f51 Merge branch 'ps/commit-graph-less-paranoid' into maint-2.43 Earlier we stopped relying on commit-graph that (still) records information about commits that are lost from the object store, which has negative performance implications. The default has been flipped to disable this pessimization. * ps/commit-graph-less-paranoid: commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default 09 February 2024, 00:22:01 UTC
f8e2ad9 Merge branch 'tz/send-email-negatable-options' into maint-2.43 Newer versions of Getopt::Long started giving warnings against our (ab)use of it in "git send-email". Bump the minimum version requirement for Perl to 5.8.1 (from September 2002) to allow simplifying our implementation. * tz/send-email-negatable-options: send-email: avoid duplicate specification warnings perl: bump the required Perl version to 5.8.1 from 5.8.0 09 February 2024, 00:22:01 UTC
c8bcf66 Merge branch 'js/ci-discard-prove-state' into maint-2.43 The way CI testing used "prove" could lead to running the test suite twice needlessly, which has been corrected. * js/ci-discard-prove-state: ci: avoid running the test suite _twice_ ci: add support for GitLab CI ci: install test dependencies for linux-musl ci: squelch warnings when testing with unusable Git repo ci: unify setup of some environment variables ci: split out logic to set up failed test artifacts ci: group installation of Docker dependencies ci: make grouping setup more generic ci: reorder definitions for grouping functions 09 February 2024, 00:22:00 UTC
6931049 ssh signing: signal an error with a negative return value The other backend for the sign_buffer() function followed our usual "an error is signalled with a negative return" convention, but the SSH signer did not. Even though we already fixed the caller that assumed only a negative return value is an error, tighten the callee to signal an error with a negative return as well. This way, the callees will be strict on what they produce, while the callers will be lenient in what they accept. Signed-off-by: Junio C Hamano <gitster@pobox.com> 08 February 2024, 05:31:42 UTC
841dbd4 bisect: document command line arguments for "bisect start" The syntax commonly used for alternatives is --opt-(a|b), not --opt-{a,b}. List bad/new and good/old consistently in this order, to be consistent with the description for "git bisect terms". Clarify <term> to either <term-old> or <term-new> to make them consistent with the description of "git bisect (good|bad)" subcommands. Suggested-by: Matthieu Moy <git@matthieu-moy.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com> 07 February 2024, 21:46:01 UTC
47ac5f6 bisect: document "terms" subcommand more fully The documentation for "git bisect terms", although it did not hide any information, was a bit incomplete and forced readers to fill in the blanks to get the complete picture. Acked-by: Matthieu Moy <git@matthieu-moy.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com> 07 February 2024, 21:46:01 UTC
abfbff6 tag: fix sign_buffer() call to create a signed tag The command "git tag -s" internally calls sign_buffer() to make a cryptographic signature using the chosen backend like GPG and SSH. The internal helper functions used by "git tag" implementation seem to use a "negative return values are errors, zero or positive return values are not" convention, and there are places (e.g., verify_tag() that calls gpg_verify_tag()) that these internal helper functions translate return values that signal errors to conform to this convention, but do_sign() that calls sign_buffer() forgets to do so. Fix it, so that a failed call to sign_buffer() that can return the exit status from pipe_command() will not be overlooked. Reported-by: Sergey Kosukhin <skosukhin@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 07 February 2024, 18:47:25 UTC
78307f1 .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs Contributors using Gitgitgadget continue to send single-commit PRs with their commit message text duplicated below the three-dash line, increasing the signal-to-noise ratio for reviewers. This is because Gitgitgadget copies the pull request description as an in-patch commentary, for single-commit PRs, and _GitHub_ defaults to prefilling the pull request description with the commit message, for single-commit PRs (followed by the content of the pull request template). Add a note in the pull request template mentioning that for single-commit PRs, the PR description should thus be kept empty, in the hope that contributors read it and act on it. This partly addresses: https://github.com/gitgitgadget/gitgitgadget/issues/340 Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 06 February 2024, 20:22:55 UTC
d2058cb builtin/stash: report failure to write to index The git-stash(1) command needs to write to the index for many of its operations. When the index is locked by a concurrent writer it will thus fail to operate, which is expected. What is not expected though is that we do not print any error message at all in this case. The user can thus easily miss the fact that the command didn't do what they expected it to do and would be left wondering why that is. Fix this bug and report failures to write to the index. Add tests for the subcommands which hit the respective code paths. While at it, unify error messages when writing to the index fails. The chosen error message is already used in "builtin/stash.c". Reported-by: moti sd <motisd8@gmail.com> Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com> 06 February 2024, 20:08:38 UTC
30bced3 imap-send: add missing "strbuf.h" include under NO_CURL Building with NO_CURL is currently broken since imap-send.c uses things defined in "strbuf.h" wihtout including it. The inclusion of that header was removed in eea0e59ffb (treewide: remove unnecessary includes in source files, 2023-12-23), which failed to notice that "strbuf.h" was transitively included in imap-send.c via "http.h", but only if USE_CURL_FOR_IMAP_SEND is defined. Add back the missing include. Note that it was explicitely added in 3307f7dde2 (imap-send: include strbuf.h, 2023-05-17) after a similar breakage in ba3d1c73da (treewide: remove unnecessary cache.h includes, 2023-02-24) - see the thread starting at [1]. It can be verified by inspection that this is the only case where a header we include is dependent on a Makefile knob in the files modified in eea0e59ffb. [1] https://lore.kernel.org/git/20230517070632.71884-1-list@eworm.de/ Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 02 February 2024, 02:20:41 UTC
19ed0df win32: special-case `ENOSPC` when writing to a pipe Since c6d3cce6f3c4 (pipe_command(): handle ENOSPC when writing to a pipe, 2022-08-17), one `write()` call that results in an `errno` value `ENOSPC` (which typically indicates out of disk space, which makes little sense in the context of a pipe) is treated the same as `EAGAIN`. However, contrary to expectations, as diagnosed in https://github.com/python/cpython/issues/101881#issuecomment-1428667015, when writing to a non-blocking pipe on Windows, an `errno` value of `ENOSPC` means something else: the write _fails_. Completely. Because more data was provided than the internal pipe buffer can handle. Somewhat surprising, considering that `write()` is allowed to write less than the specified amount, e.g. by writing only as much as fits in that buffer. But it doesn't, it writes no byte at all in that instance. Let's handle this by manually detecting when an `ENOSPC` indicates that a pipe's buffer is smaller than what needs to be written, and re-try using the pipe's buffer size as `size` parameter. It would be plausible to try writing the entire buffer in a loop, feeding pipe buffer-sized chunks, but experiments show that trying to write more than one buffer-sized chunk right after that will immediately fail because the buffer is unlikely to be drained as fast as `write()` could write again. And the whole point of a non-blocking pipe is to be non-blocking. Which means that the logic that determines the pipe's buffer size unfortunately has to be run potentially many times when writing large amounts of data to a non-blocking pipe, as there is no elegant way to cache that information between `write()` calls. It's the best we can do, though, so it has to be good enough. This fix is required to let t3701.60 (handle very large filtered diff) pass with the MSYS2 runtime provided by the MSYS2 project: Without this patch, the failed write would result in an infinite loop. This patch is not required with Git for Windows' variant of the MSYS2 runtime only because Git for Windows added an ugly work-around specifically to avoid a hang in that test case. The diff is slightly chatty because it extends an already-existing conditional that special-cases a _different_ `errno` value for pipes, and because this patch needs to account for the fact that `_get_osfhandle()` potentially overwrites `errno`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 30 January 2024, 21:59:16 UTC
de65079 reftable/pq_test: comment style fix Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 22:08:52 UTC
9d2cdd8 merge-ort.c: comment style fix Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 22:08:52 UTC
777f783 builtin/worktree: comment style fixes Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 22:08:52 UTC
85a9a63 diff: handle NULL meta-info when spawning external diff Running this: $ touch foo bar $ chmod +x foo $ git -c diff.external=echo diff --ext-diff --no-index foo bar results in a segfault. The issue is that run_diff_cmd() passes a NULL "xfrm_msg" variable to run_external_diff(), which feeds it to strvec_push(), causing the segfault. The bug dates back to 82fbf269b9 (run_external_diff: use an argv_array for the command line, 2014-04-19), though it mostly only ever worked accidentally. Before then, we just stuck the NULL pointer into a "const char **" array, so our NULL ended up acting as an extra end-of-argv sentinel (which was OK, because it was the last thing in the array). Curiously, though, this is only a problem with --no-index. We set up xfrm_msg by calling fill_metainfo(). This result may be empty, or may have text like "index 1234..5678\n", "rename from foo\nrename from bar\n", etc. In run_external_diff(), we only look at xfrm_msg if the "other" variable is not NULL. That variable is set when the paths of the two sides of the diff pair aren't the same (in which case the destination path becomes "other"). So normally it would kick in only for a rename, in which case xfrm_msg should not be NULL (it would have the rename information in it). But with a "--no-index" of two blobs, we of course have two different pathnames, and thus end up with a non-NULL "other" filename (which is always just a repeat of the file2-name), but possibly a NULL xfrm_msg. So how to fix it? I have a feeling that --no-index always passing "other" to the external diff command is probably a bug. There was no rename, and the name is always redundant with existing information we pass (and this may even cause us to pass a useless "xfrm_msg" that contains an "index 1234..5678" line). So one option would be to change that behavior. We don't seem to have ever documented the "other" or "xfrm_msg" parameters for external diffs. But I'm not sure what fallout we might have from changing that behavior now. So this patch takes the less-risky option, and simply teaches run_external_diff() to avoid passing xfrm_msg when it's NULL. That makes it agnostic to whether "other" and "xfrm_msg" always come as a pair. It fixes the segfault now, and if we want to change the --no-index "other" behavior on top, it will handle that, too. Reported-by: Wilfred Hughes <me@wilfred.me.uk> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 18:37:44 UTC
36c9c44 pack-bitmap: drop unused `reuse_objects` This variable is no longer used for doing verbatim pack-reuse (or anywhere within pack-bitmap.c) since d2ea031046 (pack-bitmap: don't rely on bitmap_git->reuse_objects, 2019-12-18). Remove it to avoid an unused struct member. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 17:26:17 UTC
9023198 git-p4: use raw string literals for regular expressions Fixes several Python diagnostics about invalid escape sequences. The diagnostics appear for me in Python 3.12, and may appear in earlier versions. The fix is to use raw string literals so that backslashes are not interpreted as introducing escape sequences. Raw string literals are already in use in this file, so adding more does not impact toolchain compatibility. Signed-off-by: James Touton <bekenn@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 29 January 2024, 17:25:16 UTC
976d025 CoC: whitespace fix Fix two lines with trailing whitespaces. Signed-off-by: Junio C Hamano <gitster@pobox.com> 23 January 2024, 18:40:10 UTC
457f962 parse-options: simplify positivation handling We accept the positive version of options whose long name starts with "no-" and are defined without the flag PARSE_OPT_NONEG. E.g. git clone has an explicitly defined --no-checkout option and also implicitly accepts --checkout to override it. parse_long_opt() handles that by restarting the option matching with the positive version when it finds that only the current option definition starts with "no-", but not the user-supplied argument. This code is located almost at the end of the matching logic. Avoid the need for a restart by moving the code up. We don't have to check the positive arg against the negative long_name at all -- the "no-" prefix of the latter makes a match impossible. Skip it and toggle OPT_UNSET right away to simplify the control flow. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 22 January 2024, 15:17:12 UTC
af3d2c1 Docs: majordomo@vger.kernel.org has been decomissioned Update the instruction for subscribing to the Git mailing list we have on a few documentation pages. Reported-by: Kyle Lippincott <spectral@google.com> Helped-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 January 2024, 18:09:07 UTC
5825268 parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN baa4adc66a (parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN, 2019-01-27) turned off support for abbreviated options when the flag PARSE_OPT_KEEP_UNKNOWN is given, as any shortened option could also be an abbreviation for one of the unknown options. The code for handling abbreviated options is guarded by an if, but it can also be reached via goto. baa4adc66a only blocked the first way. Add the condition to the other ones as well. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> 20 January 2024, 17:55:43 UTC
1c5bc69 diffcore-delta: avoid ignoring final 'line' of file hash_chars() would hash lines to integers, and store them in a spanhash, but cut lines at 64 characters. Thus, whenever it reached 64 characters or a newline, it would create a new spanhash. The problem is, the final part of the file might not end 64 characters after the previous 'line' and might not end with a newline. This could, for example, cause an 85-byte file with 12 lines and only the first character in the file differing to appear merely 23% similar rather than the expected 97%. Ensure the last line is included, and add a testcase that would have caught this problem. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 19 January 2024, 03:10:11 UTC
0aabeaa builtin/show-ref: treat directory as non-existing in --exists 9080a7f178 (builtin/show-ref: add new mode to check for reference existence, 2023-10-31) added the option --exists to git-show-ref(1). When you use this option against a ref that doesn't exist, but it is a parent directory of an existing ref, you get the following error: $ git show-ref --exists refs/heads error: failed to look up reference: Is a directory when the ref-files backend is in use. To be more clear to user, hide the error about having found a directory. What matters to the user is that the named ref does not exist. Instead, print the same error as when the ref was not found: error: reference does not exist Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 January 2024, 19:17:25 UTC
f10031f rebase: fix documentation about used shell in -x The shell used when using the -x option is erroneously documented to be the one pointed to by the $SHELL environmental variable. This was true when rebase was implemented as a shell script but this is no longer true. Signed-off-by: Nikolay Borisov <nik.borisov@suse.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 18 January 2024, 00:14:57 UTC
8f50984 rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer '--filter=blob:limit=<n>' was introduced in 25ec7bcac0 (list-objects: filter objects in traverse_commit_list, 2017-11-21) and later expanded to bitmaps in 84243da129 (pack-bitmap: implement BLOB_LIMIT filtering, 2020-02-14) The logic that was introduced in these commits (and that still persists to this day) omits blobs larger than _or equal_ to n bytes or units. However, the documentation (Documentation/rev-list-options.txt) states: >The form '--filter=blob:limit=<n>[kmg]' omits blobs larger than n bytes or units. n may be zero. Moreover, the t6113-rev-list-bitmap-filters.sh tests for exactly this logic, so it seems it is the documentation that needs fixing, not the code. This changes the explanation to be similar to Documentation/git-clone.txt, which is correct. Signed-off-by: Nikolay Edigaryev <edigaryev@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 16 January 2024, 16:53:13 UTC
f10b098 strvec: use correct member name in comments In d70a9eb611 (strvec: rename struct fields, 2020-07-28), we renamed the "argv" member to "v". In the same patch we also did the following rename in strvec.c: -void strvec_pushv(struct strvec *array, const char **argv) +void strvec_pushv(struct strvec *array, const char **items) and it appears that this s/argv/items operation was erroneously applied to strvec.h. Rename "items" to "v". Signed-off-by: Linus Arver <linusa@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 12 January 2024, 21:38:07 UTC
25aec06 rebase: clarify --reschedule-failed-exec default Documentation should mention the default behavior. It is better to explain the persistent nature of the --reschedule-failed-exec flag from the user standpoint, rather than from the implementation standpoint. Signed-off-by: Illia Bobyr <illia.bobyr@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> 05 January 2024, 17:41:25 UTC
993d38a index-pack: spawn threads atomically The t5309 script triggers a racy false positive with SANITIZE=leak on a multi-core system. Running with "--stress --run=6" usually fails within 10 seconds or so for me, complaining with something like: + git index-pack --fix-thin --stdin fatal: REF_DELTA at offset 46 already resolved (duplicate base 01d7713666f4de822776c7622c10f1b07de280dc?) ================================================================= ==3904583==ERROR: LeakSanitizer: detected memory leaks Direct leak of 32 byte(s) in 1 object(s) allocated from: #0 0x7fa790d01986 in __interceptor_realloc ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:98 #1 0x7fa790add769 in __pthread_getattr_np nptl/pthread_getattr_np.c:180 #2 0x7fa790d117c5 in __sanitizer::GetThreadStackTopAndBottom(bool, unsigned long*, unsigned long*) ../../../../src/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp:150 #3 0x7fa790d11957 in __sanitizer::GetThreadStackAndTls(bool, unsigned long*, unsigned long*, unsigned long*, unsigned long*) ../../../../src/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp:598 #4 0x7fa790d03fe8 in __lsan::ThreadStart(unsigned int, unsigned long long, __sanitizer::ThreadType) ../../../../src/libsanitizer/lsan/lsan_posix.cpp:51 #5 0x7fa790d013fd in __lsan_thread_start_func ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:440 #6 0x7fa790adc3eb in start_thread nptl/pthread_create.c:444 #7 0x7fa790b5ca5b in clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 SUMMARY: LeakSanitizer: 32 byte(s) leaked in 1 allocation(s). Aborted What happens is this: 0. We construct a bogus pack with a duplicate object in it and trigger index-pack. 1. We spawn a bunch of worker threads to resolve deltas (on my system it is 16 threads). 2. One of the threads sees the duplicate object and bails by calling exit(), taking down all of the threads. This is expected and is the point of the test. 3. At the time exit() is called, we may still be spawning threads from the main process via pthread_create(). LSan hooks thread creation to update its book-keeping; it has to know where each thread's stack is (so it can find entry points for reachable memory). So it calls pthread_getattr_np() to get information about the new thread. That may allocate memory that must be freed with a matching call to pthread_attr_destroy(). Probably LSan does that immediately, but if you're unlucky enough, the exit() will happen while it's between those two calls, and the allocated pthread_attr_t appears as a leak. This isn't a real leak. It's not even in our code, but rather in the LSan instrumentation code. So we could just ignore it. But the false positive can cause people to waste time tracking it down. It's possibly something that LSan could protect against (e.g., cover the getattr/destroy pair with a mutex, and then in the final post-exit() check for leaks try to take the same mutex). But I don't know enough about LSan to say if that's a reasonable approach or not (or if my analysis is even completely correct). In the meantime, it's pretty easy to avoid the race by making creation of the worker threads "atomic". That is, we'll spawn all of them before letting any of them start to work. That's easy to do because we already have a work_lock() mutex for handing out that work. If the main process takes it, then all of the threads will immediately block until we've finished spawning and released it. This shouldn't make any practical difference for non-LSan runs. The thread spawning is quick, and could happen before any worker thread gets scheduled anyway. Probably other spots that use threads are subject to the same issues. But since we have to manually insert locking (and since this really is kind of a hack), let's not bother with them unless somebody experiences a similar racy false-positive in practice. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 05 January 2024, 16:40:56 UTC
d70f554 commit-graph: retain commit slab when closing NULL commit_graph This fixes a regression introduced in ac6d45d11f (commit-graph: move slab-clearing to close_commit_graph(), 2023-10-03), in which running: git -c fetch.writeCommitGraph=true fetch --recurse-submodules multiple times in a freshly cloned repository causes a segfault. What happens in the second (and subsequent) runs is this: 1. We make a "struct commit" for any ref tips which we're storing (even if we already have them, they still go into FETCH_HEAD). Because the first run will have created a commit graph, we'll find those commits in the graph. The commit struct is therefore created with a NULL "maybe_tree" entry, because we can load its oid from the graph later. But to do that we need to remember that we got the commit from the graph, which is recorded in a global commit_graph_data_slab object. 2. Because we're using --recurse-submodules, we'll try to fetch each of the possible submodules. That implies creating a separate "struct repository" in-process for each submodule, which will require a later call to repo_clear(). The call to repo_clear() calls raw_object_store_clear(), which in turn calls close_object_store(), which in turn calls close_commit_graph(). And the latter frees the commit graph data slab. 3. Later, when trying to write out a new commit graph, we'll ask for their tree oid via get_commit_tree_oid(), which will see that the object is parsed but with a NULL maybe_tree field. We'd then usually pull it from the graph file, but because the slab was cleared, we don't realize that we can do so! We end up returning NULL and segfaulting. (It seems questionable that we'd write a graph entry for such a commit anyway, since we know we already have one. I didn't double-check, but that may simply be another side effect of having cleared the slab). The bug is in step (2) above. We should not be clearing the slab when cleaning up the submodule repository structs. Prior to ac6d45d11f, we did not do so because it was done inside a helper function that returned early when it saw NULL. So the behavior change from that commit is that we'll now _always_ clear the slab via repo_clear(), even if the repository being closed did not have a commit graph (and thus would have a NULL commit_graph struct). The most immediate fix is to add in a NULL check in close_commit_graph(), making it a true noop when passed in an object_store with a NULL commit_graph (it's OK to just return early, since the rest of its code is already a noop when passed NULL). That restores the pre-ac6d45d11f behavior. And that's what this patch does, along with a test that exercises it (we already have a test that uses submodules along with fetch.writeCommitGraph, but the bug only triggers when there is a subsequent fetch and when that fetch uses --recurse-submodules). So that fixes the regression in the least-risky way possible. I do think there's some fragility here that we might want to follow up on. We have a global commit_graph_data_slab that contains graph positions, and our global commit structs depend on the that slab remaining valid. But close_commit_graph() is just about closing _one_ object store's graph. So it's dangerous to call that function and clear the slab without also throwing away any "struct commit" we might have parsed that depends on it. Which at first glance seems like a bug we could already trigger. In the situation described here, there is no commit graph in the submodule repository, so our commit graph is NULL (in fact, in our test script there is no submodule repo at all, so we immediately return from repo_init() and call repo_clear() only to free up memory). But what would happen if there was one? Wouldn't we see a non-NULL commit_graph entry, and then clear the global slab anyway? The answer is "no", but for very bizarre reasons. Remember that repo_clear() calls raw_object_store_clear(), which then calls close_object_store() and thus close_commit_graph(). But before it does so, raw_object_store_clear() does something else: it frees the commit graph and sets it to NULL! So by this code path we'll _never_ see a non-NULL commit_graph struct, and thus never clear the slab. So it happens to work out. But it still seems questionable to me that we would clear a global slab (which might still be in use) when closing the commit graph. This clearing comes from 957ba814bf (commit-graph: when closing the graph, also release the slab, 2021-09-08), and was fixing a case where we really did need it to be closed (and in that case we presumably call close_object_store() more directly). So I suspect there may still be a bug waiting to happen there, as any object loaded before the call to close_object_store() may be stranded with a bogus maybe_tree entry (and thus looking at it after the call might cause an error). But I'm not sure how to trigger it, nor what the fix should look like (you probably would need to "unparse" any objects pulled from the graph). And so this patch punts on that for now in favor of fixing the recent regression in the most direct way, which should not have any other fallouts. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> 05 January 2024, 16:35:26 UTC
back to top