From 187f23820f43e962acbeab788d5a96d5d59bd51e Mon Sep 17 00:00:00 2001 From: Georg Lutz Date: Sat, 24 Aug 2013 20:17:11 +0200 Subject: Fix too many hooks reported in list_hooks_in_dir list_hooks_in_dir should report exactly the hooks that would be run with run_hooks. But the find command in list_hooks_in_dir does not limit itself to the scheme "folder_name/hook_name" but recurses infinitely through sub directories reporting all executable files. If your hooks are stored itself in a git repository then consequently also the files in .git/hooks are reported. This change sets the search depth exactly to two, so that the correct scripts are reported, e.g. : ~/.git_hooks/commit-msg/script1 but not e.g. : ~/.git_hook/.git/hooks/commit-msg ~/.git_hooks/script2 ~/.git_hooks/commit-msg/dir2/script3 Signed-off-by: Benjamin C Meyer --- git-hooks | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/git-hooks b/git-hooks index 9191506..b42e465 100755 --- a/git-hooks +++ b/git-hooks @@ -43,7 +43,9 @@ function hook_dirs function list_hooks_in_dir { - find -L "${1}/" -perm +111 -type f 2>/dev/null | grep -v "^.$" | sort + path="${1}" + level="${2}" + find -L "${path}/" -mindepth ${level} -maxdepth ${level} -perm +111 -type f 2>/dev/null | grep -v "^.$" | sort } function run_hooks @@ -54,7 +56,7 @@ function run_hooks return 1 fi shift 1 - for hook in `list_hooks_in_dir "${dir}"` + for hook in `list_hooks_in_dir "${dir}" 1` do export last_run_hook="${hook} $@" if [ ! -z ${GIT_HOOKS_VERBOSE} ] ; then @@ -132,7 +134,7 @@ function list_hooks echo '---' for dir in `hook_dirs`; do echo "${dir}:" - for hook in `list_hooks_in_dir "${dir}"` ; do + for hook in `list_hooks_in_dir "${dir}" 2` ; do echo -n `basename \`dirname "${hook}"\`` echo -e "/`basename "${hook}"` \t- `${hook} --about`" done -- cgit v1.2.3