diff options
Diffstat (limited to 'util/git-hooks/install.sh')
-rwxr-xr-x | util/git-hooks/install.sh | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/util/git-hooks/install.sh b/util/git-hooks/install.sh index d557c2f8..fda0098f 100755 --- a/util/git-hooks/install.sh +++ b/util/git-hooks/install.sh @@ -3,18 +3,28 @@ root=$(git rev-parse --show-cdup 2>/dev/null) || \ { echo "Not under git control. Cannot install git hooks." >&2 ; exit 0 ; } -dst="${root}"$(git rev-parse --git-path hooks/) +[ -z "${root}" ] || \ + { echo "Not in root directory. Can only run from git root." >&2 ; exit 1 ; } + src=util/git-hooks/ # relative to root -hooks=$(cd "${root}${src}" && git ls-files -c | grep -Ev 'install.sh|wrapper.sh') +hooks=$(cd "${src}" && git ls-files -c | grep -Ev 'install.sh|wrapper.sh') + +if [ "$(git rev-parse --git-path 2>/dev/null)" = "--git-path" ]; then + # very old git, we have to guess + dst=".git/hooks/" + rel="../../" +else + dst=$(git rev-parse --git-path hooks/) + rel=$(git rev-parse --prefix "${dst}" --show-cdup) +fi for h in $hooks; do # Test if hook is not already installed, i.e. doesn't point at the wrapper - if [ ! "${dst}$h" -ef "${root}${src}wrapper.sh" ]; then + if [ ! "${dst}$h" -ef "${src}wrapper.sh" ]; then # preserve custom hooks if any if [ -e "${dst}$h" ]; then mv "${dst}$h" "${dst}$h.local" fi - ln -s "$(git rev-parse --prefix $(git rev-parse --git-path hooks/) --show-cdup)${src}wrapper.sh" \ - "${dst}$h" + ln -s "${rel}${src}wrapper.sh" "${dst}$h" fi done |