From: "Thomas Bachem via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Adrian Ratiu <adrian.ratiu@collabora.com>,
Patrick Steinhardt <ps@pks.im>,
Emily Shaffer <nasamuffin@google.com>,
Junio C Hamano <gitster@pobox.com>,
Thomas Bachem <mail@thomasbachem.com>
Subject: [PATCH v2 0/2] Two hook configuration changes
Date: Fri, 23 Oct 2026 13:19:00 +0000 [thread overview]
Message-ID: <pull.2272.v2.git.1792761542.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2272.git.1792520353.gitgitgadget@gmail.com>
Two small changes to hook configuration. With the first,
hook.pre-commit.enabled=false also stops the pre-commit hook in the hooks
directory. With the second, hook.*.enabled and hook.*.parallel can be given
without a value, which means true, as for any other boolean.
Changes since v1:
* The documentation of hook.<event>.enabled now says that it covers
configured hooks and the hook in the hooks directory alike. The subject
and message of patch 1 present this as a change in behavior rather than a
fix (Adrian, Junio).
* The test that hook.<event>.enabled=false leaves the hooks of other events
alone now has a hookdir hook too.
Thomas Bachem (2):
hook: make hook.<event>.enabled cover the hookdir hook
hook: accept .enabled and .parallel given without a value
Documentation/config/hook.adoc | 3 +-
builtin/hook.c | 6 ++--
hook.c | 17 ++++++----
hook.h | 8 ++++-
t/t1800-hook.sh | 57 ++++++++++++++++++++++++++++++++--
5 files changed, 78 insertions(+), 13 deletions(-)
base-commit: 6de20f6092dcf9bdb1c8efe03db4b70c82b423dd
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2272%2Fthomasbachem%2Fhook-event-enabled-hookdir-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2272/thomasbachem/hook-event-enabled-hookdir-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/2272
Range-diff vs v1:
1: 1a7d060fae ! 1: cfcbe80ba5 hook: honor hook.<event>.enabled for the hookdir hook
@@ Metadata
Author: Thomas Bachem <mail@thomasbachem.com>
## Commit message ##
- hook: honor hook.<event>.enabled for the hookdir hook
+ hook: make hook.<event>.enabled cover the hookdir hook
- The documentation added by dcfb5af67e (hook: add hook.<event>.enabled
- switch, 2026-04-10) says that with hook.<event>.enabled set to false
- "no hooks fire for that event", but only hooks defined in the
- configuration are skipped. With hook.pre-commit.enabled=false,
- "git commit" still runs .git/hooks/pre-commit, and "git hook list"
- shows that hook without the "event-disabled" mark.
+ hook.<event>.enabled, added by dcfb5af67e (hook: add
+ hook.<event>.enabled switch, 2026-04-10), skips only the hooks
+ defined in the configuration when set to false. With
+ hook.pre-commit.enabled=false, "git commit" still runs
+ .git/hooks/pre-commit, and "git hook list" shows that hook without
+ the "event-disabled" mark.
- Move the event_disabled flag out of u.configured in struct hook, set
- it for the hookdir hook too, and check it for both kinds of hooks.
+ That was the intent, but the documentation says "no hooks fire for
+ that event", which reads as covering the hookdir hook too. No other
+ setting turns off the hookdir hook of a single event either:
+ core.hooksPath=/dev/null turns off the hookdir hooks of all events.
+ Make the switch cover the hookdir hook as well, and say so in the
+ documentation. This changes behavior for anyone who set the switch
+ and relied on the hookdir hook still running.
The test for hook.<event>.enabled=false looks only at the standard
output, but "git hook run" sends hook output to the standard error,
@@ Commit message
Assisted-by: Claude Fable 5.1
Signed-off-by: Thomas Bachem <mail@thomasbachem.com>
+ ## Documentation/config/hook.adoc ##
+@@ Documentation/config/hook.adoc: hook.<friendly-name>.parallel::
+ the effective job count is greater than 1. {see-git-hook}
+
+ hook.<event>.enabled::
+- Switch to enable or disable all hooks for the `<event>` hook event.
++ Switch to enable or disable all hooks for the `<event>` hook event,
++ configured hooks and the traditional hook in the hooks directory alike.
+ When set to `false`, no hooks fire for that event, regardless of any
+ per-hook `hook.<friendly-name>.enabled` settings. Defaults to `true`.
+ {see-git-hook}
+
## builtin/hook.c ##
@@ builtin/hook.c: static int list(int argc, const char **argv, const char *prefix,
@@ t/t1800-hook.sh: test_expect_success 'hook.<event>.jobs rejects values less than
'
test_expect_success 'hook.<event>.enabled=true does not suppress hooks' '
+@@ t/t1800-hook.sh: test_expect_success 'hook.<event>.enabled=true does not suppress hooks' '
+ test_expect_success 'hook.<event>.enabled=false does not affect other events' '
+ test_config hook.hook-1.event test-hook &&
+ test_config hook.hook-1.command "echo ran" &&
++ test_hook test-hook <<-\EOF &&
++ echo hookdir ran
++ EOF
+ test_config hook.other-event.enabled false &&
+ git hook run --allow-unknown-hook-name test-hook >out 2>err &&
+- test_grep "ran" err
++ test_grep "^ran$" err &&
++ test_grep "^hookdir ran$" err
+ '
+
+ test_expect_success 'hook.<friendly-name>.enabled=false still disables that hook' '
@@ t/t1800-hook.sh: test_expect_success 'git hook list shows event-disabled hooks as event-disabled'
test_config hook.hook-1.command "echo ran" &&
test_config hook.hook-2.event test-hook &&
2: 3db167c9d1 = 2: 53a5a1787a hook: accept .enabled and .parallel given without a value
--
gitgitgadget
next prev parent reply other threads:[~2026-10-23 13:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 18:19 [PATCH 0/2] Fix two hook configuration bugs Thomas Bachem via GitGitGadget
2026-10-20 18:19 ` [PATCH 1/2] hook: honor hook.<event>.enabled for the hookdir hook Thomas Bachem via GitGitGadget
2026-10-20 18:46 ` Junio C Hamano
2026-10-20 20:59 ` Adrian Ratiu
2026-10-21 17:42 ` Junio C Hamano
2026-10-22 13:40 ` Adrian Ratiu
2026-10-20 18:19 ` [PATCH 2/2] hook: accept .enabled and .parallel given without a value Thomas Bachem via GitGitGadget
2026-10-23 13:19 ` Thomas Bachem via GitGitGadget [this message]
2026-10-23 13:19 ` [PATCH v2 1/2] hook: make hook.<event>.enabled cover the hookdir hook Thomas Bachem via GitGitGadget
2026-10-23 13:19 ` [PATCH v2 2/2] hook: accept .enabled and .parallel given without a value Thomas Bachem via GitGitGadget
2026-10-23 17:53 ` [PATCH v2 0/2] Two hook configuration changes Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2272.v2.git.1792761542.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=adrian.ratiu@collabora.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mail@thomasbachem.com \
--cc=nasamuffin@google.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox