Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug fix: mknmz-11 problem
竹迫です.
From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
Date: Wed, 11 Jul 2001 09:08:21 JST
> >> ちょっとこのままだと気持ち悪いので,この修正は取り込んだ方が
> >> 良いと思いますが,他の環境で不具合がありますでしょうか?
>
> うーん... <http://www.namazu.org/ml/namazu-devel-ja/msg01499.html>
> のパッチはあくまで test を通すための方便であって、本来は mknmz foo/bar
> とした時は foo/bar が symlink であろうとなかろうと動作すべきではないか
> と思っています。
確かにその通りですね.(^^;
symbolic link は,OSの環境や処理系によって取り扱いが変わってくるので,
ちょっとややこしい部分ではありますが...
> 本当は fix したいところなのですが、今のところ問題をきちんと修正でき
> ていない(というか CVS co した working directory 上では問題が再現しない
> のはなぜだ...)ので、それを明らかにしておくためにも、単にtest を通すた
> めだけのパッチをあてるのは良くないのではないでしょうか。
ということで,ちょっと真面目にこの問題に取り組んだところ,
mknmz で File::Find の find() 関数を呼び出すときの
第2引数が空になってしまっているのが原因のようでした.
以下のような簡単なチェックスクリプトを書いて,実行したところ,
#!/usr/bin/perl
use File::Find;
my @dirs = ();
sub wanted {;}
find(\&wanted, @dirs);
Perl 5.005 以下のバージョンでは何も起こらず
Perl 5.6 以降ではエラーが発生することがわかりました.
# 新しいモジュール内でのエラーチェックが甘いようです...(^^;
実際の mknmz のスクリプトでは,find_target()サブルーチンの中で
my $wanted_closure = sub {
my $fname = "$File::Find::dir/$_";
add_target($fname, \@flist, \%counts);
};
find($wanted_closure, @subtargets);
として,サブディレクトリ中のファイルに対しても add_target()
するようにしており,ターゲットが directory の場合は自分自身
のディレクトリを @subtargets に入れて呼び出しています.
しかし,ターゲットが symbolic link である場合は,DirHandle() を
使ってディレクトリをサーチして,ファイルであれば add_target(),
ディレクトリであれば @subtargets に追加して find() を呼び出す
ということをしています.
ここで,symbolic link 以下にサブディレクトリがない場合は,
@subtargets が空のままで上記の find() が呼び出されるので,
Perl5.6以降ではエラーになってしまいます.
cvs から checkout した working directory 上で,問題が発生しなかっ
たのは,ターゲットディレクトリ上に CVS というサブディレクトリが
あったためだと思われます.
試しに,mkdir tests/data/symlink/dummy として make check すると
Perl5.6 以降でも mknmz-11 は PASS します.
<http://www.namazu.org/ml/namazu-devel-ja/msg01499.html> のパッチ
でうまくいくのは,後ろに / がついているものに対して Perl のファイ
ルテスト演算子をかけると,symbolic link ではなく directory として
判断されるためみたいです.
> BUGS というドキュメントでも作成して、これを含めた既知の問題点をあら
> かじめ列挙しておいた方が良いように思うのですが、いかがでしょう?
そうですね.やはりこの問題は mknmz のバグのようでした.
さきほど mknmz.in に対してバグ修正を stable-2-0 に commit しましたので,
テストしていただけるとありがたいです.
--
広島市立大学 情報科学部 情報機械システム工学科 知能ロボット講座
竹迫 良範 <takesako@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>