diff options
Diffstat (limited to 'check-pascal')
-rwxr-xr-x | check-pascal | 105 |
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 |