[mew-dist 29273] Re: cmewが例外で終わる
Masamichi HOSODA
trueroad at example.com
2010年 8月 22日 (日) 22:25:46 JST
細田です。
もうひとつ ruby 版 cmew で問題を見つけました。
DB 既登録のメールと同じ Message-ID を持つメールを、
別の未登録の path で見つけると止まってしまいます。
古いメールを f で転送した時に発生しました。
他にも refile した後などにも出ると思います。
cmew -f であれば全メールが未登録になるので、出ません。
cmew の 169 行目、
get_entry.execute!(id) do |row|
は、row が hash になることを期待しているようですが、
実際には、この書き方だと以下のように array になってしまいます。
[#28463] Difference between Statement#execute and Statement#execute!
http://rubyforge.org/tracker/index.php?func=detail&aid=28463&group_id=254&atid=1043
そのため 170 行目
past_path = row['path']
で、row は array なのに 'path' を取り出そうとしているので、
止まってしまいます。
とりあえず以下のパッチで問題なくなりました。
--- cmew.org 2010-08-03 02:26:48.000000000 +0900
+++ cmew 2010-08-21 16:20:24.000000000 +0900
@@ -166,7 +166,7 @@
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)
細田 真道 <trueroad at example.com>
Mew-dist メーリングリストの案内