diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/app/IndexController.scala index d18b3d3..1310372 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/app/IndexController.scala @@ -2,7 +2,6 @@ import util._ import service._ -import jp.sf.amateras.scalatra.forms._ class IndexController extends IndexControllerBase with RepositoryService with SystemSettingsService with ActivityService with AccountService diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index b4cb72c..527f13d 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -91,7 +91,7 @@ ajaxGet("/:owner/:repository/pull/:id/mergeguide")(collaboratorsOnly { repository => params("id").toIntOpt.flatMap{ issueId => val owner = repository.owner - val name = repository.name + val name = repository.name getPullRequest(owner, name, issueId) map { case(issue, pullreq) => pulls.html.mergeguide( checkConflictInPullRequest(owner, name, pullreq.branch, pullreq.requestUserName, name, pullreq.requestBranch, issueId), @@ -104,7 +104,7 @@ post("/:owner/:repository/pull/:id/merge", mergeForm)(collaboratorsOnly { (form, repository) => params("id").toIntOpt.flatMap { issueId => val owner = repository.owner - val name = repository.name + val name = repository.name LockUtil.lock(s"${owner}/${name}/merge"){ getPullRequest(owner, name, issueId).map { case (issue, pullreq) => using(Git.open(getRepositoryDir(owner, name))) { git => @@ -165,17 +165,12 @@ } // call web hook - val webHookURLs = getWebHookURLs(owner, name) - if(webHookURLs.nonEmpty){ - val payload = WebHookPayload( - git, - loginAccount, - mergeBaseRefName, - repository, - commits.flatten.toList, - getAccountByUserName(owner).get) - - callWebHook(owner, name, webHookURLs, payload) + getWebHookURLs(owner, name) match { + case webHookURLs if(webHookURLs.nonEmpty) => + for(ownerAccount <- getAccountByUserName(owner)){ + callWebHook(owner, name, webHookURLs, + WebHookPayload(git, loginAccount, mergeBaseRefName, repository, commits.flatten.toList, ownerAccount)) + } } // notifications @@ -427,7 +422,7 @@ val commits = newGit.log.addRange(oldId, newId).call.iterator.asScala.map { revCommit => new CommitInfo(revCommit) - }.toList.splitWith{ (commit1, commit2) => + }.toList.splitWith { (commit1, commit2) => view.helpers.date(commit1.time) == view.helpers.date(commit2.time) } diff --git a/src/main/scala/app/RepositorySettingsController.scala b/src/main/scala/app/RepositorySettingsController.scala index 05987d5..d4f0878 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -138,17 +138,12 @@ .setMaxCount(3) .call.iterator.asScala.map(new CommitInfo(_)) - val webHookURLs = getWebHookURLs(repository.owner, repository.name) - if(webHookURLs.nonEmpty){ - val owner = getAccountByUserName(repository.owner).get - callWebHook(repository.owner, repository.name, webHookURLs, - WebHookPayload( - git, - owner, - "refs/heads/" + repository.repository.defaultBranch, - repository, - commits.toList, - owner)) + getWebHookURLs(repository.owner, repository.name) match { + case webHookURLs if(webHookURLs.nonEmpty) => + for(ownerAccount <- getAccountByUserName(repository.owner)){ + callWebHook(repository.owner, repository.name, webHookURLs, + WebHookPayload(git, ownerAccount, "refs/heads/" + repository.repository.defaultBranch, repository, commits.toList, ownerAccount)) + } } flash += "info" -> "Test payload deployed!" diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/servlet/GitRepositoryServlet.scala index ed1dfd7..b2c0028 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/servlet/GitRepositoryServlet.scala @@ -56,10 +56,10 @@ override def create(request: HttpServletRequest, db: Repository): ReceivePack = { 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("userName:" + userName) + logger.debug("pusher:" + pusher) defining(request.paths){ paths => val owner = paths(1) @@ -69,7 +69,7 @@ logger.debug("repository:" + owner + "/" + repository) logger.debug("baseURL:" + baseURL) - receivePack.setPostReceiveHook(new CommitLogHook(owner, repository, userName, baseURL)) + receivePack.setPostReceiveHook(new CommitLogHook(owner, repository, pusher, baseURL)) receivePack } } @@ -77,7 +77,7 @@ 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 { private val logger = LoggerFactory.getLogger(classOf[CommitLogHook]) @@ -117,15 +117,15 @@ // record activity if(refName(1) == "heads"){ command.getType match { - case ReceiveCommand.Type.CREATE => recordCreateBranchActivity(owner, repository, userName, branchName) - case ReceiveCommand.Type.UPDATE => recordPushActivity(owner, repository, userName, branchName, newCommits) - case ReceiveCommand.Type.DELETE => recordDeleteBranchActivity(owner, repository, userName, branchName) + case ReceiveCommand.Type.CREATE => recordCreateBranchActivity(owner, repository, pusher, branchName) + case ReceiveCommand.Type.UPDATE => recordPushActivity(owner, repository, pusher, branchName, newCommits) + case ReceiveCommand.Type.DELETE => recordDeleteBranchActivity(owner, repository, pusher, branchName) case _ => } } else if(refName(1) == "tags"){ command.getType match { - case ReceiveCommand.Type.CREATE => recordCreateTagActivity(owner, repository, userName, branchName, newCommits) - case ReceiveCommand.Type.DELETE => recordDeleteTagActivity(owner, repository, userName, branchName, newCommits) + case ReceiveCommand.Type.CREATE => recordCreateTagActivity(owner, repository, pusher, branchName, newCommits) + case ReceiveCommand.Type.DELETE => recordDeleteTagActivity(owner, repository, pusher, branchName, newCommits) case _ => } } @@ -141,17 +141,14 @@ } // call web hook - val webHookURLs = getWebHookURLs(owner, repository) - if(webHookURLs.nonEmpty){ - val payload = WebHookPayload( - git, - getAccountByUserName(userName).get, - command.getRefName, - getRepository(owner, repository, baseURL).get, - newCommits, - getAccountByUserName(owner).get) - - callWebHook(owner, repository, webHookURLs, payload) + getWebHookURLs(owner, repository) match { + case webHookURLs if(webHookURLs.nonEmpty) => + for(pusherAccount <- getAccountByUserName(pusher); + ownerAccount <- getAccountByUserName(owner); + repositoryInfo <- getRepository(owner, repository, baseURL)){ + callWebHook(owner, repository, webHookURLs, + WebHookPayload(git, pusherAccount, command.getRefName, repositoryInfo, newCommits, ownerAccount)) + } } } } @@ -162,8 +159,10 @@ private def createIssueComment(commit: CommitInfo) = { "(^|\\W)#(\\d+)(\\W|$)".r.findAllIn(commit.fullMessage).matchData.foreach { matchData => val issueId = matchData.group(2) - if(getAccountByUserName(commit.committer).isDefined && getIssue(owner, repository, issueId).isDefined){ - createComment(owner, repository, commit.committer, issueId.toInt, commit.fullMessage + " " + commit.id, "commit") + if(getIssue(owner, repository, issueId).isDefined){ + getAccountByMailAddress(commit.mailAddress).foreach { account => + createComment(owner, repository, account.userName, issueId.toInt, commit.fullMessage + " " + commit.id, "commit") + } } } }