From: Junio C Hamano Date: Tue, 31 Aug 2010 23:50:47 GMT Subject: Re: Odd results writing a Git pre-receive hook to syntax check PHP files. Message-ID: <7vk4n68hpk.fsf@alter.siamese.dyndns.org> In-Reply-To: Chris Patti writes: > function parseCommit($old_sha1,$new_sha1) { > # if this is the first commit on a new branch, $old_sha1 will > be a bunch of zeroes, and so > # git diff --raw will fail, since there's no old ref to > compare against. So, we parse the > # results of git diff-tree -root=$new_sha1 instead to get the > blob and filename we'll need. > if (detectNewBranch($old_sha1,$new_sha1)) { > $diffcmd="git diff-tree --root $new_sha1"; This somehow feels wrong. If the tree of the new commit is flat without subdirectory, the above would do, but don't you need "diff-tree -r" here? > $regex="/\:\w+ \w+ \w+ (\w+) \w (.+)/"; > } > else { > $diffcmd="git diff --raw $old_sha1 $new_sha1"; And you are better off using "diff-tree -r" here instead of "diff --raw" here as well, to keep the input to your parser for both cases uniform. The parser would be easier that way, no? > $regex="/\:\d+ \d+ \w+... (\w+)... \w\t(.+)/"; > }