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