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>
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
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
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