diff options
Diffstat (limited to 'util/git-hooks/install.sh')
-rwxr-xr-x | util/git-hooks/install.sh | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/util/git-hooks/install.sh b/util/git-hooks/install.sh new file mode 100755 index 00000000..bc90e379 --- /dev/null +++ b/util/git-hooks/install.sh @@ -0,0 +1,19 @@ +#!/bin/sh -e + +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/) +src=util/git-hooks/ # relative to root +hooks=$(cd "${root}${src}" && git ls-files -c | grep -Ev 'install.sh|wrapper.sh') + +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 + # 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" + fi +done |