$NetBSD: patch-ac,v 1.2 2011/09/12 16:27:18 taca Exp $

* Portability with Ruby 1.9 and later:

	Use own class to get mail header instead of using mailread.

* Two fixes for cmew problem:

	http://www.mew.org/pipermail/mew-dist/2010-August/028963.html
	http://www.mew.org/pipermail/mew-dist/2010-August/028962.html

--- bin/cmew.orig	2009-09-09 00:57:27.000000000 +0000
+++ bin/cmew
@@ -13,7 +13,31 @@ require 'sqlite3'
 require 'time'
 require 'fileutils'
 require 'find'
-require 'mailread'
+
+################################################################
+##
+## mail_header
+##
+##	Get header from mail message.  If multiple header field
+##	exists, last one will be used.
+##
+def mail_header(path)
+  @header = {}
+  value = nil
+  File.open(path) do |f|
+    while l = f.gets.chomp
+      next if /^From / =~ l
+      break if /^$/ =~ l
+      if /^\s+/ !~ l
+        (name, value) = l.split(/:\s+/, 2)
+        @header[name.downcase] = value
+      else
+        value << $'
+      end
+    end
+  end
+  return @header
+end
 
 ################################################################
 ##
@@ -127,6 +151,8 @@ def register(db, maildir, ignore_regex, 
   deleted = 0
   skipdir = ''
 
+begin
+
   Find.find(target) do |fpath|
     if fpath =~ ignore_regex
       if FileTest.directory?(fpath)
@@ -135,7 +161,7 @@ def register(db, maildir, ignore_regex, 
       end
       # next
     else
-      st = File.lstat(fpath)
+      st = File.lstat(fpath) rescue next
       if st.symlink?
         if FileTest.directory?(fpath)
           print fpath, " (ignored)\n"
@@ -159,14 +185,14 @@ def register(db, maildir, ignore_regex, 
       elsif st.file? and fpath =~ /\/[0-9]+(\.mew)?$/
         next if File.dirname(fpath) == skipdir
         next if last_mod > st.ctime.tv_sec
-        m = Mail.new(fpath)
+        m = mail_header(fpath) rescue next
         id = get_id(m)
         parid = get_parid(m)
         date = get_date(m)
         path = get_path(fpath)
         newpath = true
         if last_mod > 0
-          get_entry.execute!(id) do |row|
+            get_entry.execute(id).each do |row|
             past_path = row['path']
             unless File.exist?(past_path)
               del_entry.execute(id, past_path)
@@ -183,10 +209,16 @@ def register(db, maildir, ignore_regex, 
       end
     end
   end
+
+ensure
+
   add_entry.close
   get_entry.close
   del_entry.close
   print 'Registered: ',  registred, ', deleted: ', deleted, "\n"
+
+end
+
 end
 
 ################################################################
@@ -209,7 +241,7 @@ OptionParser.new {|opt|
 
 db_file = ARGV[0] || File.expand_path('~/Mail/id.db')
 maildir = ARGV[1] || File.expand_path('~/Mail')
-ignore_regex = Regexp.new(ARGV[2] || '^\./casket$|^\./casket/|/\.')
+ignore_regex = Regexp.new(ARGV[2] || '^\./casket$|^\./casket/|^\./casket_replica$|^\./casket_replica/|/\.')
 target = if ARGV[3]; './' + ARGV[3] else '.' end
 have_target = if ARGV[3]; true else false end
 fullupdate = opts[:f] == true
