mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-06 13:35:50 +01:00
Add Merge PullRequest API (#2482)
This commit is contained in:
23
src/main/scala/gitbucket/core/api/MergeAPullRequest.scala
Normal file
23
src/main/scala/gitbucket/core/api/MergeAPullRequest.scala
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package gitbucket.core.api
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://docs.github.com/en/rest/reference/pulls#merge-a-pull-request
|
||||||
|
*/
|
||||||
|
case class MergeAPullRequest(
|
||||||
|
commit_title: Option[String],
|
||||||
|
commit_message: Option[String],
|
||||||
|
/* TODO: Not Implemented
|
||||||
|
sha: Option[String],*/
|
||||||
|
merge_method: Option[String]
|
||||||
|
)
|
||||||
|
|
||||||
|
case class SuccessToMergePrResponse(
|
||||||
|
sha: String,
|
||||||
|
merged: Boolean,
|
||||||
|
message: String
|
||||||
|
)
|
||||||
|
|
||||||
|
case class FailToMergePrResponse(
|
||||||
|
documentation_url: String,
|
||||||
|
message: String
|
||||||
|
)
|
||||||
@@ -10,7 +10,7 @@ import gitbucket.core.util.Implicits._
|
|||||||
import gitbucket.core.util.JGitUtil.CommitInfo
|
import gitbucket.core.util.JGitUtil.CommitInfo
|
||||||
import gitbucket.core.util._
|
import gitbucket.core.util._
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
import org.scalatra.NoContent
|
import org.scalatra.{Conflict, MethodNotAllowed, NoContent, Ok}
|
||||||
import scala.util.Using
|
import scala.util.Using
|
||||||
|
|
||||||
import scala.jdk.CollectionConverters._
|
import scala.jdk.CollectionConverters._
|
||||||
@@ -217,8 +217,72 @@ trait ApiPullRequestControllerBase extends ControllerBase {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* ix. Merge a pull request (Merge Button)
|
* ix. Merge a pull request (Merge Button)
|
||||||
* https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
|
* https://docs.github.com/en/rest/reference/pulls#merge-a-pull-request
|
||||||
*/
|
*/
|
||||||
|
put("/api/v3/repos/:owner/:repository/pulls/:id/merge")(referrersOnly { repository =>
|
||||||
|
(for {
|
||||||
|
//TODO: crash when body is empty
|
||||||
|
//TODO: Implement sha parameter
|
||||||
|
data <- extractFromJsonBody[MergeAPullRequest]
|
||||||
|
issueId <- params("id").toIntOpt
|
||||||
|
(issue, pullReq) <- getPullRequest(repository.owner, repository.name, issueId)
|
||||||
|
} yield {
|
||||||
|
if (checkConflict(repository.owner, repository.name, pullReq.branch, issueId).isDefined) {
|
||||||
|
Conflict(
|
||||||
|
JsonFormat(
|
||||||
|
FailToMergePrResponse(
|
||||||
|
message = "Head branch was modified. Review and try the merge again.",
|
||||||
|
documentation_url = "https://docs.github.com/en/rest/reference/pulls#merge-a-pull-request",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
if (issue.closed) {
|
||||||
|
MethodNotAllowed(
|
||||||
|
JsonFormat(
|
||||||
|
FailToMergePrResponse(
|
||||||
|
message = "Pull Request is not mergeable, Closed",
|
||||||
|
documentation_url = "https://docs.github.com/en/rest/reference/pulls#merge-a-pull-request",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
val strategy =
|
||||||
|
if (data.merge_method.getOrElse("merge-commit") == "merge") "merge-commit"
|
||||||
|
else data.merge_method.getOrElse("merge-commit")
|
||||||
|
mergePullRequest(
|
||||||
|
repository,
|
||||||
|
issueId,
|
||||||
|
context.loginAccount.get,
|
||||||
|
data.commit_message.getOrElse(""), //TODO: Implement commit_title
|
||||||
|
strategy,
|
||||||
|
pullReq.isDraft,
|
||||||
|
context.settings
|
||||||
|
) match {
|
||||||
|
case Right(objectId) =>
|
||||||
|
Ok(
|
||||||
|
JsonFormat(
|
||||||
|
SuccessToMergePrResponse(
|
||||||
|
sha = objectId.toString,
|
||||||
|
merged = true,
|
||||||
|
message = "Pull Request successfully merged"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
case Left(message) =>
|
||||||
|
MethodNotAllowed(
|
||||||
|
JsonFormat(
|
||||||
|
FailToMergePrResponse(
|
||||||
|
message = "Pull Request is not mergeable",
|
||||||
|
documentation_url = "https://docs.github.com/en/rest/reference/pulls#merge-a-pull-request",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* x. Labels, assignees, and milestones
|
* x. Labels, assignees, and milestones
|
||||||
|
|||||||
Reference in New Issue
Block a user