2008年4月19日土曜日

phpDocumentorの-iオプションで、ディレクトリを無視する処理が変?

phpDocumentorで、PHPのファイルから、ドキュメントを自動生成できるといので使ってみているのですが、どうも動きが超遅い・・・。
なんだと思えば、見なくてもいいサブディレクトリ(数千~数万のファイルがある)まで見に行ってるので、そこで時間がかかってました。



「-i」オプションで、無視させることができるらしいのですが、無視していないように見えます。
というわけで調べてみました。



■ 再現用の環境



テスト用の環境を作っておきます。



  • 例題として、Console_GetOptを使いました。


  • 余計なサブディレクトリを作りました。


  • 「-is」オプションをつけると、「Symlink ... Ignored」というメッセージが表示されるので、phpDocumentorが中身をそのディレクトリを探索しているかどうか、観測できるので、適当にシンボリックリンクのファイルを配置しておきます。

% cp -pr /usr/local/share/pear/Console /tmp/
% cd /tmp/Console/
% ls
Getopt.php
% mkdir dir1
% mkdir dir1/dir2a
% mkdir dir1/dir2b
% mkdir dir1/dir2a/dir3
% ln -s /etc/motd dir1/mushi.txt
% ln -s /etc/motd dir1/dir2a/mushi.txt
% ln -s /etc/motd dir1/dir2b/mushi.txt
% ln -s /etc/motd dir1/dir2a/dir3/mushi.txt


■ 実行してみる


% cd /tmp
% phpdoc -is -i 'dir*' -d ./Console -t /tmp/doc/
PHP Version 5.2.5
phpDocumentor version 1.4.1



Parsing configuration file phpDocumentor.ini...
   (found in /usr/local/share/pear/data/PhpDocumentor/)...



done
Maximum memory usage set at 256M after considering php.ini...
using tokenizer Parser
Symlink /tmp/Console/dir1/dir2a/dir3/mushi.txt Ignored
Symlink /tmp/Console/dir1/dir2a/mushi.txt Ignored
Symlink /tmp/Console/dir1/dir2b/mushi.txt Ignored
Symlink /tmp/Console/dir1/mushi.txt Ignored



Grabbing README/INSTALL/CHANGELOG



(以下略)


「-i 'dir*'」オプションを指定しても、「dir1/dir2a」、「dir1/dir2a/dir3」など、奥深いところまで、サブディレクトリを探索しています。



■ ソースコードをながめたり、動作をおっかけてみたりしてみた



phpdocの挙動を追っかけていってみると、どうやら、最初に、ドカッ!と全部のファイルリストを取得してから、その後に、無視するかどうか、チェックしてました。



なにこの、富豪的プログラミングは!?



■ プログラムを改造してみた



最初のファイル一覧を作るところでも、無視するかどうかチェックする処理を追加してみました。



こんなパッチです。



「phpdocumentor.diff.txt」をダウンロード



表面的なとこだけ見て書いたので、すべてのケースできちんと動くかどうか、あまり厳密にチェックしていません。



また、適当にパパッと作っちゃったものなので、どうも、ちゃんと対応しきれていないらしく、「-i」で指定したディレクトリでも、1階層だけ、1度だけは、下っているみたいです。まぁ、いいか…



■ 改造後の動作

% phpdoc -is -i 'dir*' -d ./Console -t /tmp/doc/
PHP Version 5.2.5
phpDocumentor version 1.4.1



Parsing configuration file phpDocumentor.ini...
   (found in /usr/local/share/pear/data/PhpDocumentor/)...



done
Maximum memory usage set at 256M after considering php.ini...
using tokenizer Parser



Grabbing README/INSTALL/CHANGELOG

「Symlinkうんぬん」言われなくなったので、-iオプションで指定したサブディレクトリが、きちんと枝狩りされていると思います。



(ただ、先に書きましたが、どうも1階層だけは下ってから、無視するかのチェックをしているっぽいような…)。



■ 関連記事





0 件のコメント:

コメントを投稿