[mew-win32 4587] Re: Haskell 版 cmew の差分更新

Masamichi HOSODA trueroad at example.com
2011年 9月 9日 (金) 00:04:03 JST


細田です。

Windows 用の Haskell 版 cmew の動作で、
差分更新がうまくいかない件について、
なんとなく原因がわかりました。

とりあえず以下のパッチで差分更新できるようになります。
ただし、他の OS だと、恐らく副作用があって、
本来意図した動作ではなくなってしまうかと思います。

原因は、Windows だと getChangeTime が常に Nothing を返してしまうため、
ファイル変更時刻が取得できず、すべてのファイルが変更なし、
とみなされてしまうため、と思われます。

とりあえず以下のパッチでは getChangeTime のかわりに
getModificationTime を使うようにしてみただけです。

本来は、他の OS の動作も考えると、
getChangeTime が Nothing を返したときだけ、
getModificationTime を使うようにする、とかすべきかと思いますが、
どうやって書けばいいのか分からず、力尽きました…。

--- Index.hs.org	2011-09-06 17:54:08.000000000 +0900
+++ Index.hs	2011-09-08 23:49:13.893982300 +0900
@@ -190,10 +190,8 @@
         exist <- doesFileExist file
         if exist
            then do
-            tm <- getChangeTime file
-            case tm of
-                Just x  -> return . (dbmt <) . utctimeToInteger $ x
-                Nothing -> return False
+            tm <- getModificationTime file
+            return . (dbmt <) . utctimeToInteger $ tm
            else return False
     deleteMsgIfMoved msg = case dbModTime ctl of
       Nothing   -> return True

 細田 真道 <trueroad at example.com>


Mew-win32 メーリングリストの案内