aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorAdrian Ratiu <adrian.ratiu@collabora.com>2026-02-19 00:23:49 +0200
committerJunio C Hamano <gitster@pobox.com>2026-02-19 13:23:41 -0800
commit1ecce722cdb9c42dd4c69e45e02cb850cd558ef2 (patch)
tree8bedc56c8f312ef0f22e9c900da0a86e60c0ae03 /t
parent03b4043b9182bd3d36541371fa39f04d6d038286 (diff)
downloadgit-1ecce722cdb9c42dd4c69e45e02cb850cd558ef2.tar.xz
hook: allow disabling config hooks
Hooks specified via configs are always enabled, however users might want to disable them without removing from the config, like locally disabling a global hook. Add a hook.<name>.enabled config which defaults to true and can be optionally set for each configured hook. 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>
Diffstat (limited to 't')
-rwxr-xr-xt/t1800-hook.sh32
1 files changed, 32 insertions, 0 deletions
diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
index f1048a5119..9797802735 100755
--- a/t/t1800-hook.sh
+++ b/t/t1800-hook.sh
@@ -318,6 +318,38 @@ test_expect_success 'rejects hooks with no commands configured' '
test_grep "hook.broken.command" actual
'
+test_expect_success 'disabled hook is not run' '
+ test_config hook.skipped.event "test-hook" &&
+ test_config hook.skipped.command "echo \"Should not run\"" &&
+ test_config hook.skipped.enabled false &&
+
+ git hook run --ignore-missing test-hook 2>actual &&
+ test_must_be_empty actual
+'
+
+test_expect_success 'disabled hook does not appear in git hook list' '
+ test_config hook.active.event "pre-commit" &&
+ test_config hook.active.command "echo active" &&
+ test_config hook.inactive.event "pre-commit" &&
+ test_config hook.inactive.command "echo inactive" &&
+ test_config hook.inactive.enabled false &&
+
+ git hook list pre-commit >actual &&
+ test_grep "active" actual &&
+ test_grep ! "inactive" actual
+'
+
+test_expect_success 'globally disabled hook can be re-enabled locally' '
+ test_config_global hook.global-hook.event "test-hook" &&
+ test_config_global hook.global-hook.command "echo \"global-hook ran\"" &&
+ test_config_global hook.global-hook.enabled false &&
+ test_config hook.global-hook.enabled true &&
+
+ echo "global-hook ran" >expected &&
+ git hook run test-hook 2>actual &&
+ test_cmp expected actual
+'
+
test_expect_success 'git hook run a hook with a bad shebang' '
test_when_finished "rm -rf bad-hooks" &&
mkdir bad-hooks &&