Skip to content

Commit b402a3f

Browse files
committed
Merge pull request haskell-github#72 from nataren/implement_update_pull_request
Implement updating a pull request.
2 parents 0c1d807 + 2dfb140 commit b402a3f

4 files changed

Lines changed: 39 additions & 0 deletions

File tree

Github/Data.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,16 @@ instance FromJSON PullRequest where
353353
<*> o .: "id"
354354
parseJSON _ = fail "Could not build a PullRequest"
355355

356+
instance ToJSON EditPullRequestState where
357+
toJSON (EditPullRequestStateOpen) = String "open"
358+
toJSON (EditPullRequestStateClosed) = String "closed"
359+
360+
instance ToJSON EditPullRequest where
361+
toJSON (EditPullRequest t b s) =
362+
object $ filter notNull [ "title" .= t, "body" .= b, "state" .= s ]
363+
where notNull (_, Null) = False
364+
notNull (_, _) = True
365+
356366
instance FromJSON DetailedPullRequest where
357367
parseJSON (Object o) =
358368
DetailedPullRequest

Github/Data/Definitions.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,12 @@ data DetailedPullRequest = DetailedPullRequest {
356356
,detailedPullRequestMergeable :: Maybe Bool
357357
} deriving (Show, Data, Typeable, Eq, Ord)
358358

359+
data EditPullRequest = EditPullRequest {
360+
editPullRequestTitle :: Maybe String
361+
,editPullRequestBody :: Maybe String
362+
,editPullRequestState :: Maybe EditPullRequestState
363+
} deriving (Show)
364+
359365
data PullRequestLinks = PullRequestLinks {
360366
pullRequestLinksReviewComments :: String
361367
,pullRequestLinksComments :: String
@@ -543,3 +549,8 @@ data PingEvent = PingEvent {
543549
,pingEventHook :: RepoWebhook
544550
,pingEventHookId :: Int
545551
} deriving (Show, Data, Typeable, Eq, Ord)
552+
553+
data EditPullRequestState =
554+
EditPullRequestStateOpen
555+
| EditPullRequestStateClosed
556+
deriving Show

Github/PullRequests.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module Github.PullRequests (
1212
,pullRequestFiles
1313
,isPullRequestMerged
1414
,mergePullRequest
15+
,updatePullRequest
1516
,module Github.Data
1617
) where
1718

@@ -93,6 +94,12 @@ mergePullRequest :: GithubAuth -> String -> String -> Int -> Maybe String -> IO(
9394
mergePullRequest auth reqRepoOwner reqRepoName reqPullRequestNumber commitMessage =
9495
doHttpsStatus "PUT" (buildUrl ["repos", reqRepoOwner, reqRepoName, "pulls", (show reqPullRequestNumber), "merge"]) auth (Just . RequestBodyLBS . encode . toJSON $ (buildCommitMessageMap commitMessage))
9596

97+
-- | Update a pull request
98+
updatePullRequest :: GithubAuth -> String -> String -> Int -> EditPullRequest -> IO (Either Error DetailedPullRequest)
99+
updatePullRequest auth reqRepoOwner reqRepoName reqPullRequestNumber editPullRequest =
100+
githubPatch auth ["repos", reqRepoOwner, reqRepoName, "pulls", show reqPullRequestNumber] editPullRequest
101+
102+
96103
buildCommitMessageMap :: Maybe String -> M.Map String String
97104
buildCommitMessageMap (Just commitMessage) = M.singleton "commit_message" commitMessage
98105
buildCommitMessageMap _ = M.empty

samples/Pulls/UpdatePull.hs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module MergePullRequest where
2+
3+
import qualified Github.PullRequests as Github
4+
import Github.Auth
5+
6+
main :: IO ()
7+
main = do
8+
mergeResult <- Github.updatePullRequest (GithubOAuth "authtoken") "repoOwner" "repoName" 22 (EditPullRequest { editPullRequestTitle = Just "Brand new title", editPullRequestBody = Nothing, editPullRequestState = Just EditPullRequestStateClosed })
9+
case mergeResult of
10+
(Left err) -> putStrLn $ "Error: " ++ (show err)
11+
(Right dpr) -> putStrLn . show $ dpr

0 commit comments

Comments
 (0)