]> gitweb.fluxo.info Git - git-hooks.git/commitdiff
Fix too many hooks reported in list_hooks_in_dir
authorGeorg Lutz <georg@georglutz.de>
Sat, 24 Aug 2013 18:17:11 +0000 (20:17 +0200)
committerBenjamin C Meyer <ben@meyerhome.net>
Mon, 21 Oct 2013 02:14:26 +0000 (22:14 -0400)
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 <ben@meyerhome.net>
git-hooks

index 9191506c5b5a018146fdf8dab21737daaca173ed..b42e46518bba8d8030dbabde0335f435e1ab67e4 100755 (executable)
--- 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