]> SALOME platform Git repositories - modules/shaper.git/blobdiff - GitHooks/pre-commit.in
Salome HOME
Implement pre-commit Git hook to check CRLF line endings (issue #1837)
[modules/shaper.git] / GitHooks / pre-commit.in
diff --git a/GitHooks/pre-commit.in b/GitHooks/pre-commit.in
new file mode 100644 (file)
index 0000000..52e778f
--- /dev/null
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+function isDOSFile
+{
+  local FILENAME="$1"
+  file "$FILENAME" | grep -q "CRLF line terminators"
+}
+
+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
+  cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+  exit 1
+fi
+
+FOUND=0
+# If there are whitespace errors, print the offending file names and fail.
+if [ "$(exec git diff-index --check --cached $against -- )" != "" ]
+then
+  FOUND=1
+fi
+
+# Find files with DOS line endings
+for FILE in $(exec git diff --name-only --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq) ; do
+  isDOSFile "$FILE"
+  if (( $? == 0 ))
+  then
+    echo "ERROR: \"$FILE\" has DOS line endings" >&2
+    FOUND=1
+  fi
+done
+
+exit $FOUND