[PATCH v6 00/12] Run hooks in parallel
- From
Adrian Ratiu <adrian.ratiu@collabora.com>
- Date
- Apr 4, 2026, 08:29 UTC
- Message-ID
- <20260404082934.173788-1-adrian.ratiu@collabora.com>
- In-Reply-To
- <20260204173328.1601807-1-adrian.ratiu@collabora.com>
Hello everyone,
This series enables running hook commands in parallel and is now based on the master branch because all prerequisites have landed.
v6 is just a minor refresh which includes a meson build fix provided by Patrick and fixes a trivial conflict with the master branch for that specific patch.
Branch is pushed to GitHub: [1] Successful CI run: [2]
1: https://github.com/10ne1/git/tree/dev/aratiu/parallel-hooks-v6 2: https://github.com/10ne1/git/actions/runs/23974475271
Changes in v6: * Included the meson.build patch fix supplied by Patrick and added him as co-author on patch 10 (Patrick) * Fixed a trivial code conflict on the master branch due to build scripts having moved into tools/ for the above patch (Adrian)
Range-diff v5 -> v6:
1: f5624a2a1f = 1: b79b6d4d92 repository: fix repo_init() memleak due to missing _clear()
2: 8ae5eec9c9 = 2: 04d70c5fe6 config: add a repo_config_get_uint() helper
3: f9278a22ea = 3: 9d52e73211 hook: parse the hook.jobs config
4: 7cbe7d2f7c = 4: fa52e229e6 hook: allow parallel hook execution
5: fd39771388 = 5: 255e87fe42 hook: allow pre-push parallel execution
6: 54c08cb72b = 6: eb60a9effe hook: mark non-parallelizable hooks
7: 5957cd9c72 = 7: 44eaa1b5eb hook: add -j/--jobs option to git hook run
8: a58f05e9d5 = 8: dcd7f91d96 hook: add per-event jobs config
9: 4fb39ad98d = 9: 7b1513b648 hook: warn when hook.<friendly-name>.jobs is set
10: d3c6e8f3e2 ! 10: 1a808c35c3 hook: move is_known_hook() to hook.c for wider use
@@ Commit message
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>
## Makefile ##
@@ hook.h: void hook_free(void *p, const char *str);
/**
* Returns the path to the hook file, or NULL if the hook is missing
* or disabled. Note that this points to static storage that will be
+
+ ## meson.build ##
+@@ meson.build: libgit_sources += custom_target(
+ env: script_environment,
+ )
+
++libgit_sources += custom_target(
++ input: 'Documentation/githooks.adoc',
++ output: 'hook-list.h',
++ command: [
++ shell,
++ meson.current_source_dir() + '/tools/generate-hooklist.sh',
++ meson.current_source_dir(),
++ '@OUTPUT@',
++ ],
++ env: script_environment,
++)
++
+ builtin_sources = [
+ 'builtin/add.c',
+ 'builtin/am.c',
+@@ meson.build: builtin_sources += custom_target(
+ env: script_environment,
+ )
+
+-builtin_sources += custom_target(
+- input: 'Documentation/githooks.adoc',
+- output: 'hook-list.h',
+- command: [
+- shell,
+- meson.current_source_dir() + '/tools/generate-hooklist.sh',
+- meson.current_source_dir(),
+- '@OUTPUT@',
+- ],
+- env: script_environment,
+-)
+-
+ # This contains the variables for GIT-BUILD-OPTIONS, which we use to propagate
+ # build options to our tests.
+ build_options_config = configuration_data()
11: 312acd15b4 = 11: a5d37a0ea1 hook: add hook.<event>.enabled switch
12: f54844d13e = 12: 136cd50cea hook: allow hook.jobs=-1 to use all available CPU coresAdrian Ratiu (9): repository: fix repo_init() memleak due to missing _clear() config: add a repo_config_get_uint() helper hook: parse the hook.jobs config hook: allow pre-push parallel execution hook: add per-event jobs config hook: warn when hook.<friendly-name>.jobs is set hook: move is_known_hook() to hook.c for wider use hook: add hook.<event>.enabled switch hook: allow hook.jobs=-1 to use all available CPU cores
Emily Shaffer (3): hook: allow parallel hook execution hook: mark non-parallelizable hooks hook: add -j/--jobs option to git hook run
Documentation/config/hook.adoc | 76 +++++ Documentation/git-hook.adoc | 23 +- Makefile | 2 +- builtin/am.c | 8 +- builtin/checkout.c | 19 +- builtin/clone.c | 6 +- builtin/hook.c | 46 ++- builtin/receive-pack.c | 3 +- builtin/worktree.c | 2 +- commit.c | 2 +- config.c | 28 ++ config.h | 13 + hook.c | 286 ++++++++++++++++- hook.h | 38 ++- meson.build | 24 +- parse.c | 9 + parse.h | 1 + repository.c | 3 + repository.h | 10 + t/t1800-hook.sh | 546 ++++++++++++++++++++++++++++++++- transport.c | 6 +- 21 files changed, 1081 insertions(+), 70 deletions(-)
-- 2.52.0.732.gb351b5166d.dirty