summaryrefslogtreecommitdiff
path: root/run-command.c
diff options
context:
space:
mode:
authorDamien MariƩ <damien@dam.io>2017-10-06 08:07:55 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-10-10 04:21:46 (GMT)
commitf805a00a396ee91599902cebe55620b2a4c813b9 (patch)
treeff5e8a8d4b5dabf8a80a7442fe8672d6e61822c3 /run-command.c
parent217f2767cbcb562872437eed4dec62e00846d90c (diff)
downloadgit-f805a00a396ee91599902cebe55620b2a4c813b9.zip
git-f805a00a396ee91599902cebe55620b2a4c813b9.tar.gz
git-f805a00a396ee91599902cebe55620b2a4c813b9.tar.bz2
run-command: add hint when a hook is ignored
When an hook is present but the file is not set as executable then git will ignore the hook. For now this is silent which can be confusing. This commit adds this warning to improve the situation: hint: The 'pre-commit' hook was ignored because it's not set as executable. hint: You can disable this warning with `git config advice.ignoredHook false` To allow the old use-case of enabling/disabling hooks via the executable flag a new setting is introduced: advice.ignoredHook. Signed-off-by: Damien MariƩ <damien@dam.io> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'run-command.c')
-rw-r--r--run-command.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/run-command.c b/run-command.c
index 014b216..31fc5ea 100644
--- a/run-command.c
+++ b/run-command.c
@@ -5,6 +5,7 @@
#include "argv-array.h"
#include "thread-utils.h"
#include "strbuf.h"
+#include "string-list.h"
void child_process_init(struct child_process *child)
{
@@ -1169,11 +1170,28 @@ const char *find_hook(const char *name)
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_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;