handle all review cases
This commit is contained in:
parent
1322fd5f07
commit
ce193b5294
1 changed files with 66 additions and 23 deletions
|
@ -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 =
|
||||||
|
ReviewOptions
|
||||||
<$> switch "interactive" 'i' "Interactive mode"
|
<$> switch "interactive" 'i' "Interactive mode"
|
||||||
<*> parseNewReview
|
<*> 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 =
|
||||||
|
|
Loading…
Reference in a new issue