Re: pre-commit not working at server side push
On Wed, 20 Jul 2011 13:15:33 +0530 "J. Bakshi" <joydeep@infoservices.in> wrote:
Show 49 quoted lines
> On Wed, 20 Jul 2011 10:30:17 +0300
> Ilari Liusvaara <ilari.liusvaara@elisanet.fi> wrote:
>
> > On Wed, Jul 20, 2011 at 12:45:38PM +0530, J. Bakshi wrote:
> > > On Wed, 20 Jul 2011 12:13:56 +0530
> > > "J. Bakshi" <joydeep@infoservices.in> wrote:
> > >
> > > > Hello list,
> > > >
> > > > I have this bash script to check php syntax error and prevent the commit if there is any
> > > >
> > > > ```````````````````
> > > > #!/bin/sh
> > > >
> > > > ##php_syntax_check
> > > >
> > > > for i in $(git diff-index --name-only --cached HEAD -- | grep -E '\.(php|engine|theme|install|inc>
> > > > if [ -f $i ]; then
> > > > output=$(/usr/bin/php5 -l $i)
> > > > if [ "$output" == "No syntax errors detected in $i" ];
> > > > then
> > > > echo "PHP syntax check for $i: OK"
> > > > else
> > > > echo "=====================================================================>
> > > > echo "Pause $i for the commit due to PHP parse errors:"
> > > > echo "$output"
> > > > exit 1
> > > > fi
> > > > fi
> > > > done
> > > >
> > > > ```````````````````
> >
> > > seems it should be pre-receive hook at the server. So done accordingly but still not working
> >
> > Pre-receive runs after objects have been received but before branches are updated. So
> > it can inspect the newly arrived commits but the branches retain their old values.
> >
> > - Firstly, the server does not have index, so diff-index does not do anything sane.
> > - Secondly, HEAD does not point to anything newly arrived (the hook gets list of update
> > instructions via stdin).
> > - Thirdly, this hook must be prepared for multiple commits in multiple branches appearing at
> > once.
> >
> > I think githooks(5) documents what these hooks receive and what they do.
> >
> > -Ilari
>
> Thanks for your clarification. As a newbie I am interested to know any such pre-receive hook which can check php syntax before php.
The script given at the link below is working fine
http://git.661346.n2.nabble.com/Odd-results-writing-a-Git-pre-receive-hook-to-syntax-check-PHP-files-td5471120.html
But it doesn't show where the error is. The part actually checking the error is
``````````
function syntaxCheckFile($blob,$filename) {
$needle = '/(\.php|\.module|\.install)$/';
if (preg_match($needle,$filename)) {
#echo "Checking $filename\n";
$dummy = array();
exec("git show $blob|/home/php/bin/php -l",$dummy,$checkrcval);
if ($checkrcval != 0) {
echo "There was a syntax error in '$filename'.
Rejecting this attempted merge!\n";
exit(1);
}
}
}
``````````can we modify it so that it shows the error too ?
PS: I am not a php guy