diff --git a/src/main/scala/gitbucket/core/api/ApiPullRequest.scala b/src/main/scala/gitbucket/core/api/ApiPullRequest.scala index 8efa944..0e21596 100644 --- a/src/main/scala/gitbucket/core/api/ApiPullRequest.scala +++ b/src/main/scala/gitbucket/core/api/ApiPullRequest.scala @@ -17,6 +17,7 @@ mergeable: Option[Boolean], merged: Boolean, merged_at: Option[Date], + merged_by: Option[ApiUser], title: String, body: String, user: ApiUser) { @@ -34,22 +35,27 @@ object ApiPullRequest{ def apply(issue: Issue, pullRequest: PullRequest, headRepo: ApiRepository, baseRepo: ApiRepository, user: ApiUser, - /*mergeable: Boolean,*/ merged: Boolean, mergedAt: Option[Date]): ApiPullRequest = + /*mergeable: Boolean,*/ merged: Boolean, mergedAt: Option[Date], mergedBy: Option[ApiUser]): ApiPullRequest = ApiPullRequest( number = issue.issueId, updated_at = issue.updatedDate, created_at = issue.registeredDate, head = Commit( - sha = pullRequest.commitIdTo, - ref = pullRequest.requestBranch, - repo = headRepo)(issue.userName), + sha = pullRequest.commitIdTo, + ref = pullRequest.requestBranch, + repo = headRepo, + baseOwner = issue.userName + ), base = Commit( - sha = pullRequest.commitIdFrom, - ref = pullRequest.branch, - repo = baseRepo)(issue.userName), + sha = pullRequest.commitIdFrom, + ref = pullRequest.branch, + repo = baseRepo, + baseOwner = issue.userName + ), mergeable = None, // TODO: need check mergeable. merged = merged, merged_at = mergedAt, + merged_by = mergedBy, title = issue.title, body = issue.content.getOrElse(""), user = user @@ -58,7 +64,8 @@ case class Commit( sha: String, ref: String, - repo: ApiRepository)(baseOwner:String){ + repo: ApiRepository, + baseOwner:String){ val label = if( baseOwner == repo.owner.login ){ ref }else{ s"${repo.owner.login}:${ref}" } val user = repo.owner } diff --git a/src/main/scala/gitbucket/core/controller/ApiController.scala b/src/main/scala/gitbucket/core/controller/ApiController.scala index 918bf9c..1364526 100644 --- a/src/main/scala/gitbucket/core/controller/ApiController.scala +++ b/src/main/scala/gitbucket/core/controller/ApiController.scala @@ -407,7 +407,7 @@ JsonFormat(issues.map { case (issue, issueUser, commentCount, pullRequest, headRepo, headOwner) => - val comments = getCommentsForApi(repository.owner, repository.name, issue.issueId) + val mergedComment = getMergedComment(getCommentsForApi(repository.owner, repository.name, issue.issueId)) ApiPullRequest( issue = issue, @@ -415,8 +415,9 @@ headRepo = ApiRepository(headRepo, ApiUser(headOwner)), baseRepo = ApiRepository(repository, ApiUser(baseOwner)), user = ApiUser(issueUser), - merged = comments.exists { case (comment, _, _) => comment.action == "merged" }, - mergedAt = comments.collectFirst { case (comment, _, _) if(comment.action == "merged") => comment.registeredDate } + merged = mergedComment.isDefined, + mergedAt = mergedComment.map { case (comment, _) => comment.registeredDate }, + mergedBy = mergedComment.map { case (_, account) => ApiUser(account) } ) }) }) @@ -434,7 +435,7 @@ issueUser <- users.get(issue.openedUserName) headRepo <- getRepository(pullRequest.requestUserName, pullRequest.requestRepositoryName) } yield { - val comments = getCommentsForApi(repository.owner, repository.name, issueId) + val mergedComment = getMergedComment(getCommentsForApi(repository.owner, repository.name, issue.issueId)) JsonFormat(ApiPullRequest( issue = issue, @@ -442,8 +443,9 @@ headRepo = ApiRepository(headRepo, ApiUser(headOwner)), baseRepo = ApiRepository(repository, ApiUser(baseOwner)), user = ApiUser(issueUser), - merged = comments.exists { case (comment, _, _) => comment.action == "merged" }, - mergedAt = comments.collectFirst { case (comment, _, _) if(comment.action == "merged") => comment.registeredDate } + merged = mergedComment.isDefined, + mergedAt = mergedComment.map { case (comment, _) => comment.registeredDate }, + mergedBy = mergedComment.map { case (_, account) => ApiUser(account) } )) }) getOrElse NotFound() }) diff --git a/src/main/scala/gitbucket/core/service/IssuesService.scala b/src/main/scala/gitbucket/core/service/IssuesService.scala index c050e79..29eb86f 100644 --- a/src/main/scala/gitbucket/core/service/IssuesService.scala +++ b/src/main/scala/gitbucket/core/service/IssuesService.scala @@ -34,6 +34,10 @@ .map{ case ((t1, t2), t3) => (t1, t2, t3) } .list + def getMergedComment(comments: List[(IssueComment, Account, Issue)]): Option[(IssueComment, Account)] = { + comments.collectFirst { case (comment, account, _) if comment.action == "merged" => (comment, account) } + } + def getComment(owner: String, repository: String, commentId: String)(implicit s: Session) = if (commentId forall (_.isDigit)) IssueComments filter { t => diff --git a/src/main/scala/gitbucket/core/service/WebHookService.scala b/src/main/scala/gitbucket/core/service/WebHookService.scala index 86ba402..4d9e516 100644 --- a/src/main/scala/gitbucket/core/service/WebHookService.scala +++ b/src/main/scala/gitbucket/core/service/WebHookService.scala @@ -192,7 +192,7 @@ issueUser <- users.get(issue.openedUserName) headRepo <- getRepository(pullRequest.requestUserName, pullRequest.requestRepositoryName) } yield { - val comments = getCommentsForApi(repository.owner, repository.name, issueId) + val mergedComment = getMergedComment(getCommentsForApi(repository.owner, repository.name, issueId)) WebHookPullRequestPayload( action = action, @@ -204,8 +204,9 @@ baseRepository = repository, baseOwner = baseOwner, sender = sender, - merged = comments.exists { case (comment, _, _) => comment.action == "merged" }, - mergedAt = comments.collectFirst { case (comment, _, _) if(comment.action == "merged") => comment.registeredDate } + merged = mergedComment.isDefined, + mergedAt = mergedComment.map { case (comment, _) => comment.registeredDate }, + mergedBy = mergedComment.map { case (_, account) => ApiUser(account) } ) } } @@ -236,7 +237,7 @@ ((issue, issueUser, pullRequest, baseOwner, headOwner), webHooks) <- getPullRequestsByRequestForWebhook(requestRepository.owner, requestRepository.name, requestBranch) baseRepo <- getRepository(pullRequest.userName, pullRequest.repositoryName) } yield { - val comments = getCommentsForApi(baseRepo.owner, baseRepo.name, issue.issueId) + val mergedComment = getMergedComment(getCommentsForApi(baseRepo.owner, baseRepo.name, issue.issueId)) val payload = WebHookPullRequestPayload( action = action, @@ -248,8 +249,9 @@ baseRepository = baseRepo, baseOwner = baseOwner, sender = sender, - merged = comments.exists { case (comment, _, _) => comment.action == "merged" }, - mergedAt = comments.collectFirst { case (comment, _, _) if(comment.action == "merged") => comment.registeredDate } + merged = mergedComment.isDefined, + mergedAt = mergedComment.map { case (comment, _) => comment.registeredDate }, + mergedBy = mergedComment.map { case (_, account) => ApiUser(account) } ) callWebHook(WebHook.PullRequest, webHooks, payload) @@ -271,7 +273,7 @@ issueUser <- users.get(issue.openedUserName) headRepo <- getRepository(pullRequest.requestUserName, pullRequest.requestRepositoryName) } yield { - val comments = getCommentsForApi(repository.owner, repository.name, issue.issueId) + val mergedComment = getMergedComment(getCommentsForApi(repository.owner, repository.name, issue.issueId)) WebHookPullRequestReviewCommentPayload( action = action, @@ -284,8 +286,9 @@ baseRepository = repository, baseOwner = baseOwner, sender = sender, - merged = comments.exists { case (comment, _, _) => comment.action == "merged" }, - mergedAt = comments.collectFirst { case (comment, _, _) if(comment.action == "merged") => comment.registeredDate } + merged = mergedComment.isDefined, + mergedAt = mergedComment.map { case (comment, _) => comment.registeredDate }, + mergedBy = mergedComment.map { case (_, account) => ApiUser(account) } ) } } @@ -386,11 +389,22 @@ baseOwner: Account, sender: Account, merged: Boolean, - mergedAt: Option[Date]): WebHookPullRequestPayload = { + mergedAt: Option[Date], + mergedBy: Option[ApiUser]): WebHookPullRequestPayload = { + val headRepoPayload = ApiRepository(headRepository, headOwner) val baseRepoPayload = ApiRepository(baseRepository, baseOwner) val senderPayload = ApiUser(sender) - val pr = ApiPullRequest(issue, pullRequest, headRepoPayload, baseRepoPayload, ApiUser(issueUser), merged, mergedAt) + val pr = ApiPullRequest( + issue = issue, + pullRequest = pullRequest, + headRepo = headRepoPayload, + baseRepo = baseRepoPayload, + user = ApiUser(issueUser), + merged = merged, + mergedAt = mergedAt, + mergedBy = mergedBy + ) WebHookPullRequestPayload( action = action, @@ -450,7 +464,8 @@ baseOwner: Account, sender: Account, merged: Boolean, - mergedAt: Option[Date] + mergedAt: Option[Date], + mergedBy: Option[ApiUser] ) : WebHookPullRequestReviewCommentPayload = { val headRepoPayload = ApiRepository(headRepository, headOwner) val baseRepoPayload = ApiRepository(baseRepository, baseOwner) @@ -471,7 +486,8 @@ baseRepo = baseRepoPayload, user = ApiUser(issueUser), merged = merged, - mergedAt = mergedAt + mergedAt = mergedAt, + mergedBy = mergedBy ), repository = baseRepoPayload, sender = senderPayload)