Namazu-devel-ja(旧)


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

Re: mknmz: symlinked target directory



さとうふみやすです。

At Thu, 16 Nov 2000 16:43:55 JST,
NOKUBI Takatsugu wrote:
> >> --replace=CODE を指定するときなどやっかいなので、これを
> >> 防ぐパッチ。

> $ mkdir symlink
> $ cd symlink && ln -s ../en .
> 
>   として、tests/ 以下で
> 
> $ mkdir idx14
> $ ../scripts/mknmz -O ./idx14 ./data/symlink/en
> 
>   とすると、
> 
> $ cat idx14/NMZ.field.uri
> /home/knok/namazu/build/namazu-current/tests/data/symlink/en/../en/acrobat3.pdf

>   こんな感じになってしまいます。2.0.5 ではこのような問題はありません。

うげ。すみません。`.', '..` の扱いを忘れていますね。
# 気にしてたのに、最後にはすっぱり忘れてしまった

$dh->read のループで `.', '..' をとばすようにしましたが、
UNIX 以外のプラットフォームでも大丈夫だろうか…。

--- mknmz.in.dist	Thu Oct  5 13:58:19 2000
+++ mknmz.in	Wed Nov 15 19:50:10 2000
@@ -36,6 +36,7 @@
 use strict;  # be strict since v1.2.0
 use Getopt::Long;
 use File::Copy;
+use DirHandle;
 
 use vars qw($SYSTEM $LANG);
 $SYSTEM = $^O;
@@ -1266,8 +1267,24 @@
 	if (-f $target) { # target is a file.
 	    add_target($target, \@flist, \%counts);
 	} elsif (-d $target) { # target is a directory.
-	    my $cwd = cwd();
-	    chdir $target;
+	    my @subtargets = ();
+
+	    # Find subdirectories in target directory
+	    # because File::Find::find() does not follow symlink.
+	    if (-l $target) {
+		my $dh = new DirHandle($target);
+		while (defined(my $ent = $dh->read)) {
+		    next if ($ent =~ /^\.{1,2}$/);
+		    my $fname = "$target/$ent";
+		    if (-d $fname) {
+			push(@subtargets, $fname);
+		    } else {
+			add_target($fname, \@flist, \%counts);
+		    }
+		}
+	    } else {
+		@subtargets = ($target);
+	    }
 
 	    #
 	    # Wanted routine for File::Find's find().
@@ -1277,8 +1294,7 @@
 		add_target($fname, \@flist, \%counts);
 	    };
 
-	    find($wanted_closure, cwd());
-	    chdir $cwd;
+	    find($wanted_closure, @subtargets);
 	} else {
 	    print STDERR _("unsupported target: ") . $target;
 	}


…

# +		    next if ($ent eq "." || $ent eq "..");
# のほうがよい?

…

# デ変研 DocCat の doccat に -p オプション (Office ドキュメントの
# プロパティも表示) が付いたんですが、誰か Namazu で対応して
# くれないかぁ。 :-)

-- 
SATOH Fumiyasu <fumiya@xxxxxxxxxxx> <fsatoh@xxxxxxxxx>
Samba-JP, aka `Samba Users Group Japan' - http://www.samba.gr.jp/
Digital Design Co., Ltd. Tokyo Office   - http://www.d-d.co.jp/