Hello,
Dealing with several different development environments can be tricky. With SVN specifically, it is ideal to have some “pre-flight” checks in order to make sure some basic standards have been followed.
Some of the things you would want to check might be :
– Does the code generate a fatal PHP error?
– Is there any syntax errors?
– Has valid commit messages been attached to the code commit?
I thought I’d share our pre-commit hook in one of our SVN code repositories in order to let you utilize and perhaps expand on it to include many more checks. Additional checks that may be specific to your code environment might benefit you. Feel free to share if improvements are made!
#!/bin/bash # pre-commit hooks # www.stardothosting.com REPOS="$1" TXN="$2" PHP="/usr/bin/php" SVNLOOK="/usr/bin/svnlook" AWK="/usr/bin/awk" GREP="/bin/egrep" SED="/bin/sed" # Make sure that the commit message is not empty SVNLOOKOK=1 $SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0 if [ $SVNLOOKOK = 0 ]; then echo -e "Empty commit messages are not allowed. Please provide a descriptive comment when committing code." 1>&2 exit 1 fi # Make sure the commit message is more than 5 characters long. LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c) if [ "$LOGMSG" -le 5 ]; then echo -e "Please provide a verbose comment when committing changes." 1>&2 exit 1 fi # Check for PHP parse errors CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | $GREP "^[U|A]" | $AWK '{print $2}' | $GREP .php$` for FILE in $CHANGED do MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $PHP -l` if [ $? -ne 0 ] then echo 1>&2 echo "-----------------------------------" 1>&2 echo "PHP error in: $FILE:" 1>&2 echo `echo "$MESSAGE" | $SED "s| -| $FILE|g"` 1>&2 echo "-----------------------------------" 1>&2 exit 1 fi done exit 0