X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FStorage%2FImpl.hs;h=2c36f516c2a012dfe64189ca3adaca0fa5da924c;hb=044a917ed3908780479b759ac772e1545616c7fc;hp=c3246929257076dc45ab8ce541d7551a232a1550;hpb=7a4f13a3d483c950743e1ced001ade4406d239d3;p=Rakka.git diff --git a/Rakka/Storage/Impl.hs b/Rakka/Storage/Impl.hs index c324692..2c36f51 100644 --- a/Rakka/Storage/Impl.hs +++ b/Rakka/Storage/Impl.hs @@ -1,5 +1,7 @@ module Rakka.Storage.Impl ( getPage' + , putPage' + , deletePage' , startIndexManager ) where @@ -11,11 +13,15 @@ import Control.Monad 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 @@ -23,8 +29,6 @@ import System.Log.Logger import System.Posix.Files import System.Posix.Types import System.Posix.IO -import Subversion.FileSystem -import Subversion.Repository import Text.HyperEstraier hiding (WriteLock) @@ -33,20 +37,34 @@ logger = "Rakka.Storage" 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 + + +deletePage' :: Repository -> PageName -> IO StatusCode +deletePage' = deletePageFromRepository 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