43 lines
		
	
	
		
			974 B
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			974 B
		
	
	
	
		
			C
		
	
	
| #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);
 | |
| }
 |