]> git.saurik.com Git - wxWidgets.git/blobdiff - misc/scripts/svn/hooks/pre-commit
avoid duplicate move events
[wxWidgets.git] / misc / scripts / svn / hooks / pre-commit
index 5dabb3cea79ce22843599564bfc552774e3e9de3..779f04621505e1d5d91b818ba13ba0c4e48bfa1f 100755 (executable)
@@ -5,34 +5,82 @@ TXN="$2"
 
 SVNLOOK=/usr/bin/svnlook
 
 
 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" | \
+rc=0
+
+# exclude all third-party files from consideration, we don't want to do any
+# checks for them
+#
+# Also don't impose any constraints on commits to previous 2.x branches.
+all_changed_files=`svnl changed | \
                     grep "^[AU]" | \
                     grep "^[AU]" | \
-                    sed 's/^....//'`
+                    sed 's/^....//' | \
+                    egrep -v "branches/WX_2_" | \
+                    egrep -v "wxWidgets/vendor" | \
+                    egrep -v "src/(expat|tiff|regex|jpeg|stc/scintilla)" | \
+                    egrep -v "src/msw/version.rc" | \
+                    egrep -v "_wrap.cpp" | \
+                    egrep -v "wxPython/.*/docs/.*\.html$"`
+
+# 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/*)
+            ;;
 
 
-changed_sources=`echo $all_changed_files | \
-                    egrep "\.(cpp|h|py)$" | \
-                    egrep -v "src/(tiff|regex|jpeg|stc/scintilla)"`
+        *)
+            continue
+            ;;
+    esac
 
 
-rc=0
+    changed_text_files="$changed_text_files $f"
 
 
-set -e
+    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
          rc=1
      fi
          echo "Please remove TABs from $f before committing." >&2
          rc=1
      fi
+
+     case $f in
+        */wx/chartype.h)
+            # This file defines _T() for compatibility so don't check it.
+            ;;
+
+        */docs/doxygen/overviews/changes_since28.h)
+            # And this one describes changes from _T() to wxT().
+            ;;
+
+        *)
+            if  svnl cat $f | fgrep -qw '_T'; then
+                echo "Please use wxT() instead of _T() in $f." >&2
+                rc=1
+            fi
+            ;;
+    esac
 done
 
 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 ! svncat $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
     fi
 done
 
 exit $rc
         rc=1
     fi
 done
 
 exit $rc
+