[Mew-dist 11504] Re: immv to large size directory

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
1999年 11月 28日 (日) 00:14:00 JST


From: yamagata at example.com
Subject: [Mew-dist 11497] immv to large size directory

> 一つのfolderに1万通とか2万通のmailをつっこんでいると
> directoryがむちゃくちゃ大きくなるせいか、
> そのfolderにimmvすると「ウッ」てかんじでかなり詰まります。

IM/Folder.pm がアホなせいかもしれません。

最大の値を探すだけなのに、メッセージを全部なめ、ソートして、しかもその
結果を使っていない。

以下のパッチを当てると少しはまともになりますか?

--かず@IM 捨てたい
-------------- next part --------------
? SetVersion
Index: immv.in
===================================================================
RCS file: /usr/home/kazu/cvsroot/Mew/im/immv.in,v
retrieving revision 1.57
retrieving revision 1.58
diff -c -r1.57 -r1.58
*** immv.in	1999/11/23 22:24:36	1.57
--- immv.in	1999/11/27 15:15:11	1.58
***************
*** 188,196 ****
  	if ($NewMsgCache{$dst}){
  	    $NewMsgCache{$dst} =~ s|([^/]+)$|$1+1|e; # increment cache
  	    $dst_path = $NewMsgCache{$dst};
! 	    } else {
! 		$dst_path = $NewMsgCache{$dst} = get_impath($dst, 'new');
! 	    }
  	if ($opt_link && $src ne "") {
  	    im_link($msg, $dst_path) || die $@;
  	} elsif ($link_it) {
--- 188,196 ----
  	if ($NewMsgCache{$dst}){
  	    $NewMsgCache{$dst} =~ s|([^/]+)$|$1+1|e; # increment cache
  	    $dst_path = $NewMsgCache{$dst};
! 	} else {
! 	    $dst_path = $NewMsgCache{$dst} = get_impath($dst, 'new');
! 	}
  	if ($opt_link && $src ne "") {
  	    im_link($msg, $dst_path) || die $@;
  	} elsif ($link_it) {
Index: IM/Folder.pm
===================================================================
RCS file: /usr/home/kazu/cvsroot/Mew/im/IM/Folder.pm,v
retrieving revision 1.45
retrieving revision 1.46
diff -c -r1.45 -r1.46
*** Folder.pm	1999/11/23 22:24:39	1.45
--- Folder.pm	1999/11/27 15:15:11	1.46
***************
*** 277,282 ****
--- 277,298 ----
  	return ();
      }
  
+     # ad hoc but fast
+     if (scalar(@messages0) == 1 && $messages0[0] eq 'new') {
+ 	local(*MDIR);
+ 	my(@msgs, $i);
+ 	my $max = "1";
+ 	opendir(MDIR, $folder_dir) || im_die("can't open $folder.\n");
+ 	@msgs = grep(/^\d+$/, readdir(MDIR));
+ 	closedir(MDIR);
+ 	foreach $i (@msgs) {
+ 	    if ($max < $i) {
+ 		$max = $i;
+ 	    }
+ 	}
+ 	return $max;
+     }
+ 
      my @filesinfolder = message_list($folder_dir);
  
      @messages = @x = ();


Mew-dist メーリングリストの案内