mirror of
https://github.com/gitbucket/gitbucket.git
synced 2026-01-06 15:42:20 +01:00
Add create and push webhooks call for branch creation via GUI. (#2624)
This commit is contained in:
@@ -273,3 +273,8 @@ Test / testOptions ++= {
|
||||
Nil
|
||||
}
|
||||
}
|
||||
|
||||
javaOptions in Jetty ++= Seq(
|
||||
"-Xdebug",
|
||||
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
|
||||
)
|
||||
|
||||
@@ -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}")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user