Make install_hooks check if git hook is available When git hook isn't available, we can still have install_hooks.sh copy the commands to .git/hooks. However, this means that the hooks will not remain up-to-date as this repository is updated, so the user is warned. Bug: b/187094215 Change-Id: I7401b78d7e6afa12fec691efed7c21b62d987422
diff --git a/install_hooks.sh b/install_hooks.sh index 822a324..681e1a1 100755 --- a/install_hooks.sh +++ b/install_hooks.sh
@@ -6,20 +6,32 @@ # Space separated list of hooks to install declare -a HOOKS=("pre-commit" "commit-msg") +hookConfigExists="$(git hook list pre-commit 2>/dev/null >> /dev/null ; echo $?)" + for hook in ${HOOKS[@]}; do if [ ! -f "${dir}/${hook}" ]; then continue fi - # Soft remove the old script in .git/hooks so that git doesn't try to run # multiple hooks. if [ -f "${githookdir}/${hook}" ]; then mv "${githookdir}/${hook}" "${githookdir}/${hook}.old" fi + if [ "$hookConfigExists" -eq "0" ]; then + git config --unset-all hook.${hook}.command + git config --add hook.${hook}.command "${dir}/${hook}" + # There should be a single hook per line and it should point to the + # git-hooks repository. + git hook list "${hook}" + else + cp ${dir}/${hook} ${githookdir}/${hook} + fi +done - git config --unset-all hook.${hook}.command - git config --add hook.${hook}.command "${dir}/${hook}" - # Sanity check: there should be a single hook per line and it should point to the - # git-hooks repository. - git hook list "${hook}" +if [ "$hookConfigExists" -eq "0" ]; then + echo "If a single command is listed per hook, then this script was succesful." + echo "Checks will be run at pre-submit." +else + echo "The 'git hook' command is not available on this device." + echo "The hooks will be copied to ${githookdir}, but will not automatically remain up-to-date with the git-hooks repository" done