2010年8月22日

[mew-dist 29273] Re:cmewが例外で終わる

細田です。

もうひとつ 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@xxxxx>


投稿者 xml-rpc : 2010年8月22日 22:25
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97859
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。