diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2021-09-26 19:03:26 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-09-27 16:44:54 (GMT) |
commit | 5e3aba33da26803e48b0099c9dabfd327f7f8b8b (patch) | |
tree | 94dd10330838789b0e800a3f4fb152d6b220e38e /hook.c | |
parent | f53df0bdf6d5ea9da12b97fc7f87b1dd3681b278 (diff) | |
download | git-5e3aba33da26803e48b0099c9dabfd327f7f8b8b.zip git-5e3aba33da26803e48b0099c9dabfd327f7f8b8b.tar.gz git-5e3aba33da26803e48b0099c9dabfd327f7f8b8b.tar.bz2 |
hook.[ch]: move find_hook() from run-command.c to hook.c
Move the find_hook() function from run-command.c to a new hook.c
library. This change establishes a stub library that's pretty
pointless right now, but will see much wider use with Emily Shaffer's
upcoming "configuration-based hooks" series.
Eventually all the hook related code will live in hook.[ch]. Let's
start that process by moving the simple find_hook() function over
as-is.
Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'hook.c')
-rw-r--r-- | hook.c | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -0,0 +1,37 @@ +#include "cache.h" +#include "hook.h" +#include "run-command.h" + +const char *find_hook(const char *name) +{ + static struct strbuf path = STRBUF_INIT; + + strbuf_reset(&path); + strbuf_git_path(&path, "hooks/%s", name); + if (access(path.buf, X_OK) < 0) { + int err = errno; + +#ifdef STRIP_EXTENSION + strbuf_addstr(&path, STRIP_EXTENSION); + if (access(path.buf, X_OK) >= 0) + return path.buf; + if (errno == EACCES) + err = errno; +#endif + + if (err == EACCES && advice_enabled(ADVICE_IGNORED_HOOK)) { + static struct string_list advise_given = STRING_LIST_INIT_DUP; + + if (!string_list_lookup(&advise_given, name)) { + string_list_insert(&advise_given, name); + advise(_("The '%s' hook was ignored because " + "it's not set as executable.\n" + "You can disable this warning with " + "`git config advice.ignoredHook false`."), + path.buf); + } + } + return NULL; + } + return path.buf; +} |