mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-14 09:25:49 +01:00
Merge pull request #2018 from kounoike/pr-notification-hooks
Add notification hooks
This commit is contained in:
@@ -353,7 +353,16 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
// close issue by commit message
|
// close issue by commit message
|
||||||
if (pullreq.requestBranch == repository.repository.defaultBranch) {
|
if (pullreq.requestBranch == repository.repository.defaultBranch) {
|
||||||
commits.map { commit =>
|
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
|
val defaultBranch = getRepository(owner, name).get.repository.defaultBranch
|
||||||
if (pullreq.branch == defaultBranch) {
|
if (pullreq.branch == defaultBranch) {
|
||||||
commits.flatten.foreach { commit =>
|
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(
|
closeIssuesFromMessage(
|
||||||
issue.title + " " + issue.content.getOrElse(""),
|
issueContent,
|
||||||
loginAccount.userName,
|
loginAccount.userName,
|
||||||
owner,
|
owner,
|
||||||
name
|
name
|
||||||
)
|
).foreach { issueId =>
|
||||||
closeIssuesFromMessage(form.message, loginAccount.userName, owner, name)
|
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)
|
updatePullRequests(owner, name, pullreq.branch)
|
||||||
|
|||||||
@@ -1063,7 +1063,14 @@ trait RepositoryViewerControllerBase extends ControllerBase {
|
|||||||
|
|
||||||
// close issue by commit message
|
// close issue by commit message
|
||||||
if (branch == repository.repository.defaultBranch) {
|
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
|
// call post commit hook
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package gitbucket.core.plugin
|
package gitbucket.core.plugin
|
||||||
|
|
||||||
import gitbucket.core.controller.Context
|
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.service.RepositoryService.RepositoryInfo
|
||||||
import gitbucket.core.model.Profile._
|
import gitbucket.core.model.Profile._
|
||||||
import profile.api._
|
import profile.api._
|
||||||
@@ -15,6 +15,19 @@ trait IssueHook {
|
|||||||
): Unit = ()
|
): Unit = ()
|
||||||
def closed(issue: Issue, repository: RepositoryInfo)(implicit session: Session, context: Context): 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 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 = ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,20 +6,21 @@ import gitbucket.core.util.Implicits._
|
|||||||
import gitbucket.core.util.SyntaxSugars._
|
import gitbucket.core.util.SyntaxSugars._
|
||||||
import gitbucket.core.controller.Context
|
import gitbucket.core.controller.Context
|
||||||
import gitbucket.core.model.{
|
import gitbucket.core.model.{
|
||||||
|
Account,
|
||||||
|
CommitState,
|
||||||
Issue,
|
Issue,
|
||||||
PullRequest,
|
|
||||||
IssueComment,
|
IssueComment,
|
||||||
IssueLabel,
|
IssueLabel,
|
||||||
Label,
|
Label,
|
||||||
Account,
|
PullRequest,
|
||||||
Repository,
|
Repository,
|
||||||
CommitState,
|
|
||||||
Role
|
Role
|
||||||
}
|
}
|
||||||
import gitbucket.core.model.Profile._
|
import gitbucket.core.model.Profile._
|
||||||
import gitbucket.core.model.Profile.profile._
|
import gitbucket.core.model.Profile.profile._
|
||||||
import gitbucket.core.model.Profile.profile.blockingApi._
|
import gitbucket.core.model.Profile.profile.blockingApi._
|
||||||
import gitbucket.core.model.Profile.dateColumnType
|
import gitbucket.core.model.Profile.dateColumnType
|
||||||
|
import gitbucket.core.plugin.PluginRegistry
|
||||||
|
|
||||||
trait IssuesService {
|
trait IssuesService {
|
||||||
self: AccountService with RepositoryService with LabelsService with PrioritiesService with MilestonesService =>
|
self: AccountService with RepositoryService with LabelsService with PrioritiesService with MilestonesService =>
|
||||||
@@ -511,20 +512,24 @@ trait IssuesService {
|
|||||||
assignedUserName: Option[String],
|
assignedUserName: Option[String],
|
||||||
insertComment: Boolean = false
|
insertComment: Boolean = false
|
||||||
)(implicit context: Context, s: Session): Int = {
|
)(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) {
|
if (insertComment) {
|
||||||
val oldAssigned = getIssue(owner, repository, s"${issueId}").get.assignedUserName.getOrElse("Not assigned")
|
|
||||||
val assigned = assignedUserName.getOrElse("Not assigned")
|
|
||||||
IssueComments insert IssueComment(
|
IssueComments insert IssueComment(
|
||||||
userName = owner,
|
userName = owner,
|
||||||
repositoryName = repository,
|
repositoryName = repository,
|
||||||
issueId = issueId,
|
issueId = issueId,
|
||||||
action = "assign",
|
action = "assign",
|
||||||
commentedUserName = context.loginAccount.map(_.userName).getOrElse("Unknown user"),
|
commentedUserName = assigner.getOrElse("Unknown user"),
|
||||||
content = s"${oldAssigned}:${assigned}",
|
content = s"""${oldAssigned.getOrElse("Not assigned")}:${assigned.getOrElse("Not assigned")}""",
|
||||||
registeredDate = currentDate,
|
registeredDate = currentDate,
|
||||||
updatedDate = currentDate
|
updatedDate = currentDate
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
for (issue <- getIssue(owner, repository, issueId.toString); repo <- getRepository(owner, repository)) {
|
||||||
|
PluginRegistry().getIssueHooks.foreach(_.assigned(issue, repo, assigner, assigned, oldAssigned))
|
||||||
|
}
|
||||||
Issues
|
Issues
|
||||||
.filter(_.byPrimaryKey(owner, repository, issueId))
|
.filter(_.byPrimaryKey(owner, repository, issueId))
|
||||||
.map(t => (t.assignedUserName ?, t.updatedDate))
|
.map(t => (t.assignedUserName ?, t.updatedDate))
|
||||||
|
|||||||
@@ -300,6 +300,8 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
|
|||||||
closeIssuesFromMessage(commit.fullMessage, pusher, owner, repository).foreach { issueId =>
|
closeIssuesFromMessage(commit.fullMessage, pusher, owner, repository).foreach { issueId =>
|
||||||
getIssue(owner, repository, issueId.toString).map { issue =>
|
getIssue(owner, repository, issueId.toString).map { issue =>
|
||||||
callIssuesWebHook("closed", repositoryInfo, issue, baseUrl, pusherAccount)
|
callIssuesWebHook("closed", repositoryInfo, issue, baseUrl, pusherAccount)
|
||||||
|
PluginRegistry().getIssueHooks
|
||||||
|
.foreach(_.closedByCommitComment(issue, repositoryInfo, commit.fullMessage, pusherAccount))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user