summaryrefslogtreecommitdiff
path: root/check-pascal
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2017-12-13 14:14:09 +0100
committerErich Eckner <git@eckner.net>2017-12-13 14:14:09 +0100
commit0917bfd82c71fc3b60aebabfcfba64c3c3462c23 (patch)
tree70a06a0bb86bc6b7b88e7a6d7b4bb4319520d426 /check-pascal
downloadgit-hooks-0917bfd82c71fc3b60aebabfcfba64c3c3462c23.tar.xz
Initialer Commit
Diffstat (limited to 'check-pascal')
-rwxr-xr-xcheck-pascal105
1 files changed, 105 insertions, 0 deletions
diff --git a/check-pascal b/check-pascal
new file mode 100755
index 0000000..36cf6ce
--- /dev/null
+++ b/check-pascal
@@ -0,0 +1,105 @@
+#!/bin/bash
+
+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 --bool 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
+
+# If there are whitespace errors, print the offending file names and fail.
+git diff-index --check --cached $against -- || exit $?
+
+TREE=$(git write-tree)
+
+bezeichner=$(
+ git archive $TREE | \
+ tar -Ox --wildcards --wildcards-match-slash '*.pas' '*.lpr' '*.inc' 2> /dev/null | \
+ grep -v '^unit ' | \
+ sed '
+ /^uses\($\|\s\)/{
+ :Schleife
+ $!N
+ s@uses\(\n\|\s\)[^;]\+;@@
+ TSchleife
+ }
+ ' | \
+ sed '
+ :Anfang
+ s|//.*$||
+ '"s|'[^']*'||g"'
+ s|\$\?{[^{}]*}||g
+ s|\$[0-9a-fA-F]\+| |g
+ s|#[0-9]\+| |g
+ /{/{
+ :Schleife
+ $!N
+ s|\$\?{[^{}]*}||g
+ TSchleife
+ bAnfang
+ }
+ ' | \
+ tr '[]\t\r:= ;,.()+*^<>/'"'-" '\n' | \
+ sed 's|^@||' | \
+ sort -u
+)
+
+if fehlerA=$(
+ echo "$bezeichner" | \
+ grep '[^_]_\+[^_]'
+) && fehlerB=$(
+ echo "$bezeichner" | \
+ grep '[A-Z]'
+); then
+ if [ $(echo "$fehlerA" | wc -l) -gt $(echo "$fehlerB" | wc -l) ]; then
+ warnung="$fehlerB"
+ else
+ warnung="$fehlerA"
+ fi
+fi
+
+fehler=$(
+ echo "$bezeichner" | \
+ sort -f | \
+ uniq -iD
+)
+
+if [ -n "$fehler" ]; then
+ >&2 echo 'You are being inconsistent regarding capitalization:'
+ >&2 echo "$fehler"
+ exit 1
+elif [ -n "$warnung" ]; then
+ >&2 echo 'Warning: You have names with underscores in them at the same time with ones with capitalization:'
+ >&2 echo "$warnung"
+fi