Merge pull request #2018 from kounoike/pr-notification-hooks

Add notification hooks
This commit is contained in:
Naoki Takezoe
2018-06-11 08:46:29 +09:00
committed by GitHub
5 changed files with 70 additions and 14 deletions

View File

@@ -353,7 +353,16 @@ trait PullRequestsControllerBase extends ControllerBase {
// close issue by commit message
if (pullreq.requestBranch == repository.repository.defaultBranch) {
commits.map { commit =>
closeIssuesFromMessage(commit.fullMessage, loginAccount.userName, owner, name)
closeIssuesFromMessage(commit.fullMessage, loginAccount.userName, owner, name).foreach {
issueId =>
getIssue(repository.owner, repository.name, issueId.toString).map { issue =>
callIssuesWebHook("closed", repository, issue, baseUrl, loginAccount)
PluginRegistry().getIssueHooks
.foreach(
_.closedByCommitComment(issue, repository, commit.fullMessage, loginAccount)
)
}
}
}
}
@@ -458,15 +467,35 @@ trait PullRequestsControllerBase extends ControllerBase {
val defaultBranch = getRepository(owner, name).get.repository.defaultBranch
if (pullreq.branch == defaultBranch) {
commits.flatten.foreach { commit =>
closeIssuesFromMessage(commit.fullMessage, loginAccount.userName, owner, name)
closeIssuesFromMessage(commit.fullMessage, loginAccount.userName, owner, name).foreach {
issueId =>
getIssue(owner, name, issueId.toString).map { issue =>
callIssuesWebHook("closed", repository, issue, baseUrl, loginAccount)
PluginRegistry().getIssueHooks
.foreach(_.closedByCommitComment(issue, repository, commit.fullMessage, loginAccount))
}
}
}
val issueContent = issue.title + " " + issue.content.getOrElse("")
closeIssuesFromMessage(
issue.title + " " + issue.content.getOrElse(""),
issueContent,
loginAccount.userName,
owner,
name
)
closeIssuesFromMessage(form.message, loginAccount.userName, owner, name)
).foreach { issueId =>
getIssue(owner, name, issueId.toString).map { issue =>
callIssuesWebHook("closed", repository, issue, baseUrl, loginAccount)
PluginRegistry().getIssueHooks
.foreach(_.closedByCommitComment(issue, repository, issueContent, loginAccount))
}
}
closeIssuesFromMessage(form.message, loginAccount.userName, owner, name).foreach { issueId =>
getIssue(owner, name, issueId.toString).map { issue =>
callIssuesWebHook("closed", repository, issue, baseUrl, loginAccount)
PluginRegistry().getIssueHooks
.foreach(_.closedByCommitComment(issue, repository, issueContent, loginAccount))
}
}
}
updatePullRequests(owner, name, pullreq.branch)

View File

@@ -1063,7 +1063,14 @@ trait RepositoryViewerControllerBase extends ControllerBase {
// close issue by commit message
if (branch == repository.repository.defaultBranch) {
closeIssuesFromMessage(message, loginAccount.userName, repository.owner, repository.name)
closeIssuesFromMessage(message, loginAccount.userName, repository.owner, repository.name).foreach {
issueId =>
getIssue(repository.owner, repository.name, issueId.toString).map { issue =>
callIssuesWebHook("closed", repository, issue, baseUrl, loginAccount)
PluginRegistry().getIssueHooks
.foreach(_.closedByCommitComment(issue, repository, message, loginAccount))
}
}
}
// call post commit hook

View File

@@ -1,7 +1,7 @@
package gitbucket.core.plugin
import gitbucket.core.controller.Context
import gitbucket.core.model.Issue
import gitbucket.core.model.{Account, Issue}
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.model.Profile._
import profile.api._
@@ -15,6 +15,19 @@ trait IssueHook {
): Unit = ()
def closed(issue: Issue, repository: RepositoryInfo)(implicit session: Session, context: Context): Unit = ()
def reopened(issue: Issue, repository: RepositoryInfo)(implicit session: Session, context: Context): Unit = ()
def assigned(
issue: Issue,
repository: RepositoryInfo,
assigner: Option[String],
assigned: Option[String],
oldAssigned: Option[String]
)(
implicit session: Session,
context: Context
): Unit = ()
def closedByCommitComment(issue: Issue, repository: RepositoryInfo, message: String, pusher: Account)(
implicit session: Session
): Unit = ()
}

View File

@@ -6,20 +6,21 @@ import gitbucket.core.util.Implicits._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.controller.Context
import gitbucket.core.model.{
Account,
CommitState,
Issue,
PullRequest,
IssueComment,
IssueLabel,
Label,
Account,
PullRequest,
Repository,
CommitState,
Role
}
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile._
import gitbucket.core.model.Profile.profile.blockingApi._
import gitbucket.core.model.Profile.dateColumnType
import gitbucket.core.plugin.PluginRegistry
trait IssuesService {
self: AccountService with RepositoryService with LabelsService with PrioritiesService with MilestonesService =>
@@ -511,20 +512,24 @@ trait IssuesService {
assignedUserName: Option[String],
insertComment: Boolean = false
)(implicit context: Context, s: Session): Int = {
val oldAssigned = getIssue(owner, repository, s"${issueId}").get.assignedUserName
val assigned = assignedUserName
val assigner = context.loginAccount.map(_.userName)
if (insertComment) {
val oldAssigned = getIssue(owner, repository, s"${issueId}").get.assignedUserName.getOrElse("Not assigned")
val assigned = assignedUserName.getOrElse("Not assigned")
IssueComments insert IssueComment(
userName = owner,
repositoryName = repository,
issueId = issueId,
action = "assign",
commentedUserName = context.loginAccount.map(_.userName).getOrElse("Unknown user"),
content = s"${oldAssigned}:${assigned}",
commentedUserName = assigner.getOrElse("Unknown user"),
content = s"""${oldAssigned.getOrElse("Not assigned")}:${assigned.getOrElse("Not assigned")}""",
registeredDate = currentDate,
updatedDate = currentDate
)
}
for (issue <- getIssue(owner, repository, issueId.toString); repo <- getRepository(owner, repository)) {
PluginRegistry().getIssueHooks.foreach(_.assigned(issue, repo, assigner, assigned, oldAssigned))
}
Issues
.filter(_.byPrimaryKey(owner, repository, issueId))
.map(t => (t.assignedUserName ?, t.updatedDate))

View File

@@ -300,6 +300,8 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
closeIssuesFromMessage(commit.fullMessage, pusher, owner, repository).foreach { issueId =>
getIssue(owner, repository, issueId.toString).map { issue =>
callIssuesWebHook("closed", repositoryInfo, issue, baseUrl, pusherAccount)
PluginRegistry().getIssueHooks
.foreach(_.closedByCommitComment(issue, repositoryInfo, commit.fullMessage, pusherAccount))
}
}
}