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
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