X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FStorage%2FImpl.hs;h=304b8178384463fc05dd86eba72daa0035f2c2ea;hb=223d4df57fa1371945075d4d2714e5f36c1fc5dd;hp=442c412fb4966f906598155227c115dec48e75e2;hpb=4abf7df08bf0a614ea8179e8d1d69a17aac4f197;p=Rakka.git diff --git a/Rakka/Storage/Impl.hs b/Rakka/Storage/Impl.hs index 442c412..304b817 100644 --- a/Rakka/Storage/Impl.hs +++ b/Rakka/Storage/Impl.hs @@ -12,11 +12,13 @@ module Rakka.Storage.Impl import Control.Concurrent import Control.Concurrent.STM +import Control.Exception import Control.Monad import Data.Maybe import Data.Set (Set) import qualified Data.Set as S import Data.Time +import qualified Data.Time.W3C as W3C import Network.HTTP.Lucu import Network.HTTP.Lucu.Utils import Network.URI @@ -26,7 +28,6 @@ import Rakka.Page import Rakka.Storage.DefaultPage import Rakka.Storage.Repos import Rakka.Storage.Types -import Rakka.W3CDateTime import Subversion.Types import Subversion.FileSystem import Subversion.Repository @@ -68,9 +69,7 @@ findAllPages repos rev = do reposPages <- findAllPagesInRevision repos rev findChangedPages :: Repository -> RevNum -> RevNum -> IO (Set PageName) findChangedPages repos 0 newRev = findAllPages repos newRev findChangedPages repos oldRev newRev - = mapM (findChangedPagesAtRevision repos) [oldRev + 1 .. newRev] - >>= - return . S.unions + = liftM S.unions (mapM (findChangedPagesAtRevision repos) [oldRev + 1 .. newRev]) getDirContents' :: Repository -> PageName -> Maybe RevNum -> IO [PageName] @@ -109,7 +108,7 @@ startIndexManager :: FilePath -> Repository -> (Page -> IO Document) -> IO (TCha startIndexManager lsdir repos mkDraft = do chan <- newTChanIO index <- openIndex indexDir revFile - forkIO (loop chan index) + _ <- forkIO (loop chan index `finally` closeDatabase index) return chan where indexDir = lsdir "index" @@ -210,13 +209,11 @@ searchIndex index cond fromId words docId = do uri <- getDocURI index docId rev <- unsafeInterleaveIO $ - getDocAttr index docId "rakka:revision" - >>= - return . read . fromJust + liftM (read . fromJust) + (getDocAttr index docId "rakka:revision") lastMod <- unsafeInterleaveIO $ - getDocAttr index docId "@mdate" - >>= - return . zonedTimeToUTC . fromJust . parseW3CDateTime . fromJust + liftM (zonedTimeToUTC . fromJust . W3C.parse . fromJust) + (getDocAttr index docId "@mdate") summary <- unsafeInterleaveIO $ getDocAttr index docId "rakka:summary" snippet <- unsafeInterleaveIO $ @@ -267,7 +264,7 @@ updateIndexRev revFile f = withFile revFile ReadWriteMode update rev <- if eof then return 0 else - hGetLine h >>= return . read + liftM read (hGetLine h) rev' <- f rev hSeek h AbsoluteSeek 0 hSetFileSize h 0