Fix refs commit log and web hook.

This commit is contained in:
takezoe
2014-01-04 04:05:25 +09:00
parent 1da7173f27
commit 0e7280585a
4 changed files with 36 additions and 48 deletions

View File

@@ -2,7 +2,6 @@ package app
import util._ import util._
import service._ import service._
import jp.sf.amateras.scalatra.forms._
class IndexController extends IndexControllerBase class IndexController extends IndexControllerBase
with RepositoryService with SystemSettingsService with ActivityService with AccountService with RepositoryService with SystemSettingsService with ActivityService with AccountService

View File

@@ -91,7 +91,7 @@ trait PullRequestsControllerBase extends ControllerBase {
ajaxGet("/:owner/:repository/pull/:id/mergeguide")(collaboratorsOnly { repository => ajaxGet("/:owner/:repository/pull/:id/mergeguide")(collaboratorsOnly { repository =>
params("id").toIntOpt.flatMap{ issueId => params("id").toIntOpt.flatMap{ issueId =>
val owner = repository.owner val owner = repository.owner
val name = repository.name val name = repository.name
getPullRequest(owner, name, issueId) map { case(issue, pullreq) => getPullRequest(owner, name, issueId) map { case(issue, pullreq) =>
pulls.html.mergeguide( pulls.html.mergeguide(
checkConflictInPullRequest(owner, name, pullreq.branch, pullreq.requestUserName, name, pullreq.requestBranch, issueId), checkConflictInPullRequest(owner, name, pullreq.branch, pullreq.requestUserName, name, pullreq.requestBranch, issueId),
@@ -104,7 +104,7 @@ trait PullRequestsControllerBase extends ControllerBase {
post("/:owner/:repository/pull/:id/merge", mergeForm)(collaboratorsOnly { (form, repository) => post("/:owner/:repository/pull/:id/merge", mergeForm)(collaboratorsOnly { (form, repository) =>
params("id").toIntOpt.flatMap { issueId => params("id").toIntOpt.flatMap { issueId =>
val owner = repository.owner val owner = repository.owner
val name = repository.name val name = repository.name
LockUtil.lock(s"${owner}/${name}/merge"){ LockUtil.lock(s"${owner}/${name}/merge"){
getPullRequest(owner, name, issueId).map { case (issue, pullreq) => getPullRequest(owner, name, issueId).map { case (issue, pullreq) =>
using(Git.open(getRepositoryDir(owner, name))) { git => using(Git.open(getRepositoryDir(owner, name))) { git =>
@@ -165,17 +165,12 @@ trait PullRequestsControllerBase extends ControllerBase {
} }
// call web hook // call web hook
val webHookURLs = getWebHookURLs(owner, name) getWebHookURLs(owner, name) match {
if(webHookURLs.nonEmpty){ case webHookURLs if(webHookURLs.nonEmpty) =>
val payload = WebHookPayload( for(ownerAccount <- getAccountByUserName(owner)){
git, callWebHook(owner, name, webHookURLs,
loginAccount, WebHookPayload(git, loginAccount, mergeBaseRefName, repository, commits.flatten.toList, ownerAccount))
mergeBaseRefName, }
repository,
commits.flatten.toList,
getAccountByUserName(owner).get)
callWebHook(owner, name, webHookURLs, payload)
} }
// notifications // notifications
@@ -427,7 +422,7 @@ trait PullRequestsControllerBase extends ControllerBase {
val commits = newGit.log.addRange(oldId, newId).call.iterator.asScala.map { revCommit => val commits = newGit.log.addRange(oldId, newId).call.iterator.asScala.map { revCommit =>
new CommitInfo(revCommit) new CommitInfo(revCommit)
}.toList.splitWith{ (commit1, commit2) => }.toList.splitWith { (commit1, commit2) =>
view.helpers.date(commit1.time) == view.helpers.date(commit2.time) view.helpers.date(commit1.time) == view.helpers.date(commit2.time)
} }

View File

@@ -138,17 +138,12 @@ trait RepositorySettingsControllerBase extends ControllerBase with FlashMapSuppo
.setMaxCount(3) .setMaxCount(3)
.call.iterator.asScala.map(new CommitInfo(_)) .call.iterator.asScala.map(new CommitInfo(_))
val webHookURLs = getWebHookURLs(repository.owner, repository.name) getWebHookURLs(repository.owner, repository.name) match {
if(webHookURLs.nonEmpty){ case webHookURLs if(webHookURLs.nonEmpty) =>
val owner = getAccountByUserName(repository.owner).get for(ownerAccount <- getAccountByUserName(repository.owner)){
callWebHook(repository.owner, repository.name, webHookURLs, callWebHook(repository.owner, repository.name, webHookURLs,
WebHookPayload( WebHookPayload(git, ownerAccount, "refs/heads/" + repository.repository.defaultBranch, repository, commits.toList, ownerAccount))
git, }
owner,
"refs/heads/" + repository.repository.defaultBranch,
repository,
commits.toList,
owner))
} }
flash += "info" -> "Test payload deployed!" flash += "info" -> "Test payload deployed!"

View File

@@ -56,10 +56,10 @@ class GitBucketReceivePackFactory extends ReceivePackFactory[HttpServletRequest]
override def create(request: HttpServletRequest, db: Repository): ReceivePack = { override def create(request: HttpServletRequest, db: Repository): ReceivePack = {
val receivePack = new ReceivePack(db) val receivePack = new ReceivePack(db)
val userName = request.getAttribute(Keys.Request.UserName).asInstanceOf[String] val pusher = request.getAttribute(Keys.Request.UserName).asInstanceOf[String]
logger.debug("requestURI: " + request.getRequestURI) logger.debug("requestURI: " + request.getRequestURI)
logger.debug("userName:" + userName) logger.debug("pusher:" + pusher)
defining(request.paths){ paths => defining(request.paths){ paths =>
val owner = paths(1) val owner = paths(1)
@@ -69,7 +69,7 @@ class GitBucketReceivePackFactory extends ReceivePackFactory[HttpServletRequest]
logger.debug("repository:" + owner + "/" + repository) logger.debug("repository:" + owner + "/" + repository)
logger.debug("baseURL:" + baseURL) logger.debug("baseURL:" + baseURL)
receivePack.setPostReceiveHook(new CommitLogHook(owner, repository, userName, baseURL)) receivePack.setPostReceiveHook(new CommitLogHook(owner, repository, pusher, baseURL))
receivePack receivePack
} }
} }
@@ -77,7 +77,7 @@ class GitBucketReceivePackFactory extends ReceivePackFactory[HttpServletRequest]
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class CommitLogHook(owner: String, repository: String, userName: String, baseURL: String) extends PostReceiveHook class CommitLogHook(owner: String, repository: String, pusher: String, baseURL: String) extends PostReceiveHook
with RepositoryService with AccountService with IssuesService with ActivityService with PullRequestService with WebHookService { with RepositoryService with AccountService with IssuesService with ActivityService with PullRequestService with WebHookService {
private val logger = LoggerFactory.getLogger(classOf[CommitLogHook]) private val logger = LoggerFactory.getLogger(classOf[CommitLogHook])
@@ -117,15 +117,15 @@ class CommitLogHook(owner: String, repository: String, userName: String, baseURL
// record activity // record activity
if(refName(1) == "heads"){ if(refName(1) == "heads"){
command.getType match { command.getType match {
case ReceiveCommand.Type.CREATE => recordCreateBranchActivity(owner, repository, userName, branchName) case ReceiveCommand.Type.CREATE => recordCreateBranchActivity(owner, repository, pusher, branchName)
case ReceiveCommand.Type.UPDATE => recordPushActivity(owner, repository, userName, branchName, newCommits) case ReceiveCommand.Type.UPDATE => recordPushActivity(owner, repository, pusher, branchName, newCommits)
case ReceiveCommand.Type.DELETE => recordDeleteBranchActivity(owner, repository, userName, branchName) case ReceiveCommand.Type.DELETE => recordDeleteBranchActivity(owner, repository, pusher, branchName)
case _ => case _ =>
} }
} else if(refName(1) == "tags"){ } else if(refName(1) == "tags"){
command.getType match { command.getType match {
case ReceiveCommand.Type.CREATE => recordCreateTagActivity(owner, repository, userName, branchName, newCommits) case ReceiveCommand.Type.CREATE => recordCreateTagActivity(owner, repository, pusher, branchName, newCommits)
case ReceiveCommand.Type.DELETE => recordDeleteTagActivity(owner, repository, userName, branchName, newCommits) case ReceiveCommand.Type.DELETE => recordDeleteTagActivity(owner, repository, pusher, branchName, newCommits)
case _ => case _ =>
} }
} }
@@ -141,17 +141,14 @@ class CommitLogHook(owner: String, repository: String, userName: String, baseURL
} }
// call web hook // call web hook
val webHookURLs = getWebHookURLs(owner, repository) getWebHookURLs(owner, repository) match {
if(webHookURLs.nonEmpty){ case webHookURLs if(webHookURLs.nonEmpty) =>
val payload = WebHookPayload( for(pusherAccount <- getAccountByUserName(pusher);
git, ownerAccount <- getAccountByUserName(owner);
getAccountByUserName(userName).get, repositoryInfo <- getRepository(owner, repository, baseURL)){
command.getRefName, callWebHook(owner, repository, webHookURLs,
getRepository(owner, repository, baseURL).get, WebHookPayload(git, pusherAccount, command.getRefName, repositoryInfo, newCommits, ownerAccount))
newCommits, }
getAccountByUserName(owner).get)
callWebHook(owner, repository, webHookURLs, payload)
} }
} }
} }
@@ -162,8 +159,10 @@ class CommitLogHook(owner: String, repository: String, userName: String, baseURL
private def createIssueComment(commit: CommitInfo) = { private def createIssueComment(commit: CommitInfo) = {
"(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData => "(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData =>
val issueId = matchData.group(2) val issueId = matchData.group(2)
if(getAccountByUserName(commit.committer).isDefined && getIssue(owner, repository, issueId).isDefined){ if(getIssue(owner, repository, issueId).isDefined){
createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage + " " + commit.id, "commit") getAccountByMailAddress(commit.mailAddress).foreach { account =>
createComment(owner, repository, account.userName, issueId.toInt, commit.fullMessage + " " + commit.id, "commit")
}
} }
} }
} }