[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 メーリングリストの案内