X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Rakka.git;a=blobdiff_plain;f=Rakka%2FStorage%2FRepos.hs;h=09bd8f3b40e4f4dce879577a66b60b3c88cf67f3;hp=b74f48cb36bb862c92399bb595fd38557996813b;hb=4f689140d417db80cfa94e932dcfdbfdd428d8c7;hpb=f1016753ef45a4c25745ccb6e81e5acbc085cc42 diff --git a/Rakka/Storage/Repos.hs b/Rakka/Storage/Repos.hs index b74f48c..09bd8f3 100644 --- a/Rakka/Storage/Repos.hs +++ b/Rakka/Storage/Repos.hs @@ -226,16 +226,25 @@ putPageIntoRepository repos userID page if denied then return Forbidden else - do ret <- doReposTxn + do rev <- if oldRev == 0 then + getRepositoryFS repos >>= getYoungestRev + else + return oldRev + ret <- doReposTxn repos - (uiOldRevision ui) + rev author (Just "Automatic commit by Rakka for page update") - $ do case uiOldName ui of + $ do + case uiOldName ui of Nothing -> return () - Just oldName -> movePage (uiOldRevision ui) oldName name - >> - moveAttachments (uiOldRevision ui) oldName name + Just oldName -> do exists <- isFile (mkPagePath oldName) + when (exists) + $ do movePage (uiOldRevision ui) oldName name + moveAttachments (uiOldRevision ui) oldName name + exists <- isFile (mkPagePath name) + unless (exists) + $ createPage name updatePage name case ret of Left _ -> return Conflict @@ -258,10 +267,14 @@ putPageIntoRepository repos userID page checkDenial rev name = do fs <- getRepositoryFS repos withRevision fs rev - $ do prop <- getNodeProp (mkPagePath name) "rakka:isLocked" - case prop of - Just _ -> return (isNothing userID) -- 施錠されてゐるので匿名では駄目 - Nothing -> return False + $ do exists <- isFile (mkPagePath name) + if exists then + do prop <- getNodeProp (mkPagePath name) "rakka:isLocked" + case prop of + Just _ -> return (isNothing userID) -- 施錠されてゐるので匿名では駄目 + Nothing -> return False + else + return False -- FIXME: 本當は defaultPage の locked 屬性をどうのこうの… movePage :: RevNum -> PageName -> PageName -> Txn () movePage oldRev oldName newName