From 57209a1e680da729cad0a1cd7e9462254edcd6cb Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 Apr 2012 23:05:15 -0400 Subject: [ticket/10760] Use externally specified PHP_BIN if any. We have a PHP_BIN variable but we always set it unconditionally, therefore in order to use a different php binary one had to modify the hook script. Instead set PHP_BIN if it is not set. Now one can set PHP_BIN in their environment to use a non-default php binary. PHPBB3-10760 --- git-tools/hooks/pre-commit | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index 4d03359773..a8bb12e96e 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -12,8 +12,10 @@ # 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 # necessary check for initial commit if git rev-parse --verify HEAD >/dev/null 2>&1 @@ -64,7 +66,7 @@ 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) + result=$(git cat-file -p $sha | $PHP_BIN -l 2>/dev/null) if [ $? -ne 0 ] then error=1 -- cgit v1.2.1 From 786fcbf212caf4c201d9abba36fca3b8f58617a9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 Apr 2012 23:06:50 -0400 Subject: [ticket/10760] Use echo -e only if echo understands -e. /bin/echo on freebsd and dash's builtin echo do not understand -e, therefore -e is printed with the other messages in such cases. Test if echo understands -e, if not do not use it. PHPBB3-10760 --- git-tools/hooks/pre-commit | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index a8bb12e96e..0e230d3308 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -17,6 +17,13 @@ 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 then @@ -78,7 +85,7 @@ unset IFS if [ $error -eq 1 ] then - echo -e "PHP Syntax check failed:"; - echo -e "$errors" | grep "^Parse error:" + echo "PHP Syntax check failed:" + $echo_e "$errors" | grep "^Parse error:" exit 1 fi -- cgit v1.2.1 From b803fc4351431bc53ee3221fa6232664134aa0ba Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 Apr 2012 23:14:44 -0400 Subject: [ticket/10760] Quote PHP_BIN when using it. This should make a difference on windows where paths may include spaces. PHPBB3-10760 --- git-tools/hooks/pre-commit | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index 0e230d3308..5be33fb9a1 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -36,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" @@ -73,7 +73,7 @@ do # check the staged file content for syntax errors # using php -l (lint) - result=$(git cat-file -p $sha | $PHP_BIN -l 2>/dev/null) + result=$(git cat-file -p $sha | "$PHP_BIN" -l 2>/dev/null) if [ $? -ne 0 ] then error=1 -- cgit v1.2.1 From a0da2408e7cb0054da5d766bffa91f23d7beaec9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 Apr 2012 23:18:33 -0400 Subject: [ticket/10760] Account for display_errors=stderr in pre-commit hook. With that php.ini value set errors are printed to stderr, therefore by redirecting stderr to /dev/null we also throw out the errors. Instead merge stderr into stdout. PHPBB3-10760 --- git-tools/hooks/pre-commit | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index 5be33fb9a1..a0c2b6b247 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -73,7 +73,13 @@ do # check the staged file content for syntax errors # using php -l (lint) - result=$(git cat-file -p $sha | "$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 -- cgit v1.2.1 From f2967b666974c6622717a064060e546129e11e37 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 4 Apr 2012 00:01:08 -0400 Subject: [ticket/10760] Catch both versions of parse error output in php. PHPBB3-10760 --- git-tools/hooks/pre-commit | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index a0c2b6b247..bb667bf8ff 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -92,6 +92,20 @@ unset IFS if [ $error -eq 1 ] then 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. $echo_e "$errors" | grep "^Parse error:" + if [ $? -ne 0 ] + then + # match failed + $echo_e "$errors" | grep "^PHP Parse error:" + fi exit 1 fi -- cgit v1.2.1 From 6536a36208b3a2ecebaf5ab8e93f63b84127ae3f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 4 Apr 2012 00:27:06 -0400 Subject: [ticket/10760] PHP is great. This commit is the proof. PHPBB3-10760 --- git-tools/hooks/pre-commit | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index bb667bf8ff..9e78edd90d 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -101,6 +101,30 @@ then # 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. + # 2. it is possible to set both display_errors and log_errors + # to off. if this is done php will print the text + # "Errors parsing " but will not say what + # the errors are. useful behavior, this. + # 3. 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. + # 4. by setting display_errors=stderr and log_errors=on, + # both sets of messages will be printed on stderr. + # 5. 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. + # 6. your entry here? ;) $echo_e "$errors" | grep "^Parse error:" if [ $? -ne 0 ] then -- cgit v1.2.1 From efdd1e623e2dc060ae9b524b67c624037d8a94f0 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 4 Apr 2012 11:41:14 -0400 Subject: [ticket/10760] Value must be quoted as it might be two words. PHPBB3-10760 --- git-tools/hooks/pre-commit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index 9e78edd90d..ecc3a35ba3 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -17,7 +17,7 @@ then PHP_BIN=php fi -if [ $(echo -e test) = test ] +if [ "$(echo -e test)" = test ] then echo_e="echo -e" else -- cgit v1.2.1 From dc63db1860e597b1201994a17fd7679bfdc9b0d8 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 4 Apr 2012 11:43:59 -0400 Subject: [ticket/10760] Fix numbering in php fun facts. PHPBB3-10760 --- git-tools/hooks/pre-commit | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit index ecc3a35ba3..03babe47cd 100755 --- a/git-tools/hooks/pre-commit +++ b/git-tools/hooks/pre-commit @@ -112,19 +112,19 @@ then # 2. as mentioned above, with all output turned on # php will print parse errors twice, one time on stdout # and one time on stderr. - # 2. it is possible to set both display_errors and log_errors + # 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 " but will not say what # the errors are. useful behavior, this. - # 3. on my system display_errors defaults to on and + # 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. - # 4. by setting display_errors=stderr and log_errors=on, + # 5. by setting display_errors=stderr and log_errors=on, # both sets of messages will be printed on stderr. - # 5. php-cgi binary, given display_errors=stderr and + # 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. - # 6. your entry here? ;) + # 7. your entry here? ;) $echo_e "$errors" | grep "^Parse error:" if [ $? -ne 0 ] then -- cgit v1.2.1