From abfeb4f01c5e305af2b9174564d52bdc41efc3c9 Mon Sep 17 00:00:00 2001 From: Zhao Halley Date: Wed, 24 Apr 2013 17:07:40 +0800 Subject: [PATCH] add help script to fix trailing-whitespace cp .git-hooks-pre-commit .git/hooks/pre-commit --- .git-hooks-pre-commit | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 .git-hooks-pre-commit diff --git a/.git-hooks-pre-commit b/.git-hooks-pre-commit new file mode 100755 index 0000000..129db71 --- /dev/null +++ b/.git-hooks-pre-commit @@ -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 + -- 2.7.4