| #! /usr/bin/env sh |
| |
| dir=`realpath $(dirname "$BASH_SOURCE:-0")` |
| githookdir=`git rev-parse --git-dir`/hooks |
| |
| # 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 |
| |
| 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 |