Byte-order marks can mess up your code badly. Some of my CodeIgniter PHP code was receiving “headers already sent”, thanks to BOM’s alone. So, our goal is to reject a commit that contains one or more PHP files with BOMs. You can easily change the script to filter other files as well. The script is known to work on Dreamhost.
Enough of talking, here is the pre-commit hook, a bash script, you were desperately searching the Internet for:
#!/bin/bash REPOS="$1" TXN="$2" PHP="/usr/local/bin/php" SVNLOOK="/usr/bin/svnlook" AWK="/usr/bin/awk" GREP="/bin/egrep" SED="/bin/sed" CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | $GREP "^[U|A]" | $AWK '{print $2}' | $GREP \.php$` REGEX=$'\xEF\xBB\xBF' GREP2="grep -l $REGEX" for FILE in $CHANGED do MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $GREP2` if [ $? -eq 0 ] then echo 1>&2 echo "***********************************" 1>&2 echo "Byte order mark error in: $FILE:" 1>&2 #echo `echo "$MESSAGE" | $SED "s| -| $FILE|g"` 1>&2 echo "***********************************" 1>&2 exit 1 fi done