handle all review cases

This commit is contained in:
Yann Esposito (Yogsototh) 2018-10-06 22:34:14 +02:00
parent 1322fd5f07
commit ce193b5294
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646

View file

@ -29,10 +29,11 @@ import qualified Data.Char as Char
data ReviewCommand = ReviewStart ReviewOptions data ReviewCommand = ReviewStart ReviewOptions
| ReviewCommit | ReviewCommit
| ReviewAccept | ReviewAccept ReviewOptions
| ReviewFeedback | ReviewChangeRequest ReviewOptions
| ReviewQuestion | ReviewFeedback ReviewOptions
| ReviewReject | ReviewQuestion ReviewOptions
| ReviewReject ReviewOptions
deriving (Eq) deriving (Eq)
-- | init gpm branch to handle reviews -- | init gpm branch to handle reviews
@ -50,14 +51,20 @@ data ReviewOptions = ReviewOptions
, newReview :: NewReview , newReview :: NewReview
} deriving (Eq) } deriving (Eq)
parseReviewOptions :: Parser ReviewOptions parseFullReviewOptions :: Parser ReviewOptions
parseReviewOptions = ReviewOptions parseFullReviewOptions =
<$> switch "interactive" 'i' "Interactive mode" ReviewOptions
<*> parseNewReview <$> switch "interactive" 'i' "Interactive mode"
<*> parseFullNewReview
parsePartialReviewOptions :: Text -> Parser ReviewOptions
parsePartialReviewOptions status =
ReviewOptions
<$> switch "interactive" 'i' "Interactive mode"
<*> parsePartialNewReview status
parseNewReview :: Parser NewReview parseFullNewReview :: Parser NewReview
parseNewReview = do parseFullNewReview = do
nrStatus <- optional $ optText "status" 's' "The status of the review (TODO, QUESTION, ...)" nrStatus <- optional $ optText "status" 's' "The status of the review (TODO, QUESTION, ...)"
nrTitle <- optional $ optText "title" 't' "The status title" nrTitle <- optional $ optText "title" 't' "The status title"
nrUser <- optional $ optText "creator" 'c' "The user that created the review" nrUser <- optional $ optText "creator" 'c' "The user that created the review"
@ -71,14 +78,36 @@ parseNewReview = do
, description = nrDescription , description = nrDescription
} }
parsePartialNewReview :: Text -> Parser NewReview
parsePartialNewReview status = do
nrTitle <- optional $ optText "title" 't' "The status title"
nrUser <- optional $ optText "creator" 'c' "The user that created the review"
nrBranch <- optional $ optText "branch" 'b' "The branch related to the review"
nrDescription <- optional $ optText "descr" 'd' "Long review description"
pure NewReview { status = status
, title = fromMaybe "Review Title" nrTitle
, user = nrUser
, branch = nrBranch
, reviewer = nrUser
, description = nrDescription
}
parseReviewCmd :: Parser ReviewCommand parseReviewCmd :: Parser ReviewCommand
parseReviewCmd = parseReviewCmd =
subcommand "accept" "Accept the merge" (pure ReviewAccept) subcommand "accept" "Accept the merge"
<|> subcommand "feedback" "Provide a feedback" (pure ReviewFeedback) (ReviewAccept <$> parsePartialReviewOptions "ACCEPTED")
<|> subcommand "question" "Ask a question" (pure ReviewQuestion) <|> subcommand "feedback" "Provide a feedback"
<|> subcommand "reject" "Reject the merge" (pure ReviewReject) (ReviewFeedback <$> parsePartialReviewOptions "FEEDBACK")
<|> subcommand "start" "Start a new review" (ReviewStart <$> parseReviewOptions) <|> subcommand "question" "Ask a question"
<|> subcommand "end" "End a review" (pure ReviewCommit) (ReviewQuestion <$> parsePartialReviewOptions "QUESTION")
<|> subcommand "request-change" "Request some Changes to merge"
(ReviewChangeRequest <$> parsePartialReviewOptions "CHANGE_REQUESTED")
<|> subcommand "reject" "Reject the merge"
(ReviewReject <$> parsePartialReviewOptions "REFUSED")
<|> subcommand "start" "Start a new review"
(ReviewStart <$> parseFullReviewOptions)
<|> subcommand "end" "End a review"
(pure ReviewCommit)
gatherNewReviewInfos :: NewReview -> Text -> IO NewReview gatherNewReviewInfos :: NewReview -> Text -> IO NewReview
@ -92,18 +121,32 @@ gatherNewReviewInfos iss br = do
return $ iss { user = user return $ iss { user = user
, branch = branch } , branch = branch }
handleReview :: ReviewCommand -> Text -> IO () handleNewReview :: ReviewOptions -> Text -> IO ()
handleReview (ReviewStart opts) br = do handleNewReview opts br = do
newReviewTmp <- gatherNewReviewInfos (newReview opts) br newReviewTmp <- gatherNewReviewInfos (newReview opts) br
newReview <- if interactive opts newReview <- if interactive opts
then interactiveNewReview newReviewTmp then interactiveNewReview newReviewTmp
else return newReviewTmp else return newReviewTmp
createTmpNewReview newReview createTmpNewReview newReview
handleReview ReviewCommit br = validTmpNewReview br
handleReview ReviewAccept _ = die "TODO" setStatus :: ReviewOptions -> Text -> ReviewOptions
handleReview ReviewFeedback _ = die "TODO" setStatus ro status = ro { newReview = (newReview ro) { status = status } }
handleReview ReviewQuestion _ = die "TODO"
handleReview ReviewReject _ = die "TODO" handleReview :: ReviewCommand -> Text -> IO ()
handleReview (ReviewStart opts) br =
handleNewReview opts br
handleReview ReviewCommit br =
validTmpNewReview br
handleReview (ReviewAccept opts) br =
handleNewReview (setStatus opts "ACCEPTED") br
handleReview (ReviewFeedback opts) br =
handleNewReview (setStatus opts "FEEDBACK") br
handleReview (ReviewQuestion opts) br =
handleNewReview (setStatus opts "QUESTION") br
handleReview (ReviewChangeRequest opts) br =
handleNewReview (setStatus opts "CHANGE_REQUESTED") br
handleReview (ReviewReject opts) br =
handleNewReview (setStatus opts "REJECTED") br
protectStr :: Text -> Text protectStr :: Text -> Text
protectStr = protectStr =