From: Eduardo Ramos Testillano Date: Fri, 28 Feb 2014 12:29:33 +0000 (+0100) Subject: pre-commit helper X-Git-Tag: REFACTORING_TESTING_LIBRARY~266 X-Git-Url: https://git.teslayout.com/public/public/public/?a=commitdiff_plain;h=6fad401807254ca484b90304ded9501ce4d1cf99;hp=858b6e049e795cc50a362e8e41dfaefe7106fd9f;p=anna.git pre-commit helper --- diff --git a/README.md b/README.md index 11d1a2b..bb53bcf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,14 @@ ANNA ==== -ANNA is the acronym for "ANNA is not 'N' anymore", a complete suite of tools and resources to build proffesional applications with minimum cost. +ANNA is the acronym for "ANNA is not 'N' anymore", a complete suite of tools and resources + to build proffesional applications with minimum cost. Revision control ================ Based on GIT, hosted on www.bitbucket.org. -Copy or link 'pre-commit.sh' to '.git/hooks/pre-commit' if you want to do some basic checkings (i.e. astyle code processing) + +You could use my pre-commit specific template if you want to do some basic checkings (i.e. + astyle code processing): Execute './scr/git/use-pre-commit.sh' Documentation ============= diff --git a/pre-commit.sh b/pre-commit.sh deleted file mode 100755 index e9ded58..0000000 --- a/pre-commit.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/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 -version=`astyle --version 2> /dev/null` -if test "x$version" != "x"; then -echo "SDF3 git pre-receive hook:" -echo "Did not find astyle, please install it before continuing." -exit 1 -fi -ASTYLE=astyle - -case `$ASTYLE --version 2> /dev/null` in - Artistic*) - ;; - default) - echo "SDF3 git pre-commit hook:" - echo "Did not find astyle, please install it before continuing." - 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 - $ASTYLE -a -f -p -o -O -c -s2 -U -x --mode=c < $file > $newfile 2>>/dev/null - diff "${file}" "${newfile}" - r=$? - if [ $r != 0 ] ; then - echo "Code style error in '$file', please fix before commiting." - if [ -f "./.fix_style" ]; then - echo "Auto-fixing code style..." - 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 -- - diff --git a/scr/git/pre-commit.sh b/scr/git/pre-commit.sh new file mode 100755 index 0000000..e9ded58 --- /dev/null +++ b/scr/git/pre-commit.sh @@ -0,0 +1,124 @@ +#!/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 +version=`astyle --version 2> /dev/null` +if test "x$version" != "x"; then +echo "SDF3 git pre-receive hook:" +echo "Did not find astyle, please install it before continuing." +exit 1 +fi +ASTYLE=astyle + +case `$ASTYLE --version 2> /dev/null` in + Artistic*) + ;; + default) + echo "SDF3 git pre-commit hook:" + echo "Did not find astyle, please install it before continuing." + 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 + $ASTYLE -a -f -p -o -O -c -s2 -U -x --mode=c < $file > $newfile 2>>/dev/null + diff "${file}" "${newfile}" + r=$? + if [ $r != 0 ] ; then + echo "Code style error in '$file', please fix before commiting." + if [ -f "./.fix_style" ]; then + echo "Auto-fixing code style..." + 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 -- + diff --git a/scr/git/use-pre-commit.sh b/scr/git/use-pre-commit.sh new file mode 100755 index 0000000..04fcb26 --- /dev/null +++ b/scr/git/use-pre-commit.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd `dirname $0` +ln -sf ../../scr/git/pre-commit.sh ../../.git/hooks/pre-commit