After further investigation and testing, here is a working solution:
create file .git/hooks/hook-chain
as follows
#!/bin/bash
#
# author: orefalo
hookname=`basename $0`
FILE=`mktemp`
trap 'rm -f $FILE' EXIT
cat - > $FILE
for hook in $GIT_DIR/hooks/$hookname.*
do
if test -x "$hook"; then
# echo $hook
cat $FILE | $hook "$@"
status=$?
if test $status -ne 0; then
echo Hook $hook failed with error code $status
exit $status
fi
fi
done
Now link any hook that requires chaining, for instance
- ln -s hook-chain update
- ln -s hook-chain post-receive
finally, create the chains by renaming them as hookname
.action
-rwxr-xr-x. 1 git git 6710 functions
-rwxr-xr-x. 1 git git 280 hook-chain
-rwxr-xr-x. 1 git git 1524 post-mirror
lrwxrwxrwx. 1 root root 10 post-receive -> hook-chain
-rwxr-xr-x. 1 git git 8763 post-receive.1email
-rwxr-xr-x. 1 git git 1745 post-receive.2github
-rwxr-xr-x. 1 git git 473 post-upload-pack
-rwxr-xr-x. 1 git git 346 pre-receive
lrwxrwxrwx. 1 root root 10 update -> hook-chain
-rwxr-xr-x. 1 git git 2975 update.1acl
-rwxr-xr-x. 1 git git 328 update.2github
for instance, in the sample above, the update hook will run update.1acl followed by update.2github.
The post-receive hook with run post-receive.1email followed by post-receive.2github