Return sorted PatchId list from the get*Patch functions

This commit is contained in:
fr33domlover 2020-05-26 08:41:02 +00:00
parent e68a659221
commit ad8c0ce8b4
2 changed files with 20 additions and 18 deletions

View file

@ -100,9 +100,9 @@ getSharerPatchesR =
getSharerPatchR
:: ShrIdent -> KeyHashid TicketAuthorLocal -> Handler TypedContent
getSharerPatchR shr talkhid = do
(ticket, repo, massignee, ptids') <- runDB $ do
(_, _, Entity tid t, tp) <- getSharerPatch404 shr talkhid
(,,,) t
(ticket, ptids, repo, massignee) <- runDB $ do
(_, _, Entity tid t, tp, ptids) <- getSharerPatch404 shr talkhid
(,,,) t ptids
<$> bitraverse
(\ (_, Entity _ trl) -> do
r <- getJust $ ticketRepoLocalRepo trl
@ -125,11 +125,6 @@ getSharerPatchR shr talkhid = do
p <- getJust pidAssignee
getJust $ personIdent p
)
<*> selectKeysList [PatchTicket ==. tid] [Desc PatchId]
let ptids =
case NE.nonEmpty ptids' of
Nothing -> error "No patches found!"
Just ne -> ne
hLocal <- getsYesod siteInstanceHost
encodeRouteLocal <- getEncodeRouteLocal
encodeRouteHome <- getEncodeRouteHome
@ -197,7 +192,7 @@ getSharerPatchDiscussionR
:: ShrIdent -> KeyHashid TicketAuthorLocal -> Handler TypedContent
getSharerPatchDiscussionR shr talkhid =
getRepliesCollection (SharerPatchDiscussionR shr talkhid) $ do
(_, Entity _ lt, _, _) <- getSharerPatch404 shr talkhid
(_, Entity _ lt, _, _, _) <- getSharerPatch404 shr talkhid
return $ localTicketDiscuss lt
getSharerPatchDeps
@ -210,7 +205,7 @@ getSharerPatchDeps forward shr talkhid =
if forward then SharerPatchDepsR else SharerPatchReverseDepsR
in route shr talkhid
getTicketId404 = do
(_, _, Entity tid _, _) <- getSharerPatch404 shr talkhid
(_, _, Entity tid _, _, _) <- getSharerPatch404 shr talkhid
return tid
getSharerPatchDepsR
@ -227,7 +222,7 @@ getSharerPatchFollowersR shr talkhid = getFollowersCollection here getFsid
where
here = SharerPatchFollowersR shr talkhid
getFsid = do
(_, Entity _ lt, _, _) <- getSharerPatch404 shr talkhid
(_, Entity _ lt, _, _, _) <- getSharerPatch404 shr talkhid
return $ localTicketFollowers lt
getSharerPatchEventsR
@ -245,7 +240,7 @@ getSharerPatchVersionR
-> Handler TypedContent
getSharerPatchVersionR shr talkhid ptkhid = do
(vcs, patch) <- runDB $ do
(_, _, Entity tid _, repo) <- getSharerPatch404 shr talkhid
(_, _, Entity tid _, repo, _) <- getSharerPatch404 shr talkhid
(,) <$> case repo of
Left (_, Entity _ trl) ->
repoVcs <$> getJust (ticketRepoLocalRepo trl)

View file

@ -24,6 +24,7 @@ where
import Control.Monad
import Control.Monad.Trans.Class
import Control.Monad.Trans.Maybe
import Data.List.NonEmpty (NonEmpty, nonEmpty)
import Data.Maybe
import Data.Traversable
import Database.Persist
@ -53,6 +54,7 @@ getSharerPatch
( Entity TicketProjectRemote
, Maybe (Entity TicketProjectRemoteAccept)
)
, NonEmpty PatchId
)
)
getSharerPatch shr talid = runMaybeT $ do
@ -65,8 +67,9 @@ getSharerPatch shr talid = runMaybeT $ do
lt <- lift $ getJust ltid
let tid = localTicketTicket lt
t <- lift $ getJust tid
npatches <- lift $ count [PatchTicket ==. tid]
guard $ npatches >= 1
ptids <-
MaybeT $
nonEmpty <$> selectKeysList [PatchTicket ==. tid] [Desc PatchId]
repo <-
requireEitherAlt
(do mtcl <- lift $ getBy $ UniqueTicketContextLocal tid
@ -85,7 +88,7 @@ getSharerPatch shr talid = runMaybeT $ do
)
"MR doesn't have context"
"MR has both local and remote context"
return (Entity talid tal, Entity ltid lt, Entity tid t, repo)
return (Entity talid tal, Entity ltid lt, Entity tid t, repo, ptids)
getSharerPatch404
:: ShrIdent
@ -101,6 +104,7 @@ getSharerPatch404
( Entity TicketProjectRemote
, Maybe (Entity TicketProjectRemoteAccept)
)
, NonEmpty PatchId
)
getSharerPatch404 shr talkhid = do
talid <- decodeKeyHashid404 talkhid
@ -124,6 +128,7 @@ getRepoPatch
, Either
(Entity TicketAuthorLocal, Entity TicketUnderProject)
(Entity TicketAuthorRemote)
, NonEmpty PatchId
)
)
getRepoPatch shr rp ltid = runMaybeT $ do
@ -135,8 +140,9 @@ getRepoPatch shr rp ltid = runMaybeT $ do
etcl@(Entity tclid _) <- MaybeT $ getBy $ UniqueTicketContextLocal tid
etrl@(Entity _ trl) <- MaybeT $ getBy $ UniqueTicketRepoLocal tclid
guard $ ticketRepoLocalRepo trl == rid
npatches <- lift $ count [PatchTicket ==. tid]
guard $ npatches >= 1
ptids <-
MaybeT $
nonEmpty <$> selectKeysList [PatchTicket ==. tid] [Desc PatchId]
author <-
requireEitherAlt
(do mtal <- lift $ getBy $ UniqueTicketAuthorLocal ltid
@ -150,7 +156,7 @@ getRepoPatch shr rp ltid = runMaybeT $ do
(lift $ getBy $ UniqueTicketAuthorRemote tclid)
"MR doesn't have author"
"MR has both local and remote author"
return (es, er, Entity tid t, Entity ltid lt, etcl, etrl, author)
return (es, er, Entity tid t, Entity ltid lt, etcl, etrl, author, ptids)
getRepoPatch404
:: ShrIdent
@ -166,6 +172,7 @@ getRepoPatch404
, Either
(Entity TicketAuthorLocal, Entity TicketUnderProject)
(Entity TicketAuthorRemote)
, NonEmpty PatchId
)
getRepoPatch404 shr rp ltkhid = do
ltid <- decodeKeyHashid404 ltkhid