mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 15:05:50 +01:00
(refs #179) Refactor
This commit is contained in:
@@ -4,14 +4,12 @@ import util.{LockUtil, CollaboratorsAuthenticator, JGitUtil, ReferrerAuthenticat
|
|||||||
import util.Directory._
|
import util.Directory._
|
||||||
import util.Implicits._
|
import util.Implicits._
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import util.FileUtil._
|
|
||||||
import service._
|
import service._
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
import jp.sf.amateras.scalatra.forms._
|
import jp.sf.amateras.scalatra.forms._
|
||||||
import org.eclipse.jgit.transport.RefSpec
|
import org.eclipse.jgit.transport.RefSpec
|
||||||
import scala.collection.JavaConverters._
|
import scala.collection.JavaConverters._
|
||||||
import org.eclipse.jgit.lib.{ObjectId, CommitBuilder, PersonIdent}
|
import org.eclipse.jgit.lib.{ObjectId, CommitBuilder, PersonIdent}
|
||||||
import org.eclipse.jgit.api.MergeCommand.FastForwardMode
|
|
||||||
import service.IssuesService._
|
import service.IssuesService._
|
||||||
import service.PullRequestService._
|
import service.PullRequestService._
|
||||||
import util.JGitUtil.DiffInfo
|
import util.JGitUtil.DiffInfo
|
||||||
@@ -119,18 +117,13 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
recordMergeActivity(owner, name, loginAccount.userName, issueId, form.message)
|
recordMergeActivity(owner, name, loginAccount.userName, issueId, form.message)
|
||||||
|
|
||||||
// prepare head branch
|
// prepare head branch
|
||||||
val headRefName = s"refs/pull/${issueId}/head"
|
fetchPullRequest(git, issueId, pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch)
|
||||||
val headRef = new RefSpec(s"refs/heads/${pullreq.requestBranch}:${headRefName}").setForceUpdate(true)
|
|
||||||
git.fetch
|
|
||||||
.setRemote(getRepositoryDir(pullreq.requestUserName, pullreq.requestRepositoryName).toURI.toString)
|
|
||||||
.setRefSpecs(headRef)
|
|
||||||
.call
|
|
||||||
|
|
||||||
// merge
|
// merge
|
||||||
val mergeBaseRefName = s"refs/heads/${pullreq.branch}"
|
val mergeBaseRefName = s"refs/heads/${pullreq.branch}"
|
||||||
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
||||||
val mergeBaseTip = git.getRepository.resolve(mergeBaseRefName)
|
val mergeBaseTip = git.getRepository.resolve(mergeBaseRefName)
|
||||||
val mergeTip = git.getRepository.resolve(headRefName)
|
val mergeTip = git.getRepository.resolve(s"refs/pull/${issueId}/head")
|
||||||
val conflicted = try {
|
val conflicted = try {
|
||||||
!merger.merge(mergeBaseTip, mergeTip)
|
!merger.merge(mergeBaseTip, mergeTip)
|
||||||
} catch {
|
} catch {
|
||||||
@@ -363,18 +356,13 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
issueId: Int): Boolean = {
|
issueId: Int): Boolean = {
|
||||||
LockUtil.lock(s"${userName}/${repositoryName}/merge") {
|
LockUtil.lock(s"${userName}/${repositoryName}/merge") {
|
||||||
using(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
|
using(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
|
||||||
// fetch pull request content into refs/pull/${issueId}/head
|
// fetch pull request contents
|
||||||
val headName = s"refs/pull/${issueId}/head"
|
fetchPullRequest(git, issueId, requestUserName, requestRepositoryName, requestBranch)
|
||||||
val headRef = new RefSpec(s"refs/heads/${requestBranch}:${headName}").setForceUpdate(true)
|
|
||||||
git.fetch
|
|
||||||
.setRemote(getRepositoryDir(requestUserName, requestRepositoryName).toURI.toString)
|
|
||||||
.setRefSpecs(headRef)
|
|
||||||
.call
|
|
||||||
|
|
||||||
// merge
|
// merge
|
||||||
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
||||||
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${branch}")
|
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${branch}")
|
||||||
val mergeTip = git.getRepository.resolve(headName)
|
val mergeTip = git.getRepository.resolve(s"refs/pull/${issueId}/head")
|
||||||
try {
|
try {
|
||||||
!merger.merge(mergeBaseTip, mergeTip)
|
!merger.merge(mergeBaseTip, mergeTip)
|
||||||
} catch {
|
} catch {
|
||||||
@@ -461,4 +449,14 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
hasWritePermission(owner, repoName, context.loginAccount))
|
hasWritePermission(owner, repoName, context.loginAccount))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch pull request contents into refs/pull/${issueId}/head
|
||||||
|
*/
|
||||||
|
private def fetchPullRequest(git: Git, issueId: Int, requestUserName: String, requestRepositoryName: String, requestBranch: String): Unit = {
|
||||||
|
git.fetch
|
||||||
|
.setRemote(getRepositoryDir(requestUserName, requestRepositoryName).toURI.toString)
|
||||||
|
.setRefSpecs(new RefSpec(s"refs/heads/${requestBranch}:refs/pull/${issueId}/head").setForceUpdate(true))
|
||||||
|
.call
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user