2021-09-27 03:03:26 +08:00
|
|
|
#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;
|
|
|
|
}
|
2021-09-27 03:03:27 +08:00
|
|
|
|
|
|
|
int hook_exists(const char *name)
|
|
|
|
{
|
|
|
|
return !!find_hook(name);
|
|
|
|
}
|