update-all-hooks.sh: update personal mob area hooks too
[girocco.git] / toolbox / update-all-hooks.sh
blobce3d7e7465e2af1d5a571c82c2af740147e2179b
1 #!/bin/sh
3 # Update all out-of-date hooks in all current projects and install missing ones
5 set -e
7 . @basedir@/shlib.sh
9 umask 002
11 base="$cfg_reporoot"
12 hookbin="$cfg_basedir/hooks"
13 cut -d : -f 1 < "$cfg_chroot/etc/group" | grep -v ^_repo | \
15 while read proj; do
16 projdir="$base/$proj.git"
17 updates=
18 for hook in pre-receive post-receive update post-update; do
19 if [ -f "$projdir/hooks/$hook" ]; then
20 if ! cmp -s "$hookbin/$hook" "$projdir/hooks/$hook"; then
21 cat "$hookbin/$hook" > "$projdir/hooks/$hook"
22 updates="$updates $hook"
24 elif [ ! -e "$projdir/hooks/$hook" ]; then
25 [ -d "$projdir/hooks" ] || mkdir "$projdir/hooks"
26 cat "$hookbin/$hook" > "$projdir/hooks/$hook"
27 chmod 0775 "$projdir/hooks/$hook"
28 updates="$updates +$hook"
30 done
31 if [ -d "$projdir/mob/hooks" ]; then
32 if ! [ -x "$projdir/mob/hooks/update" ]; then
33 ln -sfn ../../hooks/update "$projdir/mob/hooks/update"
34 updates="$updates +mob/update"
36 # note that mob/hooks does not get a post-receive hook
37 for hook in pre-receive post-update; do
38 if ! [ -x "$projdir/mob/hooks/$hook" ]; then
39 mh="$projdir/mob/hooks/$hook"
40 echo '#!/bin/sh' > "$mh.$$"
41 echo "cd .. && GIT_DIR=. exec hooks/$hook" >> "$mh.$$"
42 chmod 0775 "$mh.$$"
43 mv -f "$mh.$$" "$mh"
44 rm -f "$mh.$$"
45 updates="$updates +mob/$hook"
47 done
49 [ -z "$updates" ] || echo "$proj:$updates"
50 done