import Control.Concurrent
import Control.Concurrent.STM
+import Control.Exception
import Control.Monad
import Data.Maybe
import Data.Set (Set)
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]
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"
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 . parseW3CDateTime . fromJust)
+ (getDocAttr index docId "@mdate")
summary <- unsafeInterleaveIO $
getDocAttr index docId "rakka:summary"
snippet <- unsafeInterleaveIO $
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