18 import Control.Arrow.ArrowIO
19 import Control.Concurrent.STM
21 import Control.Monad.Trans
24 import Rakka.Storage.Impl
25 import Rakka.Storage.Types
26 import Subversion.Types
28 import Subversion.Repository
29 import Text.HyperEstraier hiding (WriteLock)
31 logger = "Rakka.Storage"
34 mkStorage :: FilePath -> Repository -> (Page -> IO Document) -> IO Storage
35 mkStorage lsdir repos mkDraft
36 = do chan <- startIndexManager lsdir repos mkDraft
45 getPage :: MonadIO m => Storage -> PageName -> Maybe RevNum -> m (Maybe Page)
46 getPage = ((liftIO .) .) . getPage' . stoRepository
49 putPage :: MonadIO m => Storage -> Page -> RevNum -> m ()
50 putPage sto page oldRev
51 = error "FIXME: not implemented"
54 getPageA :: ArrowIO a => Storage -> a (PageName, Maybe RevNum) (Maybe Page)
55 getPageA = arrIO2 . getPage
58 putPageA :: ArrowIO a => Storage -> a (Page, RevNum) ()
59 putPageA = arrIO2 . putPage
62 searchPages :: MonadIO m => Storage -> Condition -> m [(PageName, RevNum)]
65 do var <- newEmptyTMVarIO
66 atomically $ writeTChan (stoIndexChan sto) (SearchIndex cond var)
67 atomically $ takeTMVar var
70 rebuildIndex :: MonadIO m => Storage -> m ()
72 = liftIO $ atomically $ writeTChan (stoIndexChan sto) RebuildIndex
75 syncIndex :: Storage -> IO ()
77 = atomically $ writeTChan (stoIndexChan sto) SyncIndex