Windows7×JenkinsでAntで各種PEARが動かせない場合

PHP Tips, Tips, サーバなど, 日記| | 2013.04.12

本来は環境変数周りの問題だと思うのだけどあきらめた…

Antは使わずにcmdへコマンド投げる方法に切り替え

本来こうしたい所を

<target name="phpcpd" description="Find duplicate code using PHPCPD">
 <exec executable="phpcpd">
  <arg value="--log-pmd"/>
  <arg value="${basedir}/build/logs/pmd-cpd.xml"/>
  <arg path="${basedir}/src"/>
 </exec>
</target>

↓ ↓ ↓ cmdへ投げる形へ。

<target name="phpcpd" description="Find duplicate code using PHPCPD">
 <exec executable="cmd">
 <arg value="/c phpcpd --log-pmd ${basedir}/build/logs/pmd-cpd.xml ${basedir}/src" />
 </exec>
</target>

phpcpdでネストエラーが出てしまったら

phpcpdの仕様と前提となる環境がかみ合わないせいか、PHP5.4.3/PHP5.3.13で再現確認。

Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\php\php5\pear\SebastianBergmann\Version\Version.php on line 125

Call Stack:
 0.0008 232488 1. {main}() C:\php\php5\phpcpd:0
 0.0102 632032 2. SebastianBergmann\PHPCPD\TextUI\Command->__construct(
) C:\php\php5\phpcpd:55
 0.0107 653600 3. SebastianBergmann\Version->getVersion() C:\p
hp\php5\pear\SebastianBergmann\PHPCPD\TextUI\Command.php:68
 0.0107 653824 4. SebastianBergmann\Version->getGitInformation() C:\wam
p\bin\php\php5\pear\SebastianBergmann\Version\Version.php:81
 0.0107 653904 5. SebastianBergmann\Version->isGitRepository() C:\wamp\
bin\php\php5\pear\SebastianBergmann\Version\Version.php:103
 0.0108 654104 6. SebastianBergmann\Version->isGitRepository() C:\wamp\
bin\php\php5\pear\SebastianBergmann\Version\Version.php:135
 0.0108 654224 7. SebastianBergmann\Version->isGitRepository() C:\wamp\
bin\php\php5\pear\SebastianBergmann\Version\Version.php:135
(以下延々)

PEARインストール先の問題のファイルを改変。
(gitリポジトリ内で呼ばれたら、最新のものを取ってくる判定をする部分なので挙動には支障ないはず)

例) C:\php\php5\pear\SebastianBergmann\Version\Version.php

//123行目付近
private function isGitRepository($path){
 return false; //動かないのだから仕方あるまい
...

今回調べ物してて思ったこと

Windows環境のオマケ扱いが加速している…。
Linux(Mac)表記が先で、Windowsの表記は「テストして無いけどこんな感じでしょ」みたいな書き方されてました。

Macを好きにならなければこの先苦労するのかもしれません。