Ævar Arnfjörð Bjarmason | 5e3aba3 | 2021-09-26 21:03:26 +0200 | [diff] [blame] | 1 | #include "cache.h" |
| 2 | #include "hook.h" |
| 3 | #include "run-command.h" |
| 4 | |
| 5 | const char *find_hook(const char *name) |
| 6 | { |
| 7 | static struct strbuf path = STRBUF_INIT; |
| 8 | |
| 9 | strbuf_reset(&path); |
| 10 | strbuf_git_path(&path, "hooks/%s", name); |
| 11 | if (access(path.buf, X_OK) < 0) { |
| 12 | int err = errno; |
| 13 | |
| 14 | #ifdef STRIP_EXTENSION |
| 15 | strbuf_addstr(&path, STRIP_EXTENSION); |
| 16 | if (access(path.buf, X_OK) >= 0) |
| 17 | return path.buf; |
| 18 | if (errno == EACCES) |
| 19 | err = errno; |
| 20 | #endif |
| 21 | |
| 22 | if (err == EACCES && advice_enabled(ADVICE_IGNORED_HOOK)) { |
| 23 | static struct string_list advise_given = STRING_LIST_INIT_DUP; |
| 24 | |
| 25 | if (!string_list_lookup(&advise_given, name)) { |
| 26 | string_list_insert(&advise_given, name); |
| 27 | advise(_("The '%s' hook was ignored because " |
| 28 | "it's not set as executable.\n" |
| 29 | "You can disable this warning with " |
| 30 | "`git config advice.ignoredHook false`."), |
| 31 | path.buf); |
| 32 | } |
| 33 | } |
| 34 | return NULL; |
| 35 | } |
| 36 | return path.buf; |
| 37 | } |
Emily Shaffer | 330155e | 2021-09-26 21:03:27 +0200 | [diff] [blame^] | 38 | |
| 39 | int hook_exists(const char *name) |
| 40 | { |
| 41 | return !!find_hook(name); |
| 42 | } |