add help script to fix trailing-whitespace
authorZhao Halley <halley.zhao@intel.com>
Wed, 24 Apr 2013 09:07:40 +0000 (17:07 +0800)
committerZhao Halley <halley.zhao@intel.com>
Thu, 25 Apr 2013 06:26:22 +0000 (14:26 +0800)
cp .git-hooks-pre-commit .git/hooks/pre-commit

.git-hooks-pre-commit [new file with mode: 0755]

diff --git a/.git-hooks-pre-commit b/.git-hooks-pre-commit
new file mode 100755 (executable)
index 0000000..129db71
--- /dev/null
@@ -0,0 +1,63 @@
+#!/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
+
+# If there are whitespace errors, print the offending file names and fail.
+# exec git diff-index --check --cached $against --
+# strip trailing whitespace
+for file in `git diff --check --cached | grep '^[^+-]' | grep -o '^.*[0-9]\+:'` ; do
+    file_name=`echo ${file} | grep -o '^[^:]\+'`
+    line_number=`echo ${file} | grep -oP '(?<=:)[0-9]+(?=:)'`
+    # I think the reason there are two sed commands here
+    # is that 'sed -i' is different on different systems.
+    # shoot me.
+    (sed -i "${line_number}s/\s*$//" "${file_name}" > /dev/null 2>&1 \
+        || sed -i '' -E "${line_number}s/\s*$//" "${file_name}")
+    git add ${file_name}
+    echo "Re-wrote ${file_name} to trim whitespace."
+done
+