3 # Update all out-of-date hooks in all current projects and install missing ones
5 # If one or more project names are given, just update those instead
13 [ "$1" != "--force" -a "$1" != "-f" ] ||
{ force
=1; shift; }
14 [ "$1" != "--dry-run" -a "$1" != "-n" ] ||
{ dryrun
=1; shift; }
15 case "$1" in -*) echo "Invalid options: $1" >&2; exit 1;; esac
18 printf '%s\n' "$(basename "$0"): refusing to run as root -- bad things would happen"
26 echo "cd .. && GIT_DIR=. GIROCCO_PERSONAL_MOB=1 exec hooks/$1"
29 base
="${cfg_reporoot%/}"
30 hookbin
="$cfg_basedir/hooks"
31 cmd
='cut -d : -f 1 < "$cfg_chroot/etc/group" | grep -v ^_repo'
32 [ $# -eq 0 ] || cmd
='printf "%s\n" "$@"'
35 while read -r proj
; do
38 projdir
="$base/$proj.git"
39 [ -d "$projdir" ] ||
{ echo "$proj: does not exist -- skipping"; continue; }
40 ! [ -e "$projdir/.nohooks" ] ||
{ echo "$proj: .nohooks found -- skipping"; continue; }
42 for hook
in pre-receive post-receive update
; do
43 if [ -f "$projdir/hooks/$hook" ]; then
44 if ! cmp -s "$hookbin/$hook" "$projdir/hooks/$hook"; then
45 [ -n "$dryrun" ] ||
cat "$hookbin/$hook" > "$projdir/hooks/$hook"
46 updates
="$updates $hook"
48 elif [ ! -e "$projdir/hooks/$hook" ]; then
49 [ -n "$dryrun" ] ||
[ -d "$projdir/hooks" ] || mkdir
"$projdir/hooks"
50 [ -n "$dryrun" ] ||
cat "$hookbin/$hook" > "$projdir/hooks/$hook"
51 [ -n "$dryrun" ] ||
chmod 0775 "$projdir/hooks/$hook"
52 updates
="$updates +$hook"
55 if [ -d "$projdir/mob/hooks" ]; then
56 for hook
in pre-receive post-receive
; do
57 if [ -f "$projdir/mob/hooks/$hook" ]; then
58 if ! write_mob_hook
"$hook" |
cmp -s - "$projdir/mob/hooks/$hook"; then
59 [ -n "$dryrun" ] || write_mob_hook
"$hook" > "$projdir/mob/hooks/$hook"
60 updates
="$updates mob/$hook"
62 elif ! [ -e "$projdir/mob/hooks/$hook" ]; then
63 [ -n "$dryrun" ] || write_mob_hook
"$hook" > "$projdir/mob/hooks/$hook"
64 [ -n "$dryrun" ] ||
chmod 0775 "$projdir/mob/hooks/$hook"
65 updates
="$updates +mob/$hook"
68 if ! [ -x "$projdir/mob/hooks/update" ]; then
69 [ -n "$dryrun" ] ||
ln -sfn ..
/..
/hooks
/update
"$projdir/mob/hooks/update"
70 updates
="$updates +mob/update"
73 for hook
in post-update
; do
74 if [ -e "$projdir/hooks/$hook" ]; then
75 [ -n "$dryrun" ] ||
rm -f "$projdir/hooks/$hook"
76 updates
="$updates -$hook"
79 if [ -d "$projdir/mob/hooks" ]; then
80 for hook
in post-update
; do
81 if [ -e "$projdir/mob/hooks/$hook" ]; then
82 [ -n "$dryrun" ] ||
rm -f "$projdir/mob/hooks/$hook"
83 updates
="$updates -mob/$hook"
88 while read -r fixfilex
; do
89 case "$fixfilex" in ""|
*.sample
) :;; *)
90 #[ -n "$added" ] || { added=1; updates="$updates a+rx"; }
91 #[ -n "$dryrun" ] || chmod a+rx "$projdir/$fixfilex"
96 ! [ -d hooks ] || find hooks -xdev -type f -not -perm -a+rx -print
97 ! [ -d mob/hooks ] || find mob/hooks -xdev -type f -not -perm -a+rx -print)
99 [ -z "$updates" ] ||
echo "$proj:$updates" ${dryrun:+(dryrun)}