X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=scripts%2Fgit%2Fpre-commit.sh;fp=scripts%2Fgit%2Fpre-commit.sh;h=01e85e9d740e2db80b3d2743b70dcb9f6424bd6b;hb=4b79e398beb48eaa5c96b914b84e9fe77dea9da4;hp=0000000000000000000000000000000000000000;hpb=61c8b6e85a24b5b6b9e9bc40dbeda77726e57283;p=anna.git diff --git a/scripts/git/pre-commit.sh b/scripts/git/pre-commit.sh new file mode 100755 index 0000000..01e85e9 --- /dev/null +++ b/scripts/git/pre-commit.sh @@ -0,0 +1,127 @@ +#!/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 + +# Astyle +which astyle >/dev/null 2>/dev/null +if [ $? -ne 0 ]; then +echo "pre-commit hook: 'astyle' not found, install it before continuing or remove .fix_style to skip astyle processing." +exit 1 +fi +ASTYLE=astyle + +case `$ASTYLE --version 2> /dev/null` in + Artistic*) + ;; + default) + echo "pre-commit hook: unsupported astyle version, must be 'Artistic Style Version x.xx'. Install or skip (remove .fix_style)." + exit 1 + ;; +esac + +ASTYLE_PARAMETERS="--style=allman \ + --indent=spaces=2 \ + --convert-tabs \ + --indent-classes \ + --indent-switches \ + --indent-namespaces \ + --indent-labels \ + --indent-col1-comments \ + --min-conditional-indent=0 \ + --pad-oper \ + --pad-header \ + --unpad-paren \ + --align-pointer=name \ + --lineend=linux \ + --suffix=none" +# --brackets=linux +# --one-line=keep-statements +# --indent-preprocessor + +test_style () { + + file=$1 + newfile=${file}.astyled + #$ASTYLE ${ASTYLE_PARAMETERS} < $file > $newfile 2>>/dev/null + echo "Executing $ASTYLE -a -f -p -o -O -c -s2 -U --mode=c < $file > $newfile" + $ASTYLE -a -f -p -o -O -c -s2 -U --mode=c < $file > $newfile + if [ $? -ne 0 ] ; then + echo "Error in astyle" + exit 1 + fi + diff "${file}" "${newfile}" + if [ $? -ne 0 ] ; then + echo "Code style error in '$file', please fix before commiting." + if [ -f "./.fix_style" ]; then + echo "Auto-fixing code style..." + cp $file ${file}.orig + mv $newfile $file + else + echo "To autofix, create a hidden file named './.fix_style' on suite root." + rm $newfile + exit 1 + fi + else + rm $newfile + fi +} + +echo "Source code style checking ..." + +files=`git-diff-index --diff-filter=ACMR --name-only -r --cached $against --` +for file in $files; do + x=`echo $file |grep -E '(\.cpp|\.hpp)'` + if test "x$x" != "x"; then + test_style $file + git add $file + fi +done + +# If there are whitespace errors, print the offending file names and fail. +#exec git diff-index --check --cached $against -- +