SVNLOOK=/usr/bin/svnlook
-svn_cat() {
- $SVNLOOK cat "$REPOS" -t "$TXN" $1
+svnl() {
+ cmd=$1
+ shift
+ $SVNLOOK $cmd "$REPOS" -t "$TXN" $*
}
-all_changed_files=`$SVNLOOK changed "$REPOS" -t "$TXN" | \
- grep "^[AU]" | \
- sed 's/^....//'`
-
-# notice that breaking all_changed_files into several lines by replacing spaces
-# with new lines only works as long as we don't have any files with spaces in
-# them -- which is the case for now, but if it ever changes we'd probably need
-# to use a shell array for all_changed_files or just rerun svnlook here again
-changed_sources=`echo $all_changed_files | \
- sed 's/ /\n/g' | \
- egrep "\.(cpp|h|py)$" | \
- egrep -v "src/(tiff|regex|jpeg|stc/scintilla)"`
-
rc=0
-set -e
+# exclude all third-party files from consideration, we don't want to do any
+# checks for them
+all_changed_files=`svnl changed | \
+ grep "^[AU]" | \
+ sed 's/^....//' | \
+ egrep -v "src/(tiff|regex|jpeg|stc/scintilla)" | \
+ egrep -v "_wrap.cpp"`
+
+# analyze the changed files to find all non-binary and all source files
+for f in $all_changed_files; do
+ mimetype=`svnl proplist -v $f |
+ fgrep "svn:mime-type" |
+ sed 's/^ svn:mime-type : //'`
+ case $mimetype in
+ ''|text/*)
+ ;;
+
+ *)
+ continue
+ ;;
+ esac
+
+ changed_text_files="$changed_text_files $f"
+
+ case $f in
+ *.cpp|*.h|*.py)
+ changed_sources="$changed_sources $f"
+ ;;
+ esac
+done
for f in $changed_sources; do
- if svn_cat $f | fgrep -q ' '; then
+ if svnl cat $f | fgrep -q ' '; then
echo "Please remove TABs from $f before committing." >&2
rc=1
fi
done
-for f in $all_changed_files; do
- if ! svn_cat $f | iconv -f utf8 -t WCHAR_T > /dev/null; then
+for f in $changed_text_files; do
+ if ! svnl cat $f | iconv -f utf8 -t WCHAR_T > /dev/null; then
echo "File $f doesn't use UTF-8, please convert it before committing." >&2
+ echo "(or set svn:mime-type property correctly if the file is binary)." >&2
rc=1
fi
done
exit $rc
+