summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2026-02-05Merge branch 'ar/submodule-gitdir-tweak'Junio C Hamano16-51/+1026
Avoid local submodule repository directory paths overlapping with each other by encoding submodule names before using them as path components. * ar/submodule-gitdir-tweak: submodule: detect conflicts with existing gitdir configs submodule: hash the submodule name for the gitdir path submodule: fix case-folding gitdir filesystem collisions submodule--helper: fix filesystem collisions by encoding gitdir paths builtin/credential-store: move is_rfc3986_unreserved to url.[ch] submodule--helper: add gitdir migration command submodule: allow runtime enabling extensions.submodulePathConfig submodule: introduce extensions.submodulePathConfig builtin/submodule--helper: add gitdir command submodule: always validate gitdirs inside submodule_name_to_gitdir submodule--helper: use submodule_name_to_gitdir in add_submodule
2026-02-05Merge branch 'aa/add-p-previous-decisions'Junio C Hamano2-46/+53
"git add -p" and friends note what the current status of the hunk being shown is. * aa/add-p-previous-decisions: add -p: show user's hunk decision when selecting hunks
2026-02-05Merge branch 'jk/remote-tracking-ref-leakfix'Junio C Hamano3-11/+24
Leakfix. * jk/remote-tracking-ref-leakfix: remote: always allocate branch.push_tracking_ref remote: fix leak in branch_get_push_1() with invalid "simple" config remote: drop const return of tracking_for_push_dest() remote: return non-const pointer from error_buf()
2026-02-05doc: send-email: correct --no-signed-off-by-cc misspellingMatěj Cepl1-1/+1
There is no option --signed-off-cc (without -by) for git send-email. Signed-off-by: Matěj Cepl <mcepl@cepl.eu> [kh: rebased and changed subject to house style] Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> [jc: minor copyedit in the commit message] Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-05test: optionally test contrib in CIJunio C Hamano3-0/+19
Recently it was reported that a topic merged to 'next' broke build and test for contrib/subtree part of the system. Instead of having those who run 'next' or 'master' to hit the build and test breakage and report to us, make sure we notice breakages in contrib/ area before they hit my tree at all, during their own presubmit testing. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-05Merge branch 'pks-meson-fix-missing-msgfmt' of ↵Johannes Sixt1-1/+1
https://github.com/pks-gitlab/gitk * 'pks-meson-fix-missing-msgfmt' of https://github.com/pks-gitlab/gitk: gitk: fix msgfmt being required Signed-off-by: Johannes Sixt <j6t@kdbg.org>
2026-02-05gitk: fix msgfmt being requiredPatrick Steinhardt1-1/+1
While the Meson build instructions already handle the case where msgfmt wasn't found, we forgot to mark the dependency itself as optional. This causes an error in case the executable could not be found: Project name: gitk Project version: undefined Program sh found: YES (C:\Program Files\Git\bin\sh.EXE) Program wish found: YES (C:\Program Files\Git\mingw64\bin\wish.EXE) Program chmod found: YES (C:\Program Files\Git\usr\bin\chmod.EXE) Program mv found: YES (C:\Program Files\Git\usr\bin\mv.EXE) Program sed found: YES (C:\Program Files\Git\usr\bin\sed.EXE) Program msgfmt found: NO subprojects\gitk\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable Fix the issue by adding the `required: false` parameter. Signed-off-by: Patrick Steinhardt <ps@pks.im>
2026-02-04meson: wire up gitk and git-guiPatrick Steinhardt4-0/+20
Wire up both gitk and git-gui in Meson as subprojects. These two programs should be the last missing pieces for feature compatibility with our Makefile for distributors. Note that Meson expects subprojects to live in the "subprojects/" directory. Create symlinks to fulfill this requirement. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-04contrib/subtree: fix tests with reftable backendColin Stagner1-4/+3
One git-subtree test-case relies on git internals to infer the default branch name. This test fails with the new reftable backend. GIT_TEST_DEFAULT_REF_FORMAT=reftable \ meson test t7900-subtree This test script already sets GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main which eliminates the need to infer a branch name at runtime. Hardcode the branch name. Signed-off-by: Colin Stagner <ask+git@howdoi.land> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-04gpg-interface: signatures by expired keys are fineUwe Kleine-König1-2/+3
If a signature is made with a valid key and that key later expires, the signature should still be considered good. GnuPG emits in this case something like: [GNUPG:] NEWSIG gpg: Signature made Wed 26 Nov 2014 05:56:50 AM CET gpg: using RSA key FE3958F9067BC667 [GNUPG:] KEYEXPIRED 1478449622 [GNUPG:] KEY_CONSIDERED D783920D6D4F0C06AA4C25F3FE3958F9067BC667 0 [GNUPG:] KEYEXPIRED 1478449622 [GNUPG:] SIG_ID 8tAN3Fx6XB2NAoH5U8neoguQ9MI 2014-11-26 1416977810 [GNUPG:] EXPKEYSIG FE3958F9067BC667 Jason Cooper <jason@lakedaemon.net> gpg: Good signature from "Jason Cooper <jason@lakedaemon.net>" [expired] [GNUPG:] VALIDSIG D783920D6D4F0C06AA4C25F3FE3958F9067BC667 2014-11-26 1416977810 0 4 0 1 2 00 D783920D6D4F0C06AA4C25F3FE3958F9067BC667 gpg: Note: This key has expired! D783920D6D4F0C06AA4C25F3FE3958F9067BC667 (signature and signed data in this example is taken from Linux commit 756f80cee766574ae282baa97fdcf9cc). So GnuPG is relaxed and the fact that the key is expired is only worth a "Note" which is weaker than e.g. gpg: WARNING: The key's User ID is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. which git still considers ok. So stop coloring the signature by an expired key red and handle it like any other good signature. Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-04Merge branch 'ar/run-command-hook-take-2' into ar/config-hooksJunio C Hamano11-282/+742
* ar/run-command-hook-take-2: receive-pack: convert receive hooks to hook API receive-pack: convert update hooks to new API run-command: poll child input in addition to output hook: add jobs option reference-transaction: use hook API instead of run-command transport: convert pre-push to hook API hook: allow separate std[out|err] streams hook: convert 'post-rewrite' hook in sequencer.c to hook API hook: provide stdin via callback run-command: add stdin callback for parallelization run-command: add helper for pp child states t1800: add hook output stream tests
2026-02-03diff-highlight: allow testing with Git 3.0 breaking changesJunio C Hamano1-0/+2
The diff-highlight (in contrib/) comes with its own test script, which relies on the initial branch name being 'master'. This is not just encoded in the test logic, but in the illustration in the file that shows the topology of the history. Force the initial branch name to 'master' to allow it pass. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-03.mailmap: fix email for Phil HordPhil Hord1-1/+2
My canonical and old emails were reversed, somehow. Also add an entry for a new email that may sneak in. Signed-off-by: Phil Hord <phil.hord@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-03cocci: extend MEMZERO_ARRAY() rulesToon Claes3-9/+33
Recently the MEMZERO_ARRAY() macro was introduced. In that commit also coccinelle rules were added to capture cases that can be converted to use that macro. Later a few more cases were manually converted to use the macro, but coccinelle didn't capture those. Extend the rules to capture those as well. In various cases the code could be further beautified by removing parentheses which are no longer needed. Modify the coccinelle rules to optimize those as well and fix them. During conversion indentation also used spaces where tabs should be used, fix that in one go. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-03subtree: validate --prefix against commit in splitPushkar Singh2-0/+31
git subtree split currently validates --prefix against the working tree. This breaks when splitting an older commit or when the working tree does not contain the subtree, even though the commit does. For example: git subtree split --prefix=pkg <commit> fails if pkg was removed later, even though it exists in <commit>. Fix this by validating the prefix against the specified commit using git cat-file instead of the working tree. Add a test to ensure this behavior does not regress. Signed-off-by: Pushkar Singh <pushkarkumarsingh1970@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-03doc: shortlog: put back trailer paragraphsKristoffer Haugsbakk1-3/+4
47beb37b (shortlog: match commit trailers with --group, 2020-09-27) added the `trailer` bullet point with three paragraphs.[1] Later, 3dc95e09 (shortlog: support arbitrary commit format `--group`s, 2022-10-24) put the single-paragraph bullet point about `format` right after the first paragraph about `trailer`. That meant that the second and third paragraphs for `trailer` got moved to `format`. Move the two paragraphs back to `trailer`. We now also need one blank line before the final bullet point so that it does not get joined with the second bullet point. † 1: Technically the bullet list formatting was immediately fixed to include all three paragraphs in 63d24fa0 (shortlog: allow multiple groups to be specified, 2020-09-27) Acked-by: Jeff King <peff@peff.net> Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02odb: transparently handle common transaction behaviorJustin Tobler2-10/+13
A new ODB transaction is created and returned via `odb_transaction_begin()` and stored in the ODB. Only a single transaction may be pending at a time. If the ODB already has a transaction, the function is expected to return NULL. Similarly, when committing a transaction via `odb_transaction_commit()` the transaction being committed must match the pending transaction and upon commit reset the ODB transaction to NULL. These behaviors apply regardless of the ODB transaction implementation. Move the corresponding logic into `odb_transaction_{begin,commit}()` accordingly. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02odb: prepare `struct odb_transaction` to become genericJustin Tobler4-43/+65
An ODB transaction handles how objects are stored temporarily and eventually committed. Due to object storage being implemented differently for a given ODB source, the ODB transactions must be implemented in a manner specific to the source the objects are being written to. To provide generic transactions, `struct odb_transaction` is updated to store a commit callback that can be configured to support a specific ODB source. For now `struct odb_transaction_files` is the only transaction type and what is always returned when starting a transaction. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02object-file: rename transaction functionsJustin Tobler3-8/+8
In a subsequent commit, ODB transactions are made more generic to facilitate each ODB source providing its own transaction handling. Rename `object_file_transaction_{begin,commit}()` to `odb_transaction_files_{begin,commit}()` to better match the future source specific transaction implementation. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02odb: store ODB source in `struct odb_transaction`Justin Tobler1-11/+11
Each `struct odb_transaction` currently stores a reference to the `struct object_database`. Since transactions are handled per object source, instead store a reference to the source. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02blame: fix coloring for repeated suspectsRené Scharfe2-4/+23
The option --ignore-rev passes the blame to an older commit. This can cause adjacent scoreboard entries to blame the same commit. Currently we only look at the present entry when determining whether a line needs to be colored for --color-lines. Check the previous entry as well. Reported-by: Seth McDonald <sethmcmail@pm.me> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02t9160:modernize test path checkingHodaSalim1-13/+13
Replace old-style path checks with Git's dedicated test helpers: - test -f → test_path_is_file - test -d → test_path_is_dir - test -s → test_file_not_empty Fix typos with the word "subsequent" Found using: git grep "test -[efd]" t/ This improves test readability and provides better error messages when path checks fail. Signed-off-by: HodaSalim <hoda.s.salim@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-02.github/CONTRIBUTING.md: link to SubmittingPatches on git-scm.comAbdalrhman Mohamed1-1/+2
The relative link to SubmittingPatches is broken when viewed through GitHub's specialized "Contributing" tab. Update the link to point to the documentation on git-scm.com to be consistent with other links in the same file. Also, wrap the line to improve readability. Signed-off-by: Abdalrhman Mohamed <Eng.Abdalrhman.Abdalmonem@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-01Git 2.53v2.53.0Junio C Hamano1-1/+1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-02-01Merge tag 'l10n-2.53.0-v1' of https://github.com/git-l10n/git-poJunio C Hamano8-3312/+3811
l10n-2.53.0-v1 * tag 'l10n-2.53.0-v1' of https://github.com/git-l10n/git-po: l10n: zh_CN: standardize glossary terms l10n: zh_CN: updated translation for 2.53 l10n: zh_CN: fix inconsistent use of standard vs. wide colons l10n: fr: v2.53 l10n: zh_TW.po: update Git 2.53 translation l10n: tr: Update Turkish translations l10n: sv.po: Update Swedish translation l10n: po-id for 2.53 l10n: ga.po: Fix git-po-helper warnings l10n: bg.po: Updated Bulgarian translation (6091t) l10n: ga.po: Update Irish translation for Git 2.53
2026-02-01RelNotes: fully spell negationCarlo Marcelo Arenas Belón1-1/+1
Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-31Merge branch 'jx/zh_CN' of github.com:jiangxin/gitJiang Xin1-1309/+1458
* 'jx/zh_CN' of github.com:jiangxin/git: l10n: zh_CN: standardize glossary terms l10n: zh_CN: updated translation for 2.53 l10n: zh_CN: fix inconsistent use of standard vs. wide colons
2026-01-31Merge branch 'l10n/zh-TW/git-2-53' of github.com:l10n-tw/git-poJiang Xin1-720/+348
* 'l10n/zh-TW/git-2-53' of github.com:l10n-tw/git-po: l10n: zh_TW.po: update Git 2.53 translation
2026-01-31Merge branch 'po-id' of github.com:bagasme/git-poJiang Xin1-217/+351
* 'po-id' of github.com:bagasme/git-po: l10n: po-id for 2.53
2026-01-31Merge branch 'l10n-ga-2.53' of github.com:aindriu80/git-poJiang Xin1-220/+407
* 'l10n-ga-2.53' of github.com:aindriu80/git-po: l10n: ga.po: Fix git-po-helper warnings l10n: ga.po: Update Irish translation for Git 2.53
2026-01-31Merge branch 'master' of github.com:alshopov/git-poJiang Xin1-224/+352
* 'master' of github.com:alshopov/git-po: l10n: bg.po: Updated Bulgarian translation (6091t)
2026-01-31Merge branch 'fr_2.53' of github.com:jnavila/gitJiang Xin1-238/+296
* 'fr_2.53' of github.com:jnavila/git: l10n: fr: v2.53
2026-01-31Merge branch 'tr-l10n' of github.com:bitigchi/git-poJiang Xin1-196/+303
* 'tr-l10n' of github.com:bitigchi/git-po: l10n: tr: Update Turkish translations
2026-01-31Merge branch 'master' of github.com:nafmo/git-l10n-svJiang Xin1-188/+296
* 'master' of github.com:nafmo/git-l10n-sv: l10n: sv.po: Update Swedish translation
2026-01-31l10n: zh_CN: standardize glossary termsJiang Xin1-1085/+1098
Add preferred Chinese terminology notes and align existing translations to the updated glossary. AI-assisted review was used to check and improve legacy translations. Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-30RelNotes: correct "fast-import" option nameJunio C Hamano1-2/+2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30t/perf/p3400: speed up setup using fast-importTian Yuchen1-15/+38
The setup phase in 't/perf/p3400-rebase.sh' generates 100 commits to simulate a noisy history. It currently uses a shell loop that invokes 'git add', 'git commit', 'test_seq', and 'sort' in each iteration. This incurs significant overhead due to repeated process spawning. Optimize the setup by using 'git fast-import' to generate the commit history. Additionally, pre-compute the forward and reversed file contents to avoid repetitive execution of 'seq' and 'sort'. To ensure the test measures rebase performance against a consistent object layout (rather than the suboptimal pack/loose objects created by the raw import), perform a full repack (`git repack -a -d`) at the end of the setup. This reduces the setup time significantly while maintaining the validity of the subsequent performance tests. Performance enhancement (Average value of 5 tests): Real Rebase Before: 29.045s 13.34s After: 21.989s 12.84s Measured on Lenovo Yoga 2020, Ubuntu 24.04. Signed-off-by: Tian Yuchen <a3205153416@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30show-index: use gettext wrapping in user facing error messagesShreyansh Paliwal1-11/+11
Multiple 'die()' calls in show-index.c use literal strings directly. Wrap all user-facing 'die()' messages with '_()' so they can be translated via gettext, this ensures better support for users. Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30show-index: warn when falling back to SHA-1 outside a repositoryShreyansh Paliwal1-3/+6
When 'git show-index' is run outside of a repository and no hashing algorithm is specified via --object-format, it silently falls back to SHA-1, relying on the historical default. This works for existing SHA-1 based index files, but the behavior can be ambiguous and confusing when the input index file uses a different hash algorithm, such as SHA-256. Add a warning when this fallback happens to make the assumption explicit and to guide users toward using --object-format when needed. Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: verify revision argument is a commit-ishToon Claes2-1/+19
Passing a non-committish revision to git-last-modified(1) triggers the following BUG: git last-modified HEAD^{tree} BUG: builtin/last-modified.c:456: paths remaining beyond boundary in last-modified Fix this error by ensuring that the given revision peels to a commit. This change also adds a test to verify git-last-modified(1) can operate on an annotated tag. For this an annotated tag is added that points to the second commit. But this causes ambiguous results when calling git-name-rev(1) with `--tags`, because now two tags point to the same commit. To remove this ambiguity, pass `--exclude=<tag>` to git-name-rev(1) to exclude the new annotated tag. Reported-by: Gusted <gusted@codeberg.org> Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: remove double error messageToon Claes1-1/+1
When the user passes two revisions, they get the following output: $ git last-modified HEAD HEAD~ error: last-modified can only operate on one revision at a time error: unable to setup last-modified The error message about "unable to setup" is not very informative, remove it. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: fix memory leak when more than one commit is givenToon Claes1-4/+8
When more than one commit is given, the function populate_paths_from_revs() leaks a `struct pathspec`. Plug it. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-30last-modified: rewrite error message when more than one commit givenToon Claes2-6/+7
When more than one commit is passed to the git-last-modified(1) command, this error message was printed: error: last-modified can only operate on one tree at a time Calling these a "tree" is technically not correct. git-last-modified(1) expects revisions that peel to a commit. Rephrase the error message to: error: last-modified can only operate on one commit at a time While at it, modify the test to ensure the correct error message is printed. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29git-gui: shift tabstops to account for the first column of patch textChris Idema1-0/+2
When reviewing a change before staging, it is desirable to see text after tabstops aligned the same way as in the text editor. However, since there is always an additional character in column one in patch text ('+', '-', or space), the alignment is broken if text before the first tab character is just long enough to push the stop to the next tab position. Commit a43c5f51a4b1 (git-gui: add configurable tab size to the diff view, 2012-02-12) added infrastructure that manipulates the tabstop positions of the Tk text widget. However, it does so only when a 3-way diff is shown and only so that it takes into account the one additional markup at the beginning of lines. This only achieved that alignment does not get worse for 3-way diffs compared to regular patch text, but left misaligned text in regular patch text unmodified. Use and modify this infrastructure to shift tabstops by one position for regular patch text and two positions for 3-way diffs. Existing code already resets the tabstops to an unshifted position when contents of untracked files are displayed. Signed-off-by: Chris Idema <github_chris_idema@proton.me> [j6t: extend commit message] Signed-off-by: Johannes Sixt <j6t@kdbg.org>
2026-01-29string-list: add string_list_sort_u() that mimics "sort -u"Amisha Chhajed9-16/+54
Many callsites of string_list_remove_duplicates() call it immdediately after calling string_list_sort(), understandably as the former requires string-list to be sorted, it is clear that these places are sorting only to remove duplicates and for no other reason. Introduce a helper function string_list_sort_u that combines these two calls that often appear together, to simplify these callsites. Replace the current calls of those methods with string_list_sort_u(). Signed-off-by: Amisha Chhajed <amishhhaaaa@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29u-string-list: add unit tests for string-list methodsAmisha Chhajed1-0/+209
Unit tests in u-string-list.c does not cover several methods in string-list, this gap in coverage makes it difficult to ensure no regressions are introduced in future changes. Add unit tests for the following methods to enhance coverage: string_list_remove_empty_items() unsorted_string_list_has_string() unsorted_string_list_delete_item() string_list_has_string() string_list_insert() string_list_sort() string_list_remove() Signed-off-by: Amisha Chhajed <amishhhaaaa@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-01-29l10n: zh_CN: updated translation for 2.53Jiang Xin1-209/+345
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-29l10n: zh_CN: fix inconsistent use of standard vs. wide colonsJiang Xin1-27/+27
Replace mixed usage of standard (ASCII) colons ':' with full-width (wide) colons ':' in Chinese translations to ensure typographic consistency, as reported by CAESIUS-TIM [1]. Full-width punctuation is preferred in Chinese localization for better readability and adherence to typesetting conventions. [1]: https://github.com/git-l10n/git-po/issues/884 Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2026-01-28receive-pack: convert receive hooks to hook APIEmily Shaffer1-103/+75
This converts the last remaining hooks to the new hook API, for the same benefits as the previous conversions (no need to toggle signals, manage custom struct child_process, call find_hook(), prepares for specifying hooks via configs, etc.). See the previous three commits for a more in-depth explanation of how this all works. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Helped-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-01-28receive-pack: convert update hooks to new APIEmily Shaffer1-37/+66
The hook API avoids creating a custom struct child_process and other internal hook plumbing (e.g. calling find_hook()) and prepares for the specification of hooks via configs or running parallel hooks. Execution is still sequential through the run_hooks_opt .jobs == 1, which is the unchanged default for all hooks. When use_sideband==1, the async thread redirects the hook outputs to sideband 2, otherwise it is not used and the hooks write directly to the fds inherited from the main parent process. When .jobs == 1, run-command's poll loop is avoided entirely via the ungroup=1 option like before (this was Jeff's suggestion), achieving the same real-time output performance. When running in parallel, run-command with ungroup=0 will capture and de-interleave the output of each hook, then write to the parent stderr which is redirected via dup2 to the sideband thread, so that each parallel hook output is presented clearly to the client. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Helped-by: Jeff King <peff@peff.net> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>