From 069d84e2493cb8d9b4eaf031de178df8a121ff08 Mon Sep 17 00:00:00 2001 From: KOUNOIKE Yuusuke Date: Sat, 28 Apr 2018 21:35:15 +0900 Subject: [PATCH 1/3] don't separate user:branch in PR message --- src/main/twirl/gitbucket/core/pulls/menu.scala.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/twirl/gitbucket/core/pulls/menu.scala.html b/src/main/twirl/gitbucket/core/pulls/menu.scala.html index 5fc8c5ee5..d5bb98be1 100644 --- a/src/main/twirl/gitbucket/core/pulls/menu.scala.html +++ b/src/main/twirl/gitbucket/core/pulls/menu.scala.html @@ -44,8 +44,8 @@ @helpers.user(comment.commentedUserName, styleClass = "username strong") merged @commits.size @helpers.plural(commits.size, "commit") - into @pullreq.userName:@pullreq.branch from @pullreq.requestUserName - :@pullreq.requestBranch + into @pullreq.userName:@pullreq.branch + from @pullreq.requestUserName:@pullreq.requestBranch @gitbucket.core.helper.html.datetimeago(comment.registeredDate) }.getOrElse { @@ -53,8 +53,8 @@ @helpers.user(issue.openedUserName, styleClass = "username strong") wants to merge @commits.size @helpers.plural(commits.size, "commit") - into @pullreq.userName:@pullreq.branch from @pullreq.requestUserName - :@pullreq.requestBranch + into @pullreq.userName:@pullreq.branch + from @pullreq.requestUserName:@pullreq.requestBranch } } else { @@ -62,8 +62,8 @@ @helpers.user(issue.openedUserName, styleClass = "username strong") wants to merge @commits.size @helpers.plural(commits.size, "commit") - into @pullreq.userName:@pullreq.branch from @pullreq.requestUserName - :@pullreq.requestBranch + into @pullreq.userName:@pullreq.branch + from @pullreq.requestUserName:@pullreq.requestBranch } From 56eb2435e3f11062311cb530981e426da224c688 Mon Sep 17 00:00:00 2001 From: KOUNOIKE Yuusuke Date: Sat, 28 Apr 2018 23:16:06 +0900 Subject: [PATCH 2/3] close and mark as merged PR by pushed commits --- .../core/service/PullRequestService.scala | 26 +++++++++++++++++++ .../core/servlet/GitRepositoryServlet.scala | 13 ++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/main/scala/gitbucket/core/service/PullRequestService.scala b/src/main/scala/gitbucket/core/service/PullRequestService.scala index 0f7f50c8a..c6cde8e13 100644 --- a/src/main/scala/gitbucket/core/service/PullRequestService.scala +++ b/src/main/scala/gitbucket/core/service/PullRequestService.scala @@ -116,6 +116,24 @@ trait PullRequestService { self: IssuesService with CommitsService => .map { case (t1, t2) => t1 } .list + def getPullRequestsByBranch(userName: String, repositoryName: String, branch: String, closed: Option[Boolean])( + implicit s: Session + ): List[PullRequest] = + PullRequests + .join(Issues) + .on { (t1, t2) => + t1.byPrimaryKey(t2.userName, t2.repositoryName, t2.issueId) + } + .filter { + case (t1, t2) => + (t1.requestUserName === userName.bind) && + (t1.requestRepositoryName === repositoryName.bind) && + (t1.branch === branch.bind) && + (t2.closed === closed.get.bind, closed.isDefined) + } + .map { case (t1, t2) => t1 } + .list + /** * for repository viewer. * 1. find pull request from `branch` to other branch on same repository @@ -358,6 +376,14 @@ trait PullRequestService { self: IssuesService with CommitsService => .sortWith(_.registeredDate before _.registeredDate) } + def markMergeAndClosePullRequest(userName: String, owner: String, repository: String, pull: PullRequest)( + implicit s: Session + ): Unit = { + createComment(owner, repository, userName, pull.issueId, "Merged by user", "merge") + createComment(owner, repository, userName, pull.issueId, "Close", "close") + updateClosed(owner, repository, pull.issueId, true) + } + } object PullRequestService { diff --git a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala index 0a8d95604..3ae5257d3 100644 --- a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala @@ -303,6 +303,19 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl: } else None } + // set PR as merged + val pulls = getPullRequestsByBranch(owner, repository, branchName, Some(false)) + pulls.foreach { pull => + if (commits.find { c => + c.id == pull.commitIdTo + }.isDefined) { + markMergeAndClosePullRequest(pusher, owner, repository, pull) + getAccountByUserName(pusher).map { pusherAccount => + callPullRequestWebHook("closed", repositoryInfo, pull.issueId, baseUrl, pusherAccount) + } + } + } + // record activity if (refName(1) == "heads") { command.getType match { From 921298cf92723c84c3dd6d7906c1c7ed7521bf41 Mon Sep 17 00:00:00 2001 From: KOUNOIKE Yuusuke Date: Sat, 28 Apr 2018 23:58:04 +0900 Subject: [PATCH 3/3] call issue closed webhook when pushed commit contains keywords. fix #1880 --- src/main/scala/gitbucket/core/service/IssuesService.scala | 7 ++++--- .../gitbucket/core/servlet/GitRepositoryServlet.scala | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/scala/gitbucket/core/service/IssuesService.scala b/src/main/scala/gitbucket/core/service/IssuesService.scala index 8f665c6c1..c9854ea9c 100644 --- a/src/main/scala/gitbucket/core/service/IssuesService.scala +++ b/src/main/scala/gitbucket/core/service/IssuesService.scala @@ -700,11 +700,12 @@ trait IssuesService { def closeIssuesFromMessage(message: String, userName: String, owner: String, repository: String)( implicit s: Session - ): Unit = { - extractCloseId(message).foreach { issueId => - for (issue <- getIssue(owner, repository, issueId) if !issue.closed) { + ): Seq[Int] = { + extractCloseId(message).flatMap { issueId => + for (issue <- getIssue(owner, repository, issueId) if !issue.closed) yield { createComment(owner, repository, userName, issue.issueId, "Close", "close") updateClosed(owner, repository, issue.issueId, true) + issue.issueId } } } diff --git a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala index 0a8d95604..e907d9438 100644 --- a/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala @@ -296,7 +296,13 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl: createIssueComment(owner, repository, commit) // close issues if (refName(1) == "heads" && branchName == defaultBranch && command.getType == ReceiveCommand.Type.UPDATE) { - closeIssuesFromMessage(commit.fullMessage, pusher, owner, repository) + getAccountByUserName(pusher).map { pusherAccount => + closeIssuesFromMessage(commit.fullMessage, pusher, owner, repository).foreach { issueId => + getIssue(owner, repository, issueId.toString).map { issue => + callIssuesWebHook("closed", repositoryInfo, issue, baseUrl, pusherAccount) + } + } + } } } Some(commit)