summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorLines
13 daysSync with 'master'nextJunio C Hamano-19/+19
13 daysdoc: fix grammar errors in submodule descriptionHEADmastermainElijah Newren-5/+5
6cc6d1b4c699 (Documentation: update add --force option + ignore=all config, 2026-02-06) added text describing both the ignore=none and ignore=all behaviors. The former had minor formatting and grammatical errors, while the latter was a bit garbled. I have tried to tweak the wording on the latter to make it read as I think was intended, and fixed the minor grammatical issues with both as well. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysdoc: fix singular/plural mismatch in git-rerereElijah Newren-1/+1
conflict -> conflicts Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysdoc: fix plural agreement in pack.preferBitmapTipsElijah Newren-1/+1
hierarchies -> hierarchy Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysdoc: fix self-referential config in sendemail.smtpSSLClientKeyElijah Newren-1/+1
a8215a205141 (send-email: add client certificate options, 2026-03-02) added documentation for sendemail.smtpSSLClientKey that says it works "in conjunction with `sendemail.smtpSSLClientKey`" -- referring to itself. It appears that `sendemail.smtpSSLClientCert` was the intended reference; fix it. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysCodingGuidelines: fix subject-verb agreementElijah Newren-1/+1
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysRelNotes/2.54.0: fix typos and grammarElijah Newren-10/+10
Fix various issues in the release notes -- missing/wrong articles, typo, indentation, quote consistency, and wording improvement or corrections. Other than the indentation fix for "The way combined list-object filter options...", this patch is much easier to view with --color-words. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 daysSync with 'master'Junio C Hamano-0/+0
13 daysMerge branch 'jk/midx-write-v1-by-default'Junio C Hamano-2/+7
As writing version 2 MIDX files by default breaks older versions of Git and its reimplementations, use V2 only when necessary. * jk/midx-write-v1-by-default: MIDX: revert the default version to v1
13 daysMerge branch 'jk/midx-write-v1-by-default' into nextJunio C Hamano-2/+7
As writing version 2 MIDX files by default breaks older versions of Git and its reimplementations, use V2 only when necessary. * jk/midx-write-v1-by-default: MIDX: revert the default version to v1
13 daysMIDX: revert the default version to v1Jeff King-2/+7
We introduced midx version 2 in b2ec8e90c2 (midx: do not require packs to be sorted in lexicographic order, 2026-02-24) and now write it by default. The rationale was that older versions should ignore the v2 midx and fall back to using the packs (just like we do for other midx errors). Unfortunately this is not the case, as we have a hard die() when we see an unknown midx version. As a result, writing a midx with Git 2.54-rc2 puts the repository into a state that is unusable with Git 2.53. And this midx write may happen behind the scenes as part of normal operations, like fetch. Let's switch back to writing v1 by default to avoid regressing the case where multiple versions of Git are used on the same repository. There is one gotcha, though: the v2 format is required for some new features, like midx compaction, and running "git multi-pack-index compact" will complain when asked to write a v1 index. The user must set midx.version to "2" to make the feature work. So instead of always using v1, we'll base the default on whether the requested feature requires v2. That does mean that running midx compaction will create a repository that can't be read by older versions of Git. But we never do that by default; only people experimenting with the new feature will be affected. We have to adjust the test expectation in t5319, since it will now generate v1 files. And our "auto-select v2" is covered by the tests in t5335, which continue to check that compaction works without having to set midx.version manually (and also explicitly check that asking for v1 with compaction reports the problem). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 daysSync with 'master'Junio C Hamano-2/+2
14 dayscodeql: bump actions/cache from 4 to 5Johannes Schindelin-2/+2
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v4...v5) updated-dependencies: - dependency-name: actions/cache dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major Originally-authored-by: dependabot[bot] <support@github.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-14Revert "Merge branch 'hn/git-checkout-m-with-stash' into next"Junio C Hamano-455/+157
This reverts commit b4e5a964fa85a84a9328647486c250706ad6501d, reversing changes made to 0e6c98f313ae3e75cedad7125c9b4ab3ba1065c2, as the topic is still getting rerolled.
2026-04-14Revert "Merge branch 'pt/fsmonitor-linux' into next"Junio C Hamano-1273/+63
This reverts commit 37fa47889d5763ec3876606fb475bb68af9fd90f, reversing changes made to 289fcba08108603e2370294eeff384fb2090ed6a, as the tests in the topic was pointed out to be seriously broken. cf. <ad6hovxCkwMTG11U@szeder.dev>
2026-04-14Sync with Git 2.54-rc2Junio C Hamano-1/+1
2026-04-14Git 2.54-rc2v2.54.0-rc2Junio C Hamano-1/+1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-13Sync with 'master'Junio C Hamano-0/+6
2026-04-13Merge branch 'ar/parallel-hooks' into nextJunio C Hamano-70/+1119
* ar/parallel-hooks: t1800: test SIGPIPE with parallel hooks hook: allow hook.jobs=-1 to use all available CPU cores hook: add hook.<event>.enabled switch hook: move is_known_hook() to hook.c for wider use hook: warn when hook.<friendly-name>.jobs is set hook: add per-event jobs config hook: add -j/--jobs option to git hook run hook: mark non-parallelizable hooks hook: allow pre-push parallel execution hook: allow parallel hook execution hook: parse the hook.jobs config config: add a repo_config_get_uint() helper repository: fix repo_init() memleak due to missing _clear()
2026-04-13Merge branch 'pt/fsmonitor-linux' into nextJunio C Hamano-63/+1273
The fsmonitor daemon has been implemented for Linux. * pt/fsmonitor-linux: fsmonitor: convert shown khash to strset in do_handle_client fsmonitor: add tests for Linux fsmonitor: add timeout to daemon stop command fsmonitor: close inherited file descriptors and detach in daemon run-command: add close_fd_above_stderr option fsmonitor: implement filesystem change listener for Linux fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c fsmonitor: use pthread_cond_timedwait for cookie wait compat/win32: add pthread_cond_timedwait fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon fsmonitor: fix khash memory leak in do_handle_client t9210, t9211: disable GIT_TEST_SPLIT_INDEX for scalar clone tests
2026-04-13Merge branch 'cc/promisor-auto-config-url' into nextJunio C Hamano-111/+238
Promisor remote handling has been refactored and fixed in preparation for auto-configuration of advertised remotes. * cc/promisor-auto-config-url: t5710: use proper file:// URIs for absolute paths promisor-remote: remove the 'accepted' strvec promisor-remote: keep accepted promisor_info structs alive promisor-remote: refactor accept_from_server() promisor-remote: refactor has_control_char() promisor-remote: refactor should_accept_remote() control flow promisor-remote: reject empty name or URL in advertised remote promisor-remote: clarify that a remote is ignored promisor-remote: pass config entry to all_fields_match() directly promisor-remote: try accepted remotes before others in get_direct()
2026-04-13Merge branch 'dl/cache-tree-fully-valid-fix' into nextJunio C Hamano-2/+10
The check that implements the logic to see if an in-core cache-tree is fully ready to write out a tree object was broken, which has been corrected. * dl/cache-tree-fully-valid-fix: cache-tree: fix inverted object existence check in cache_tree_fully_valid
2026-04-13Hopefully the final tweak before -rc2Junio C Hamano-0/+6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-13Merge branch 'jc/ci-github-actions-use-checkout-v5'Junio C Hamano-1/+1
CI dependency updates. * jc/ci-github-actions-use-checkout-v5: CI: bump actions/checkout from 4 to 5 for rust-analysis job
2026-04-13Merge branch 'jk/doc-markup-sub-list-indentation'Junio C Hamano-0/+6
Doc mark-up update for entries in the glossary with bulleted lists. * jk/doc-markup-sub-list-indentation: gitglossary: fix indentation of sub-lists
2026-04-13Merge branch 'kh/doc-am-xref'Junio C Hamano-6/+5
Doc update. * kh/doc-am-xref: doc: am: correct to full --no-message-id doc: am: revert Message-ID trailer claim
2026-04-13Merge branch 'jc/ci-github-actions-use-checkout-v5' into nextJunio C Hamano-1/+1
CI dependency updates. * jc/ci-github-actions-use-checkout-v5: CI: bump actions/checkout from 4 to 5 for rust-analysis job
2026-04-13Merge branch 'jk/doc-markup-sub-list-indentation' into nextJunio C Hamano-0/+6
Doc mark-up update for entries in the glossary with bulleted lists. * jk/doc-markup-sub-list-indentation: gitglossary: fix indentation of sub-lists
2026-04-13gitglossary: fix indentation of sub-listsJeff King-0/+6
The glossary entry is a list of terms and their definitions, so multi-paragraph definitions need "+" continuation lines to indicate that they are part of a single entry. When an entry contains a sub-list (say, a bulleted list), the final "+" may become ambiguous: is it connecting the next paragraph to the final entry of the sub-list, or to the original list of definition paragraphs? Asciidoc generally connects it to the former, even when we mean the latter, and you end up with the next paragraph indented incorrectly, like this: glob ...defines glob... Two consecutive asterisks ("**") in patterns matched against full pathname may have special meaning: - ...some special meaning of **... - ...another special meaning of **... - Other consecutive asterisks are considered invalid. Glob magic is incompatible with literal magic. That final "Glob magic is incompatible" paragraph is in the wrong spot. It should be at the same level as "Two consecutive asterisks", as it is not part of the final "Other consecutive asterisks" bullet point. The same problem appears in several other spots in the glossary. Usually we'd fix this by using "--" markers, which put the sub-list into its own block. But there's a catch: in some of these spots we are already in an open block, and nesting open blocks is a problem. It seems to work for me using Asciidoc 10.2.1, but Asciidoctor 2.0.26 makes a mess of it (our intent to open a new block seems to close the old one). Fortunately there's a work-around: when using a "+" list-continuation, the number of empty lines above the continuation indicates which level of parent list to continue. So by adding an empty line after our unordered list (before the "+"), we should be able to continue the definition list item. But asciidoc being asciidoc, of course that is not the end of the story. That technique works fine for the "glob" and "attr" lists in this patch, but under the "refs" item it works for only 1 of the 2 lists! I can't figure out why, and this may be an asciidoctor bug. But we can work around it by using "--" open-block markers here, since we're not already in an open block. So using the extra blank line for the first two instances, and "--" markers for the second two, this patch produces identical output from "doc-diff HEAD^ HEAD" for both --asciidoctor and --asciidoc modes. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-13CI: bump actions/checkout from 4 to 5 for rust-analysis jobJunio C Hamano-1/+1
GitHub Actions started complaining about use of Node.js 20 and I was wondering why only one job uses actions/checkout@v4, while everybody else already uses actions/checkout@v5. It turns out that it is caused by a semantic mismerge between e75cd059 (ci: check formatting of our Rust code, 2025-10-15) that added a new use of actions/checkout@v4 that happened very close to another change 63541ed9 (build(deps): bump actions/checkout from 4 to 5, 2025-10-16) that updated all uses of actions/checkout@v4 to use vactions/checkout@v5. Update the leftover and the last use of actions/checkout@v4 to use actions/checkout@v5 to help ourselves to move away from Node.js 20. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-13Merge branch 'hn/git-checkout-m-with-stash' into nextJunio C Hamano-157/+455
"git checkout -m another-branch" was invented to deal with local changes to paths that are different between the current and the new branch, but it gave only one chance to resolve conflicts. The command was taught to create a stash to save the local changes. * hn/git-checkout-m-with-stash: checkout: -m (--merge) uses autostash when switching branches sequencer: teach autostash apply to take optional conflict marker labels sequencer: allow create_autostash to run silently stash: add --label-ours, --label-theirs, --label-base for apply
2026-04-13Merge branch 'ja/doc-difftool-synopsis-style' into nextJunio C Hamano-159/+159
Doc mark-up updates. * ja/doc-difftool-synopsis-style: doc: convert git-describe manual page to synopsis style doc: convert git-shortlog manual page to synopsis style doc: convert git-range-diff manual page to synopsis style doc: convert git-difftool manual page to synopsis style
2026-04-13Merge branch 'kh/doc-am-xref' into nextJunio C Hamano-6/+5
Doc update. * kh/doc-am-xref: doc: am: correct to full --no-message-id doc: am: revert Message-ID trailer claim
2026-04-13doc: am: correct to full --no-message-idKristoffer Haugsbakk-1/+1
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-13doc: am: revert Message-ID trailer claimKristoffer Haugsbakk-5/+4
I claimed in 3c18135b (doc: am: say that --message-id adds a trailer, 2026-02-09) that `git am --message-id` adds a Git trailer. But that isn’t the case; for the case of a commit message with a subject, body, and no trailer block: <subject> <paragrah> It just appends the line right after `paragraph`: <subject> <paragraph> Message-ID: <message-id_trailer.323@msgid.xyz> It does work for two other cases though, namely subject-only and with an existing trailer block. This is at best an inconsistency and arguably a bug, but we’re at the trailing end of the release cycle now. So reverting the doc is safer than making msg-id act as a trailer, for now. Revert this hunk from commit 3c18135b except the only useful change (“Also use inline-verbatim for `Message-ID`”). Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-12checkout: -m (--merge) uses autostash when switching branchesHarald Nordgren-135/+346
When switching branches with "git checkout -m", local modifications can block the switch. Teach the -m flow to create a temporary stash before switching and reapply it after. On success, only "Applied autostash." is shown. If reapplying causes conflicts, the stash is kept and the user is told they can resolve and run "git stash drop", or run "git reset --hard" and later "git stash pop" to recover their changes. Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-12sequencer: teach autostash apply to take optional conflict marker labelsHarald Nordgren-7/+30
Add label_ours, label_theirs, and label_base parameters to the autostash apply machinery so callers can pass custom conflict marker labels through to "git stash apply --label-ours/--label-theirs/--label-base". Introduce apply_autostash_ref_with_labels() for callers that want to pass labels. Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-12sequencer: allow create_autostash to run silentlyHarald Nordgren-4/+12
Add a silent parameter to create_autostash_internal and introduce create_autostash_ref_silent so that callers can create an autostash without printing the "Created autostash" message. Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-12stash: add --label-ours, --label-theirs, --label-base for applyHarald Nordgren-11/+67
Allow callers of "git stash apply" to pass custom labels for conflict markers instead of the default "Updated upstream" and "Stashed changes". Document the new options and add a test. Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-10Sync with 'master'Junio C Hamano-0/+0
2026-04-10Merge branch 'jc/no-writev-does-not-work'Junio C Hamano-140/+4
We used writev() in limited code paths and supplied emulation for platforms without working writev(), but the emulation was too faithful to the spec to make the result useless to send even 64kB; revert the topic and plan to restart the effort later. * jc/no-writev-does-not-work: Revert "compat/posix: introduce writev(3p) wrapper" Revert "wrapper: introduce writev(3p) wrappers" Revert "sideband: use writev(3p) to send pktlines" Revert "cmake: use writev(3p) wrapper as needed"
2026-04-10Sync with 'master'Junio C Hamano-1/+1
2026-04-10Merge branch 'jc/no-writev-does-not-work' into nextJunio C Hamano-140/+4
We used writev() in limited code paths and supplied emulation for platforms without working writev(), but the emulation was too faithful to the spec to make the result useless to send even 64kB; revert the topic and plan to restart the effort later. * jc/no-writev-does-not-work: Revert "compat/posix: introduce writev(3p) wrapper" Revert "wrapper: introduce writev(3p) wrappers" Revert "sideband: use writev(3p) to send pktlines" Revert "cmake: use writev(3p) wrapper as needed"
2026-04-10Merge branch 'ps/archive-prefix-doc'Junio C Hamano-0/+5
Doc update. * ps/archive-prefix-doc: archive: document --prefix handling of absolute and parent paths
2026-04-10Merge branch 'bc/ref-storage-default-doc-update'Junio C Hamano-3/+8
Doc update. * bc/ref-storage-default-doc-update: docs: correct information about reftable
2026-04-10rust: we are way beyond 2.53Junio C Hamano-1/+1
Earlier we timelined that we'd tune our build procedures to build with Rust by default in Git 2.53, but we are already in prerelease freeze for 2.54 now. Update the BreakingChanges document to delay it until Git 2.55 (slated for the end of June 2026). Noticed-by: brian m. carlson <sandals@crustytoothpaste.net> Helped-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-10t1800: test SIGPIPE with parallel hooksJeff King-0/+38
We recently fixed a bug in commit 2226ffaacd (run_processes_parallel(): fix order of sigpipe handling, 2026-04-08) where a hook that caused us to get SIGPIPE would accidentally trigger the run_processes_parallel() cleanup handler killing the child processes. For a single hook, this meant killing the already-exited hook. This case was triggered by our tests, but was only a problem on some platforms. But if you have multiple hooks running in parallel, this causes a problem everywhere, since one hook failing to read its input would take down all hooks. Now that we have parallel hook support, we can add a test for this case. It should pass already, due to the existing fix. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-10hook: allow hook.jobs=-1 to use all available CPU coresAdrian Ratiu-20/+108
Allow -1 as a value for hook.jobs, hook.<event>.jobs, and the -j CLI flag to mean "use as many jobs as there are CPU cores", matching the convention used by fetch.parallel and other Git subsystems. The value is resolved to online_cpus() at parse time so the rest of the code always works with a positive resolved count. Other non-positive values (0, -2, etc) are rejected with a warning (config) or die (CLI). Suggested-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-10hook: add hook.<event>.enabled switchAdrian Ratiu-11/+165
Add a hook.<event>.enabled config key that disables all hooks for a given event, when set to false, acting as a high-level switch above the existing per-hook hook.<friendly-name>.enabled. Event-disabled hooks are shown in "git hook list" with an "event-disabled" tab-separated prefix before the name: $ git hook list test-hook event-disabled hook-1 event-disabled hook-2 With --show-scope: $ git hook list --show-scope test-hook local event-disabled hook-1 When a hook is both per-hook disabled and event-disabled, only "event-disabled" is shown: the event-level switch is the more relevant piece of information, and the per-hook "disabled" status will surface once the event is re-enabled. Using an event name as a friendly-name (e.g. hook.<event>.enabled) can cause ambiguity, so a fatal error is issued when using a known event name and a warning is issued for unknown event name, since a collision cannot be detected with certainty for unknown events. Suggested-by: Patrick Steinhardt <ps@pks.im> Suggested-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-04-10hook: move is_known_hook() to hook.c for wider useAdrian Ratiu-23/+29
Move is_known_hook() from builtin/hook.c (static) into hook.c and export it via hook.h so it can be reused. Make it return bool and the iterator `h` for clarity (iterate hooks). Both meson.build and the Makefile are updated to reflect that the header is now used by libgit, not the builtin sources. The next commit will use this to reject hook friendly-names that collide with known event names. Co-authored-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>