mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 15:05:50 +01:00
update pullrequest commitId on file edited by online editor
This commit is contained in:
@@ -21,7 +21,7 @@ import service.WebHookService.WebHookPayload
|
|||||||
|
|
||||||
class RepositoryViewerController extends RepositoryViewerControllerBase
|
class RepositoryViewerController extends RepositoryViewerControllerBase
|
||||||
with RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService
|
with RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService
|
||||||
with ReadableUsersAuthenticator with ReferrerAuthenticator with CollaboratorsAuthenticator
|
with ReadableUsersAuthenticator with ReferrerAuthenticator with CollaboratorsAuthenticator with PullRequestService
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,7 +29,7 @@ class RepositoryViewerController extends RepositoryViewerControllerBase
|
|||||||
*/
|
*/
|
||||||
trait RepositoryViewerControllerBase extends ControllerBase {
|
trait RepositoryViewerControllerBase extends ControllerBase {
|
||||||
self: RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService
|
self: RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService
|
||||||
with ReadableUsersAuthenticator with ReferrerAuthenticator with CollaboratorsAuthenticator =>
|
with ReadableUsersAuthenticator with ReferrerAuthenticator with CollaboratorsAuthenticator with PullRequestService =>
|
||||||
|
|
||||||
ArchiveCommand.registerFormat("zip", new ZipFormat)
|
ArchiveCommand.registerFormat("zip", new ZipFormat)
|
||||||
ArchiveCommand.registerFormat("tar.gz", new TgzFormat)
|
ArchiveCommand.registerFormat("tar.gz", new TgzFormat)
|
||||||
@@ -496,6 +496,9 @@ trait RepositoryViewerControllerBase extends ControllerBase {
|
|||||||
//refUpdate.setRefLogMessage("merged", true)
|
//refUpdate.setRefLogMessage("merged", true)
|
||||||
refUpdate.update()
|
refUpdate.update()
|
||||||
|
|
||||||
|
// update pull request
|
||||||
|
updatePullRequests(repository.owner, repository.name, branch)
|
||||||
|
|
||||||
// record activity
|
// record activity
|
||||||
recordPushActivity(repository.owner, repository.name, loginAccount.userName, branch,
|
recordPushActivity(repository.owner, repository.name, loginAccount.userName, branch,
|
||||||
List(new CommitInfo(JGitUtil.getRevCommitFromId(git, commitId))))
|
List(new CommitInfo(JGitUtil.getRevCommitFromId(git, commitId))))
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package service
|
|||||||
import model.Profile._
|
import model.Profile._
|
||||||
import profile.simple._
|
import profile.simple._
|
||||||
import model.{PullRequest, Issue}
|
import model.{PullRequest, Issue}
|
||||||
|
import util.JGitUtil
|
||||||
|
|
||||||
trait PullRequestService { self: IssuesService =>
|
trait PullRequestService { self: IssuesService =>
|
||||||
import PullRequestService._
|
import PullRequestService._
|
||||||
@@ -81,6 +82,18 @@ trait PullRequestService { self: IssuesService =>
|
|||||||
.map { case (t1, t2) => t1 }
|
.map { case (t1, t2) => t1 }
|
||||||
.list
|
.list
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch pull request contents into refs/pull/${issueId}/head and update pull request table.
|
||||||
|
*/
|
||||||
|
def updatePullRequests(owner: String, repository: String, branch: String)(implicit s: Session): Unit =
|
||||||
|
getPullRequestsByRequest(owner, repository, branch, false).foreach { pullreq =>
|
||||||
|
if(Repositories.filter(_.byRepository(pullreq.userName, pullreq.repositoryName)).exists.run){
|
||||||
|
val (commitIdTo, commitIdFrom) = JGitUtil.updatePullRequest(
|
||||||
|
pullreq.userName, pullreq.repositoryName, pullreq.branch, pullreq.issueId,
|
||||||
|
pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch)
|
||||||
|
updateCommitId(pullreq.userName, pullreq.repositoryName, pullreq.issueId, commitIdTo, commitIdFrom)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object PullRequestService {
|
object PullRequestService {
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
|
|||||||
case ReceiveCommand.Type.CREATE |
|
case ReceiveCommand.Type.CREATE |
|
||||||
ReceiveCommand.Type.UPDATE |
|
ReceiveCommand.Type.UPDATE |
|
||||||
ReceiveCommand.Type.UPDATE_NONFASTFORWARD =>
|
ReceiveCommand.Type.UPDATE_NONFASTFORWARD =>
|
||||||
updatePullRequests(branchName)
|
updatePullRequests(owner, repository, branchName)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,26 +211,4 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch pull request contents into refs/pull/${issueId}/head and update pull request table.
|
|
||||||
*/
|
|
||||||
private def updatePullRequests(branch: String) =
|
|
||||||
getPullRequestsByRequest(owner, repository, branch, false).foreach { pullreq =>
|
|
||||||
if(getRepository(pullreq.userName, pullreq.repositoryName, baseUrl).isDefined){
|
|
||||||
using(Git.open(Directory.getRepositoryDir(pullreq.userName, pullreq.repositoryName)),
|
|
||||||
Git.open(Directory.getRepositoryDir(pullreq.requestUserName, pullreq.requestRepositoryName))){ (oldGit, newGit) =>
|
|
||||||
oldGit.fetch
|
|
||||||
.setRemote(Directory.getRepositoryDir(owner, repository).toURI.toString)
|
|
||||||
.setRefSpecs(new RefSpec(s"refs/heads/${branch}:refs/pull/${pullreq.issueId}/head").setForceUpdate(true))
|
|
||||||
.call
|
|
||||||
|
|
||||||
val commitIdTo = oldGit.getRepository.resolve(s"refs/pull/${pullreq.issueId}/head").getName
|
|
||||||
val commitIdFrom = JGitUtil.getForkedCommitId(oldGit, newGit,
|
|
||||||
pullreq.userName, pullreq.repositoryName, pullreq.branch,
|
|
||||||
pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch)
|
|
||||||
updateCommitId(pullreq.userName, pullreq.repositoryName, pullreq.issueId, commitIdTo, commitIdFrom)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.eclipse.jgit.treewalk._
|
|||||||
import org.eclipse.jgit.treewalk.filter._
|
import org.eclipse.jgit.treewalk.filter._
|
||||||
import org.eclipse.jgit.diff.DiffEntry.ChangeType
|
import org.eclipse.jgit.diff.DiffEntry.ChangeType
|
||||||
import org.eclipse.jgit.errors.{ConfigInvalidException, MissingObjectException}
|
import org.eclipse.jgit.errors.{ConfigInvalidException, MissingObjectException}
|
||||||
|
import org.eclipse.jgit.transport.RefSpec
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import org.eclipse.jgit.api.errors.{JGitInternalException, InvalidRefNameException, RefAlreadyExistsException, NoHeadException}
|
import org.eclipse.jgit.api.errors.{JGitInternalException, InvalidRefNameException, RefAlreadyExistsException, NoHeadException}
|
||||||
import service.RepositoryService
|
import service.RepositoryService
|
||||||
@@ -674,6 +675,25 @@ object JGitUtil {
|
|||||||
}.head.id
|
}.head.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch pull request contents into refs/pull/${issueId}/head and return (commitIdTo, commitIdFrom)
|
||||||
|
*/
|
||||||
|
def updatePullRequest(userName: String, repositoryName:String, branch: String, issueId: Int,
|
||||||
|
requestUserName: String, requestRepositoryName: String, requestBranch: String):(String, String) =
|
||||||
|
using(Git.open(Directory.getRepositoryDir(userName, repositoryName)),
|
||||||
|
Git.open(Directory.getRepositoryDir(requestUserName, requestRepositoryName))){ (oldGit, newGit) =>
|
||||||
|
oldGit.fetch
|
||||||
|
.setRemote(Directory.getRepositoryDir(requestUserName, requestRepositoryName).toURI.toString)
|
||||||
|
.setRefSpecs(new RefSpec(s"refs/heads/${requestBranch}:refs/pull/${issueId}/head").setForceUpdate(true))
|
||||||
|
.call
|
||||||
|
|
||||||
|
val commitIdTo = oldGit.getRepository.resolve(s"refs/pull/${issueId}/head").getName
|
||||||
|
val commitIdFrom = getForkedCommitId(oldGit, newGit,
|
||||||
|
userName, repositoryName, branch,
|
||||||
|
requestUserName, requestRepositoryName, requestBranch)
|
||||||
|
(commitIdTo, commitIdFrom)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the last modified commit of specified path
|
* Returns the last modified commit of specified path
|
||||||
* @param git the Git object
|
* @param git the Git object
|
||||||
|
|||||||
Reference in New Issue
Block a user