Add create and push webhooks call for branch creation via GUI. (#2624)

This commit is contained in:
onukura
2021-02-22 03:38:43 +09:00
committed by GitHub
parent c58a9aca6a
commit e94d972741
2 changed files with 73 additions and 13 deletions

View File

@@ -273,3 +273,8 @@ Test / testOptions ++= {
Nil
}
}
javaOptions in Jetty ++= Seq(
"-Xdebug",
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
)

View File

@@ -1,7 +1,6 @@
package gitbucket.core.controller
import java.io.{File, FileInputStream, FileOutputStream}
import scala.util.Using
import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
import gitbucket.core.repo.html
@@ -14,8 +13,9 @@ import gitbucket.core.util.StringUtil._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Implicits._
import gitbucket.core.util.Directory._
import gitbucket.core.model.Account
import gitbucket.core.model.{Account, WebHook}
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.service.WebHookService.{WebHookCreatePayload, WebHookPushPayload}
import gitbucket.core.util.JGitUtil.CommitInfo
import gitbucket.core.view
import gitbucket.core.view.helpers
@@ -40,6 +40,8 @@ import org.json4s.jackson.Serialization
import org.scalatra._
import org.scalatra.i18n.Messages
import scala.collection.JavaConverters.iterableAsScalaIterableConverter
class RepositoryViewerController
extends RepositoryViewerControllerBase
with RepositoryService
@@ -559,6 +561,22 @@ trait RepositoryViewerControllerBase extends ControllerBase {
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.createBranch(git, baseBranchName, newBranchName)
}
// Call webhook
val settings = loadSystemSettings()
callWebHookOf(repository.owner, repository.name, WebHook.Create, settings) {
for {
sender <- context.loginAccount
owner <- getAccountByUserName(repository.owner)
} yield {
WebHookCreatePayload(
sender,
repository,
owner,
ref = newBranchName,
refType = "branch"
)
}
}
newBranchName
}
@@ -924,17 +942,54 @@ trait RepositoryViewerControllerBase extends ControllerBase {
post("/:owner/:repository/branches")(writableUsersOnly { repository =>
val newBranchName = params.getOrElse("new", halt(400))
val fromBranchName = params.getOrElse("from", halt(400))
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.createBranch(git, fromBranchName, newBranchName)
} match {
case Right(message) =>
flash.update("info", message)
redirect(
s"/${repository.owner}/${repository.name}/tree/${StringUtil.urlEncode(newBranchName).replace("%2F", "/")}"
)
case Left(message) =>
flash.update("error", message)
redirect(s"/${repository.owner}/${repository.name}/tree/${fromBranchName}")
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
JGitUtil.createBranch(git, fromBranchName, newBranchName) match {
case Right(message) =>
flash.update("info", message)
val settings = loadSystemSettings()
val newCommitId = git.getRepository.resolve(s"refs/heads/${newBranchName}")
val oldCommitId = ObjectId.fromString("0" * 40)
// call push webhook
callWebHookOf(repository.owner, repository.name, WebHook.Push, settings) {
for {
pusherAccount <- context.loginAccount
ownerAccount <- getAccountByUserName(repository.owner)
} yield {
WebHookPushPayload(
git,
pusherAccount,
newBranchName,
repository,
List(),
ownerAccount,
newId = newCommitId,
oldId = oldCommitId
)
}
}
// call create webhook
callWebHookOf(repository.owner, repository.name, WebHook.Create, settings) {
for {
sender <- context.loginAccount
owner <- getAccountByUserName(repository.owner)
} yield {
WebHookCreatePayload(
sender,
repository,
owner,
ref = newBranchName,
refType = "branch"
)
}
}
redirect(
s"/${repository.owner}/${repository.name}/tree/${StringUtil.urlEncode(newBranchName).replace("%2F", "/")}"
)
case Left(message) =>
flash.update("error", message)
redirect(s"/${repository.owner}/${repository.name}/tree/${fromBranchName}")
}
}
})