mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-06 21:45:50 +01:00
Close issues via commit messages
This commit is contained in:
@@ -163,6 +163,19 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// close issue by content of pull request
|
||||||
|
val defaultBranch = getRepository(owner, name, baseUrl).get.repository.defaultBranch
|
||||||
|
if(pullreq.branch == defaultBranch){
|
||||||
|
commits.flatten.foreach { commit =>
|
||||||
|
closeIssuesFromMessage(commit.fullMessage, loginAccount.userName, owner, name)
|
||||||
|
}
|
||||||
|
issue.content match {
|
||||||
|
case Some(content) => closeIssuesFromMessage(content, loginAccount.userName, owner, name)
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
closeIssuesFromMessage(form.message, loginAccount.userName, owner, name)
|
||||||
|
}
|
||||||
|
|
||||||
// notifications
|
// notifications
|
||||||
Notifier().toNotify(repository, issueId, "merge"){
|
Notifier().toNotify(repository, issueId, "merge"){
|
||||||
Notifier.msgStatus(s"${baseUrl}/${owner}/${name}/pull/${issueId}")
|
Notifier.msgStatus(s"${baseUrl}/${owner}/${name}/pull/${issueId}")
|
||||||
|
|||||||
@@ -314,6 +314,18 @@ trait IssuesService {
|
|||||||
}.toList
|
}.toList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def closeIssuesFromMessage(message: String, userName: String, owner: String, repository: String) = {
|
||||||
|
val regex = "(?i)(?<!\\w)(?:fix(?:e[sd])?|resolve[sd]?|close[sd]?)\\s+#(\\d+)(?!\\w)".r
|
||||||
|
regex.findAllIn(message).matchData.map(_.group(1)).foreach { issueId =>
|
||||||
|
getIssue(owner, repository, issueId) match {
|
||||||
|
case Some(issue) if !issue.closed => {
|
||||||
|
createComment(owner, repository, userName, issue.issueId, "Close", "close")
|
||||||
|
updateClosed(owner, repository, issue.issueId, true)
|
||||||
|
}
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object IssuesService {
|
object IssuesService {
|
||||||
|
|||||||
@@ -140,6 +140,14 @@ class CommitLogHook(owner: String, repository: String, userName: String, baseURL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// close issues
|
||||||
|
val defaultBranch = getRepository(owner, repository, baseURL).get.repository.defaultBranch
|
||||||
|
if(refName(1) == "heads" && branchName == defaultBranch && command.getType == ReceiveCommand.Type.UPDATE){
|
||||||
|
git.log.addRange(command.getOldId, command.getNewId).call.asScala.foreach { commit =>
|
||||||
|
closeIssuesFromMessage(commit.getFullMessage, userName, owner, repository)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// call web hook
|
// call web hook
|
||||||
val webHookURLs = getWebHookURLs(owner, repository)
|
val webHookURLs = getWebHookURLs(owner, repository)
|
||||||
if(webHookURLs.nonEmpty){
|
if(webHookURLs.nonEmpty){
|
||||||
|
|||||||
Reference in New Issue
Block a user