ttt

getttyent

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

2008-04-18 23:59:00 | デジタル・インターネット

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階層だけは下ってから、無視するかのチェックをしているっぽいような…)。

■ 関連記事