aboutsummaryrefslogtreecommitdiff
path: root/hook.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-04-03 13:01:08 -0700
committerJunio C Hamano <gitster@pobox.com>2026-04-03 13:01:09 -0700
commit0cd4fb9f46eb0ebd0d243a886ce9a52210e0723e (patch)
tree8069cdba6fa414dc0cb1e11c5c7de7446ef6071f /hook.h
parent4e5821732e684f21a35288d8e67f453ca2595083 (diff)
parent5c58dbc887a1f3530cb29c995f63675beebb22e9 (diff)
downloadgit-0cd4fb9f46eb0ebd0d243a886ce9a52210e0723e.tar.xz
Merge branch 'ar/config-hook-cleanups'
Code clean-up around the recent "hooks defined in config" topic. * ar/config-hook-cleanups: hook: reject unknown hook names in git-hook(1) hook: show disabled hooks in "git hook list" hook: show config scope in git hook list hook: introduce hook_config_cache_entry for per-hook data t1800: add test to verify hook execution ordering hook: make consistent use of friendly-name in docs hook: replace hook_list_clear() -> string_list_clear_func() hook: detect & emit two more bugs hook: rename cb_data_free/alloc -> hook_data_free/alloc hook: fix minor style issues builtin/receive-pack: properly init receive_hook strbuf hook: move unsorted_string_list_remove() to string-list.[ch]
Diffstat (limited to 'hook.h')
-rw-r--r--hook.h34
1 files changed, 22 insertions, 12 deletions
diff --git a/hook.h b/hook.h
index e949f5d488..5c5628dd1f 100644
--- a/hook.h
+++ b/hook.h
@@ -1,17 +1,21 @@
#ifndef HOOK_H
#define HOOK_H
-#include "strvec.h"
+#include "config.h"
#include "run-command.h"
#include "string-list.h"
#include "strmap.h"
+#include "strvec.h"
struct repository;
+typedef void (*hook_data_free_fn)(void *data);
+typedef void *(*hook_data_alloc_fn)(void *init_ctx);
+
/**
* Represents a hook command to be run.
* Hooks can be:
* 1. "traditional" (found in the hooks directory)
- * 2. "configured" (defined in Git's configuration via hook.<name>.event).
+ * 2. "configured" (defined in Git's configuration via hook.<friendly-name>.event).
* The 'kind' field determines which part of the union 'u' is valid.
*/
struct hook {
@@ -26,6 +30,8 @@ struct hook {
struct {
const char *friendly_name;
const char *command;
+ enum config_scope scope;
+ bool disabled;
} configured;
} u;
@@ -41,13 +47,17 @@ struct hook {
* Only useful when using `run_hooks_opt.feed_pipe`, otherwise ignore it.
*/
void *feed_pipe_cb_data;
-};
-typedef void (*cb_data_free_fn)(void *data);
-typedef void *(*cb_data_alloc_fn)(void *init_ctx);
+ /**
+ * Callback to free `feed_pipe_cb_data`.
+ *
+ * It is called automatically and points to the `feed_pipe_cb_data_free`
+ * provided via the `run_hook_opt` parameter.
+ */
+ hook_data_free_fn data_free;
+};
-struct run_hooks_opt
-{
+struct run_hooks_opt {
/* Environment vars to be set for each hook */
struct strvec env;
@@ -132,14 +142,14 @@ struct run_hooks_opt
*
* The `feed_pipe_ctx` pointer can be used to pass initialization data.
*/
- cb_data_alloc_fn feed_pipe_cb_data_alloc;
+ hook_data_alloc_fn feed_pipe_cb_data_alloc;
/**
* Called to free the memory initialized by `feed_pipe_cb_data_alloc`.
*
* Must always be provided when `feed_pipe_cb_data_alloc` is provided.
*/
- cb_data_free_fn feed_pipe_cb_data_free;
+ hook_data_free_fn feed_pipe_cb_data_free;
};
#define RUN_HOOKS_OPT_INIT { \
@@ -186,10 +196,10 @@ struct string_list *list_hooks(struct repository *r, const char *hookname,
struct run_hooks_opt *options);
/**
- * Frees the memory allocated for the hook list, including the `struct hook`
- * items and their internal state.
+ * Frees a struct hook stored as the util pointer of a string_list_item.
+ * Suitable for use as a string_list_clear_func_t callback.
*/
-void hook_list_clear(struct string_list *hooks, cb_data_free_fn cb_data_free);
+void hook_free(void *p, const char *str);
/**
* Frees the hook configuration cache stored in `struct repository`.