Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

数字で始まるファイルを認識しません



寺西です。

Win32 版 Namazu のテストを行ったところ、ファイル名が数字で始まる場合は
インデックスの作成対象から外されます。

UNIX 版では起こらないと思いますが、例えば 1.doc, 1.xls, 1.txt という
ファイル名の場合に起こります。
リネームして a.doc, a.xls, a.txt とした場合は、正常に動作すること
を確認しました。
また ./1.doc, /path/1.xls, c:\path\1.txt のようにパスを指定すると
大丈夫です。
これはとても妙な動作です。

ちょっと調べてみたところ、mknmz.in のソース
sub add_target の

    $target =~ m!^.*/([^/]+)$!;
    my $fname = $1;

    if ($fname =~ m!^($conf::DENY_FILE)$!i ) {
        util::vprint(sprintf(_("Denied: %s"), $target));
        $counts_ref->{'denied'}++;
        return;
    }
    if ($fname !~ m!^($conf::ALLOW_FILE)$!i) {
        util::vprint(sprintf(_("Not allowed:    %s"), $target));
        $counts_ref->{'not_allowed'}++;
        return;

ここで Not allowd: になります。そしてその時、$fname が空に
なっています。
どうやら $target =~ m!^.*/([^/]+)$!; で空になるようですが、
ここではフルパスを期待しているにもかかわらず、$target がフルパス
になっていません。(UNIX ではフルパスになる)

更に調べたところ

sub absolute_path($$) {
    my ($cwd, $path) = @_;

    return $path if (util::isurl($path));
    $path =~ s!^\.$!\./!;
    $path =~ s!^\.[/\\]!$cwd/!;
    if (($SYSTEM eq "MSWin32") || ($SYSTEM eq "os2")) {
            $path =~
s!([\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]|[\x01-\x7f])!
            $1 eq "\\" ? "/" : $1!gex;
        $path =~ s,^([A-Z](?!:/)),$cwd/$1,i;

となっており、どうやら A: といったドライブ表現でない
アルファベットで始まるファイル名の場合はフルパスになるようです。

最後の行を

         unless ($path =~ m!^(?:[A-Z]:/|/)!i) {
             $path = "$cwd/$path";
         }

と修正すれば改善しそうですが、なにせ Win32 環境で Namazu を使ったこと
がほとんどないため、他に悪影響を与えないかどうか自信が持てません。
何方か悪影響がないことをご確認いただけないでしょうか?

問題がないようであれば、早々に commit したいと思います。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E