diff --git a/build.sbt b/build.sbt index f0d62f7..e05719f 100644 --- a/build.sbt +++ b/build.sbt @@ -273,3 +273,8 @@ Nil } } + +javaOptions in Jetty ++= Seq( + "-Xdebug", + "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000" +) diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 6caf710..453a677 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -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.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.scalatra._ import org.scalatra.i18n.Messages +import scala.collection.JavaConverters.iterableAsScalaIterableConverter + class RepositoryViewerController extends RepositoryViewerControllerBase with RepositoryService @@ -559,6 +561,22 @@ 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 @@ 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}") + } } })