module Rakka.Storage.Impl
( getPage'
+ , putPage'
, startIndexManager
)
where
import Data.Maybe
import Data.Set (Set)
import qualified Data.Set as S
+import Network.HTTP.Lucu
import Network.URI
import Rakka.Page
import Rakka.Storage.DefaultPage
+import Rakka.Storage.Repos
import Rakka.Storage.Types
import Subversion.Types
+import Subversion.FileSystem
+import Subversion.Repository
import System.Directory
import System.FilePath
import System.IO
import System.Posix.Files
import System.Posix.Types
import System.Posix.IO
-import Subversion.FileSystem
-import Subversion.Repository
import Text.HyperEstraier hiding (WriteLock)
getPage' :: Repository -> PageName -> Maybe RevNum -> IO (Maybe Page)
-getPage' _repos name _rev
- = loadDefaultPage name -- FIXME
+getPage' repos name rev
+ = do page <- loadPageInRepository repos name rev
+ case page of
+ Nothing -> loadDefaultPage name
+ p -> return p
+
+
+putPage' :: Repository -> Page -> IO StatusCode
+putPage' = putPageIntoRepository
findAllPages :: Repository -> RevNum -> IO (Set PageName)
findAllPages _ 0 = findAllDefaultPages
-findAllPages _repos _rev
- = findAllDefaultPages -- FIXME
+findAllPages repos rev = do reposPages <- findAllPagesInRevision repos rev
+ defaultPages <- findAllDefaultPages
+ return (reposPages `S.union` defaultPages)
findChangedPages :: Repository -> RevNum -> RevNum -> IO (Set PageName)
findChangedPages repos 0 newRev = findAllPages repos newRev
-findChangedPages _repos _oldRev _newRev
- = fail "FIXME: not impl"
+findChangedPages repos oldRev newRev
+ = mapM (findChangedPagesAtRevision repos) [oldRev + 1 .. newRev]
+ >>=
+ return . S.unions
getCurrentRevNum :: Repository -> IO RevNum