First cmake commit. Still coexisting with scons.
[anna.git] / scripts / git / pre-commit.sh
diff --git a/scripts/git/pre-commit.sh b/scripts/git/pre-commit.sh
new file mode 100755 (executable)
index 0000000..01e85e9
--- /dev/null
@@ -0,0 +1,127 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+       against=HEAD
+else
+       # Initial commit: diff against an empty tree object
+       against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+       # Note that the use of brackets around a tr range is ok here, (it's
+       # even required, for portability to Solaris 10's /usr/bin/tr), since
+       # the square bracket bytes happen to fall in the designated range.
+       test $(git diff --cached --name-only --diff-filter=A -z $against |
+         LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+       echo "Error: Attempt to add a non-ascii file name."
+       echo
+       echo "This can cause problems if you want to work"
+       echo "with people on other platforms."
+       echo
+       echo "To be portable it is advisable to rename the file ..."
+       echo
+       echo "If you know what you are doing you can disable this"
+       echo "check using:"
+       echo
+       echo "  git config hooks.allownonascii true"
+       echo
+       exit 1
+fi
+
+# Astyle
+which astyle >/dev/null 2>/dev/null
+if [ $? -ne 0 ]; then
+echo "pre-commit hook: 'astyle' not found, install it before continuing or remove .fix_style to skip astyle processing."
+exit 1
+fi
+ASTYLE=astyle
+
+case `$ASTYLE --version 2> /dev/null` in
+  Artistic*)
+      ;;
+  default)
+      echo "pre-commit hook: unsupported astyle version, must be 'Artistic Style Version x.xx'. Install or skip (remove .fix_style)."
+      exit 1
+      ;;
+esac
+
+ASTYLE_PARAMETERS="--style=allman \
+    --indent=spaces=2 \
+    --convert-tabs \
+    --indent-classes \
+    --indent-switches \
+    --indent-namespaces \
+    --indent-labels \
+    --indent-col1-comments \
+    --min-conditional-indent=0 \
+    --pad-oper \
+    --pad-header \
+    --unpad-paren \
+    --align-pointer=name \
+    --lineend=linux \
+    --suffix=none"
+#   --brackets=linux
+#   --one-line=keep-statements
+#   --indent-preprocessor
+
+test_style () {
+
+  file=$1
+  newfile=${file}.astyled
+  #$ASTYLE ${ASTYLE_PARAMETERS} < $file > $newfile 2>>/dev/null
+  echo "Executing $ASTYLE -a -f -p -o -O -c -s2 -U --mode=c < $file > $newfile"
+  $ASTYLE -a -f -p -o -O -c -s2 -U --mode=c < $file > $newfile
+  if [ $? -ne 0 ] ; then
+    echo "Error in astyle"
+    exit 1
+  fi
+  diff "${file}" "${newfile}"
+  if [ $? -ne 0 ] ; then
+    echo "Code style error in '$file', please fix before commiting."
+    if [ -f "./.fix_style" ]; then
+      echo "Auto-fixing code style..."
+      cp $file ${file}.orig
+      mv $newfile $file
+    else
+      echo "To autofix, create a hidden file named './.fix_style' on suite root."
+      rm $newfile
+      exit 1
+    fi
+  else
+    rm $newfile
+  fi
+}
+
+echo "Source code style checking ..."
+
+files=`git-diff-index --diff-filter=ACMR --name-only -r --cached $against --`
+for file in $files; do
+    x=`echo $file |grep -E '(\.cpp|\.hpp)'`
+    if test "x$x" != "x"; then
+        test_style $file
+        git add $file
+    fi
+done
+
+# If there are whitespace errors, print the offending file names and fail.
+#exec git diff-index --check --cached $against --
+