[Mew-dist 12709] タイムスタンプを使うimmknmz
KOIE Hidetaka ( 鯉江英隆 )
hide at example.com
2000年 3月 22日 (水) 13:28:32 JST
immknmzを便利につかっていますが
マシンが非力なためmknmzがフォルダをスキャンするだけでも時間がかかります。
そこで~/Namazuディレクトリにタイムスタンプ用のファイルを置いて
~/Mailにあるフォルダとlast modified timeの比較をして
高速化するパッチをつくりました。immknmz -tオプションで有効になります。
ただ mew-summary-ls を実行すると
フォルダ(ディレクトリ)のタイムスタンプも更新されるので
無駄にmknmzが走ることがあります。
(フォルダのmtimeを更新する理由は忘れてしまいました)
1.リファイルする。
2.immknmzを実行。
3.リファイル先のフォルダに移動
(自動でscanされる)
4. immknmzを実行。
(本当ならスキップしてほしいところだが
mknmzが走ってしまう。)
--
KOIE Hidetaka 鯉江英隆 <hide at example.com>
-------------- next part --------------
--- immknmz.in.orig Mon Feb 28 12:54:19 2000
+++ immknmz.in Wed Mar 22 10:32:57 2000
@@ -32,7 +32,7 @@
use IM::Util;
use IM::Folder;
use strict;
-use vars qw($Prog $EXPLANATION @OptConfig $opt_help $opt_gcnmz $opt_verbose);
+use vars qw($Prog $EXPLANATION @OptConfig $opt_help $opt_gcnmz $opt_verbose $opt_timestamp);
$EXPLANATION = "
$Prog :: mew-nmz-mknmz-all-folders
@@ -44,6 +44,7 @@
@OptConfig = (
'gcnmz;b;;' => "Use gcnmz after mknmz (Garbage Collection for Namazu index).",
'verbose;b;;' => "With verbose messages.",
+ 'timestamp;b;;' => "Use checking time stamp.",
'help;b;;' => "Show this message.",
);
@@ -52,6 +53,14 @@
read_opt(\@ARGV);
help($EXPLANATION) && exit $EXIT_SUCCESS if $opt_help;
+sub get_mtime {
+ my ($path) = @_;
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,
+ $rdev,$size,$atime,$mtime,$ctime,
+ $blksize,$blocks) = stat($path) or return -1;
+ return $mtime;
+}
+
my $mailpath = mail_path()."/";
my $namazupath = home_dir()."/$nmzdir/".mail_dir()."/";
my $mknmz_args = "-q";
@@ -69,6 +78,7 @@
my $ret;
my @filelist;
my $tempfile;
+my $timestamp;
if ( $ENV{'TEMP'} eq "" ){
if ( $ENV{'TMP'} eq "" ){
$tempfile = "/tmp"; # UNIX system, may be.
@@ -106,6 +116,17 @@
$msgdir = $msgfolder;
$nmzfolder =~ s/^\+/$namazupath/g;
+ $timestamp = "$nmzfolder/NMZ.stamp";
+ if ($opt_timestamp) {
+ if (get_mtime("$msgfolder") < get_mtime("$timestamp")) {
+ print "index of $msgfolder may be up to date.\n" if $opt_verbose;
+ next;
+ }
+ }
+ im_open(\*STAMP,">$timestamp.tmp");
+ print STAMP "timestamp for immknmz.";
+ close(STAMP);
+
opendir(DIR,$msgfolder);
@filelist = grep(/^[0-9]*$/ && -f "$msgfolder/$_",readdir(DIR));
closedir(DIR);
@@ -157,6 +178,7 @@
}
}
}
+ rename("$timestamp.tmp", "$timestamp");
}
}
close(FILE);
Mew-dist メーリングリストの案内