[Mew-dist 08456] Re: im-111 で急に遅くなった imls
SAKAI Kiyotaka
ksakai at example.com
1999年 4月 2日 (金) 19:54:40 JST
>> In article <19990402181006C.kazu at example.com>, Kazu Yamamoto (山本和彦) <kazu at example.com> writes:
>> いつディレクトリかどうかのチェックをするにしても、必ず一つずつするので
>> したら、総所要時間の面で改善されない気がしますが、勘違いでしょうか?
> ああ、sort などのように内容を表示しないコマンドですね。
やっとこの意味が分かりました。
imls だと、update 等のレンジを指定した使われ方が主なので、フォルダ内を
チェックした時点ではファイルかどうかを調べる必要はなく、実際に scan の
内容を表示する時点で scan 対象のファイルだけを調べてば充分だということ
ですね。
imsort 等はどのみちファイル操作を行うのだから誤差の範囲内だろうし、も
しリンクカウントをチェックした方が明かに速いのであれば imsort 等でやれ
ばいいという気がしてきました。
>> In article <19990402173406K.kazu at example.com>, Kazu Yamamoto (山本和彦) <kazu at example.com> writes:
>> ただ、考えてみたら immv, imsort, impack にも同じようにソート等を行う間
>> 際にファイルかどうかチェックを行うコードを追加するという方法はありまし
>> たね。
> そのように変更して下さい。
この方針で作ったパッチを送ります。
UseNumericFolder のパッチは破棄し、immv 関連のパッチを当ててから当たる
ようになっているはずです。
--
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
Index: IM/Folder.pm
===================================================================
RCS file: /home/ksakai/cvsroot/im-113/IM/Folder.pm,v
retrieving revision 1.1
diff -u -r1.1 Folder.pm
--- Folder.pm 1999/04/02 01:11:40 1.1
+++ Folder.pm 1999/04/02 08:58:38
@@ -140,7 +140,7 @@
my @filesinfolder;
opendir(DIR, $folder_dir) || im_die("can't open $folder_dir.\n");
- @filesinfolder = sort {$a <=> $b} grep(/^\d+$/ && -f "$folder_dir/$_", readdir(DIR));
+ @filesinfolder = sort {$a <=> $b} grep(/^\d+$/, readdir(DIR));
closedir(DIR);
return @filesinfolder;
Index: impack.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-113/impack.in,v
retrieving revision 1.1
diff -u -r1.1 impack.in
--- impack.in 1999/04/02 01:11:40 1.1
+++ impack.in 1999/04/02 08:57:48
@@ -85,9 +85,13 @@
foreach (@paths) {
$dst = $_;
- $dst =~ s|[^/]+$|$msg++|e;
- if ($_ ne $dst){
- im_rename($_, $dst) || die $@; # XXX
+ if (-f $dst) {
+ do {
+ $dst =~ s|[^/]+$|$msg++|e;
+ } while ($_ ne $dst && -e $dst);
+ if ($_ ne $dst){
+ im_rename($_, $dst) || die $@; # XXX
+ }
}
}
Index: imsort.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-113/imsort.in,v
retrieving revision 1.1
diff -u -r1.1 imsort.in
--- imsort.in 1999/04/02 01:11:40 1.1
+++ imsort.in 1999/04/02 08:57:48
@@ -108,17 +108,18 @@
sub imsort ($$$$) {
my ($src, $msgs, $mode, $field) = @_;
- my ($i, $path, $from, $to, $tmp, @msg_paths, @sorted_index);
+ my ($i, $path, $from, $to, $tmp, @msg_all, @msg_paths, @sorted_index);
my @param = ();
my $HOLE_PATH = get_impath($src, 'new');
- @msg_paths = get_impath($src, @{$msgs});
+ @msg_all = get_impath($src, @{$msgs});
- foreach $path (@msg_paths){
- im_die "No file $path in $src. (Nothing was done.)\n"
- if (!-f $path);
- push(@param, get_field_value($path, $field, $mode));
+ foreach $path (@msg_all) {
+ if (-f $path) {
+ push(@msg_paths, $path);
+ push(@param, get_field_value($path, $field, $mode));
+ }
}
if (($mode eq 'text') || ($mode eq 'ml')) {
@sorted_index = sort { $param[$a] cmp $param[$b] } 0 .. $#msg_paths;
Index: immv.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-113/immv.in,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- immv.in 1999/04/02 08:54:01 1.3
+++ immv.in 1999/04/02 08:57:23 1.4
@@ -124,10 +124,6 @@
$opt_link = 1 if (grep($src eq $_, @{$dsts}));
@{$dsts} = grep($src ne $_, @{$dsts});
- if ($src =~ /^[+=]/) {
- chk_msg_existance($src, @{$msgs});
- }
-
if (($imap_src && imap_open_folders(0, $src) < 0) ||
($imap_dst && imap_open_folders(1, @imap_dsts) < 0))
{
@@ -156,7 +152,7 @@
my @msg_paths = get_impath($src, @$msgs);
foreach (@msg_paths) {
- refile_one($src, $dsts, $_);
+ refile_one($src, $dsts, $_) if (-f $_);
}
}
@@ -217,7 +213,7 @@
foreach $msg (@$msgs) {
my $src_path = get_impath($src, ($msg));
- imap_put_file($src, $dsts, $src_path);
+ imap_put_file($src, $dsts, $src_path) if (-f $src_path);
}
}
Index: imrm.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-113/imrm.in,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- imrm.in 1999/04/02 08:54:02 1.3
+++ imrm.in 1999/04/02 08:57:23 1.4
@@ -119,10 +119,6 @@
chk_folder_existance($src, @{$dsts});
- if ($src =~ /^[+=]/) {
- chk_msg_existance($src, @{$msgs});
- }
-
if (($imap_src && imap_open_folders(0, $src) < 0) ||
($imap_dst && imap_open_folders(1, @imap_dsts) < 0))
{
@@ -151,7 +147,7 @@
my @msg_paths = get_impath($src, @$msgs);
foreach (@msg_paths) {
- refile_one($src, $dsts, $_);
+ refile_one($src, $dsts, $_) if (-f $_);
}
}
@@ -210,7 +206,7 @@
foreach $msg (@$msgs) {
my $src_path = get_impath($src, ($msg));
- imap_put_file($src, $dsts, $src_path);
+ imap_put_file($src, $dsts, $src_path) if -f ($src_path);
}
}
Mew-dist メーリングリストの案内