Exclude binary files from the checks done by the pre-commit hook.
We shouldn't check that binary files are UTF-8 so determine whether the file is binary by looking at its svn:mime-type and only do the check for the text files. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62045 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -5,37 +5,56 @@ TXN="$2"
|
|||||||
|
|
||||||
SVNLOOK=/usr/bin/svnlook
|
SVNLOOK=/usr/bin/svnlook
|
||||||
|
|
||||||
svn_cat() {
|
svnl() {
|
||||||
$SVNLOOK cat "$REPOS" -t "$TXN" $1
|
cmd=$1
|
||||||
|
shift
|
||||||
|
$SVNLOOK $cmd "$REPOS" -t "$TXN" $*
|
||||||
}
|
}
|
||||||
|
|
||||||
all_changed_files=`$SVNLOOK changed "$REPOS" -t "$TXN" | \
|
set -e
|
||||||
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
|
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)"`
|
||||||
|
|
||||||
|
# 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
|
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
|
echo "Please remove TABs from $f before committing." >&2
|
||||||
rc=1
|
rc=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for f in $all_changed_files; do
|
for f in $changed_text_files; do
|
||||||
if ! svn_cat $f | iconv -f utf8 -t WCHAR_T > /dev/null; then
|
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 "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
|
rc=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
Reference in New Issue
Block a user