| #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; |
| } |
| |
| int hook_exists(const char *name) |
| { |
| return !!find_hook(name); |
| } |