aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorAdrian Ratiu <adrian.ratiu@collabora.com>2026-02-19 00:23:48 +0200
committerJunio C Hamano <gitster@pobox.com>2026-02-19 13:23:41 -0800
commit03b4043b9182bd3d36541371fa39f04d6d038286 (patch)
tree46af18d57733c40b3438b40b6029d22124c95a30 /builtin
parent9fdaa6788924d4bb5ffc3a5908dae8a50e072f77 (diff)
downloadgit-03b4043b9182bd3d36541371fa39f04d6d038286.tar.xz
hook: include hooks from the config
Teach the hook.[hc] library to parse configs to populate the list of hooks to run for a given event. Multiple commands can be specified for a given hook by providing "hook.<friendly-name>.command = <path-to-hook>" and "hook.<friendly-name>.event = <hook-event>" lines. Hooks will be started in config order of the "hook.<name>.event" lines and will be run sequentially (.jobs == 1) like before. Running the hooks in parallel will be enabled in a future patch. The "traditional" hook from the hookdir is run last, if present. A strmap cache is added to struct repository to avoid re-reading the configs on each rook run. This is useful for hooks like the ref-transaction which gets executed multiple times per process. Examples: $ git config --get-regexp "^hook\." hook.bar.command=~/bar.sh hook.bar.event=pre-commit # Will run ~/bar.sh, then .git/hooks/pre-commit $ git hook run pre-commit Signed-off-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/hook.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/builtin/hook.c b/builtin/hook.c
index 51660c4941..e151bb2cd1 100644
--- a/builtin/hook.c
+++ b/builtin/hook.c
@@ -68,6 +68,9 @@ static int list(int argc, const char **argv, const char *prefix,
case HOOK_TRADITIONAL:
printf("%s\n", _("hook from hookdir"));
break;
+ case HOOK_CONFIGURED:
+ printf("%s\n", h->u.configured.friendly_name);
+ break;
default:
BUG("unknown hook kind");
}