+import System.Directory
+import System.FilePath
+import System.Log.Logger
+import Subversion.Repository
+import Text.HyperEstraier
+
+-- FIXME
+import Data.Encoding
+import Data.Encoding.UTF8
+import qualified Data.ByteString.Lazy.Char8 as C8
+-- FIXME
+
+logger = "Rakka.Storage"
+
+
+data Storage
+ = Storage {
+ stoIndexRevLocked :: !(TVar Bool)
+ , stoIndexRevFile :: !FilePath
+ , stoIndexDB :: !Database
+ , stoRepository :: !Repository
+ , stoMakeDraft :: !(Page -> IO Document)
+ }
+
+
+mkStorage :: FilePath -> Repository -> (Page -> IO Document) -> IO Storage
+mkStorage lsdir repos mkDraft
+ = do let indexDir = lsdir `combine` "index"
+ revFile = lsdir `combine` "indexRev"
+
+ revLocked <- newTVarIO False
+ indexDB <- openIndex indexDir revFile
+
+ let sto = Storage {
+ stoIndexRevLocked = revLocked
+ , stoIndexRevFile = revFile
+ , stoIndexDB = indexDB
+ , stoRepository = repos
+ , stoMakeDraft = mkDraft
+ }
+
+ syncIndex sto
+ return sto