16 import Control.Arrow.ArrowIO
17 import Control.Concurrent.STM
19 import Control.Monad.Trans
22 import Rakka.Storage.Impl
23 import Rakka.Storage.Types
24 import Subversion.Types
26 import Subversion.Repository
27 import Text.HyperEstraier hiding (WriteLock)
29 logger = "Rakka.Storage"
32 mkStorage :: FilePath -> Repository -> (Page -> IO Document) -> IO Storage
33 mkStorage lsdir repos mkDraft
34 = do chan <- startIndexManager lsdir repos mkDraft
43 getPage :: MonadIO m => Storage -> PageName -> Maybe RevNum -> m (Maybe Page)
44 getPage = ((liftIO .) .) . getPage' . stoRepository
47 putPage :: MonadIO m => Storage -> Page -> RevNum -> m ()
48 putPage sto page oldRev
49 = error "FIXME: not implemented"
52 getPageA :: ArrowIO a => Storage -> a (PageName, Maybe RevNum) (Maybe Page)
53 getPageA = arrIO2 . getPage
56 putPageA :: ArrowIO a => Storage -> a (Page, RevNum) ()
57 putPageA = arrIO2 . putPage
60 searchPages :: MonadIO m => Storage -> Condition -> m [(PageName, RevNum)]
63 do var <- newEmptyTMVarIO
64 atomically $ writeTChan (stoIndexChan sto) (SearchIndex cond var)
65 atomically $ takeTMVar var
68 syncIndex :: Storage -> IO ()
70 = atomically $ writeTChan (stoIndexChan sto) SyncIndex