Instead of using chained update hook, I would recommend using VREFS, available with Gitolite V3.
You can see all its arguments here.
Since a VREF is basically like a git update
hook, you can, like in this script, get the log message for each commits with git log --format=%s -1 $commit
:
Example of a script enforcing a policy on git commit messages:
#!/bin/bash
refname="$1"
oldrev="$2"
newrev="$3"
result=0
# Make sure we handle the situation when the branch does not exist yet
if ! [ "$oldrev" = "0000000000000000000000000000000000000000" ] ; then
excludes=( ^$oldrev )
else
excludes=( $(git for-each-ref --format '^%(refname:short)' refs/heads/) )
fi
# Get the list of incomming commits
commits=`git rev-list $newrev "${excludes[@]}"`
# For every commit in the list
for commit in $commits
do
# check the log message for ticket number
message=`git log --format=%s -1 $commit`
ticket=`echo "$message" | grep -o "^[A-Z]{2,3}-[0-9]+"`
if [ "$ticket" = "" ] ; then
echo "Commit $commit does not start with a ticket number"
result=1
fi
done
exit $result
cwhsu mentions in the comments:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…