diff options
author | Igor Wiedler <igor@wiedler.ch> | 2012-04-07 18:27:30 +0200 |
---|---|---|
committer | Igor Wiedler <igor@wiedler.ch> | 2012-04-07 18:27:30 +0200 |
commit | 24daef1aafb0a733c3428122d740fea17d4f34a0 (patch) | |
tree | 19338a7c549089437f2f9cb708f6afb8a26e733a /git-tools | |
parent | 3963b39634225a68687cf1b817a47ae1eeb6ac79 (diff) | |
parent | 713e7129e2dfb1039f5198c03c8808c8410f434a (diff) | |
download | forums-24daef1aafb0a733c3428122d740fea17d4f34a0.tar forums-24daef1aafb0a733c3428122d740fea17d4f34a0.tar.gz forums-24daef1aafb0a733c3428122d740fea17d4f34a0.tar.bz2 forums-24daef1aafb0a733c3428122d740fea17d4f34a0.tar.xz forums-24daef1aafb0a733c3428122d740fea17d4f34a0.zip |
Merge branch 'develop' into feature/avatars
* develop: (335 commits)
[ticket/10575] Adding public visibility to the methods.
[ticket/10575] Fixing non-static access to static functions get_instance
[ticket/10547] User is not logged in as admin after installation
[ticket/10650] Revert merge of 'rahulr92/ticket/10650' into develop
[ticket/10650] Added checking for empty subjects
[ticket/10650] Corrected intendation
[ticket/10650]Added permission checking and utf8 functions
[ticket/10650] Cropped subject and inserted newline
[ticket/10650] Corrected space before true
[ticket/10650] Changed language files and forumlist
[ticket/10650] Added static sql files
[ticket/10650] Displaying last topic on forum list
[ticket/10760] Fix numbering in php fun facts.
[ticket/10760] Value must be quoted as it might be two words.
[ticket/10760] PHP is great. This commit is the proof.
[ticket/10760] Catch both versions of parse error output in php.
[ticket/10607] Added 'Powered by' translation string.
[ticket/10760] Account for display_errors=stderr in pre-commit hook.
[ticket/10760] Quote PHP_BIN when using it.
[ticket/10760] Use echo -e only if echo understands -e.
...
Diffstat (limited to 'git-tools')
-rwxr-xr-x | git-tools/hooks/pre-commit | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index 4d03359773..03babe47cd 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -12,8 +12,17 @@ # ln -s ../../git-tools/hooks/pre-commit \\ # .git/hooks/pre-commit -# NOTE: this is run through /usr/bin/env -PHP_BIN=php +if [ -z "$PHP_BIN" ] +then + PHP_BIN=php +fi + +if [ "$(echo -e test)" = test ] +then + echo_e="echo -e" +else + echo_e="echo" +fi # necessary check for initial commit if git rev-parse --verify HEAD >/dev/null 2>&1 @@ -27,7 +36,7 @@ fi error=0 errors="" -if ! which $PHP_BIN >/dev/null 2>&1 +if ! which "$PHP_BIN" >/dev/null 2>&1 then echo "PHP Syntax check failed:" echo "PHP binary does not exist or is not in path: $PHP_BIN" @@ -64,7 +73,13 @@ do # check the staged file content for syntax errors # using php -l (lint) - result=$(git cat-file -p $sha | /usr/bin/env $PHP_BIN -l 2>/dev/null) + # note: if display_errors=stderr in php.ini, + # parse errors are printed on stderr; otherwise + # they are printed on stdout. + # we filter everything other than parse errors + # with a grep below, therefore it should be safe + # to combine stdout and stderr in all circumstances + result=$(git cat-file -p $sha | "$PHP_BIN" -l 2>&1) if [ $? -ne 0 ] then error=1 @@ -76,7 +91,45 @@ unset IFS if [ $error -eq 1 ] then - echo -e "PHP Syntax check failed:"; - echo -e "$errors" | grep "^Parse error:" + echo "PHP Syntax check failed:" + # php "display errors" (display_errors php.ini value) + # and "log errors" (log_errors php.ini value). + # these are independent settings - see main/main.c in php source. + # the "log errors" setting produces output which + # starts with "PHP Parse error:"; the "display errors" + # setting produces output starting with "Parse error:". + # if both are turned on php dumps the parse error twice. + # therefore here we try to grep for one version and + # if that yields no results grep for the other version. + # + # other fun php facts: + # + # 1. in cli, display_errors and log_errors have different + # destinations by default. display_errors prints to + # standard output and log_errors prints to standard error. + # whether these destinations make sense is left + # as an exercise for the reader. + # 2. as mentioned above, with all output turned on + # php will print parse errors twice, one time on stdout + # and one time on stderr. + # 3. it is possible to set both display_errors and log_errors + # to off. if this is done php will print the text + # "Errors parsing <file>" but will not say what + # the errors are. useful behavior, this. + # 4. on my system display_errors defaults to on and + # log_errors defaults to off, therefore providing + # by default one copy of messages. your mileage may vary. + # 5. by setting display_errors=stderr and log_errors=on, + # both sets of messages will be printed on stderr. + # 6. php-cgi binary, given display_errors=stderr and + # log_errors=on, still prints both sets of messages + # on stderr, but formats one set as an html fragment. + # 7. your entry here? ;) + $echo_e "$errors" | grep "^Parse error:" + if [ $? -ne 0 ] + then + # match failed + $echo_e "$errors" | grep "^PHP Parse error:" + fi exit 1 fi |