mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 14:35:52 +01:00
(refs #179) Remove refs/pull/${issueId}/merge
This commit is contained in:
@@ -118,24 +118,21 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
// record activity
|
// record activity
|
||||||
recordMergeActivity(owner, name, loginAccount.userName, issueId, form.message)
|
recordMergeActivity(owner, name, loginAccount.userName, issueId, form.message)
|
||||||
|
|
||||||
// prepare head/merge branch
|
// prepare head branch
|
||||||
val headName = s"refs/pull/${issueId}/head"
|
val headRefName = s"refs/pull/${issueId}/head"
|
||||||
val headRef = new RefSpec(s"refs/heads/${pullreq.requestBranch}:${headName}").setForceUpdate(true)
|
val headRef = new RefSpec(s"refs/heads/${pullreq.requestBranch}:${headRefName}").setForceUpdate(true)
|
||||||
git.fetch
|
git.fetch
|
||||||
.setRemote(getRepositoryDir(pullreq.requestUserName, pullreq.requestRepositoryName).toURI.toString)
|
.setRemote(getRepositoryDir(pullreq.requestUserName, pullreq.requestRepositoryName).toURI.toString)
|
||||||
.setRefSpecs(headRef)
|
.setRefSpecs(headRef)
|
||||||
.call
|
.call
|
||||||
|
|
||||||
val updateMergeRef = git.getRepository.updateRef(s"refs/pull/${issueId}/merge")
|
|
||||||
updateMergeRef.setNewObjectId(git.getRepository.resolve(s"refs/heads/${pullreq.branch}"))
|
|
||||||
updateMergeRef.forceUpdate()
|
|
||||||
|
|
||||||
// merge
|
// merge
|
||||||
|
val mergeBaseRefName = s"refs/heads/${pullreq.branch}"
|
||||||
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
||||||
val mergeTip = git.getRepository.resolve(s"refs/pull/${issueId}/head")
|
val mergeBaseTip = git.getRepository.resolve(mergeBaseRefName)
|
||||||
val mergeBaseTip = git.getRepository.resolve(s"refs/pull/${issueId}/merge")
|
val mergeTip = git.getRepository.resolve(headRefName)
|
||||||
val conflicted = try {
|
val conflicted = try {
|
||||||
!merger.merge(mergeTip, mergeBaseTip)
|
!merger.merge(mergeBaseTip, mergeTip)
|
||||||
} catch {
|
} catch {
|
||||||
case e: NoMergeBaseException => true
|
case e: NoMergeBaseException => true
|
||||||
}
|
}
|
||||||
@@ -160,7 +157,7 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
inserter.release()
|
inserter.release()
|
||||||
|
|
||||||
// update refs
|
// update refs
|
||||||
val refUpdate = git.getRepository.updateRef(s"refs/heads/${pullreq.branch}")
|
val refUpdate = git.getRepository.updateRef(mergeBaseRefName)
|
||||||
refUpdate.setNewObjectId(mergeCommitId)
|
refUpdate.setNewObjectId(mergeCommitId)
|
||||||
refUpdate.setForceUpdate(false)
|
refUpdate.setForceUpdate(false)
|
||||||
refUpdate.setRefLogIdent(personIdent)
|
refUpdate.setRefLogIdent(personIdent)
|
||||||
@@ -334,21 +331,22 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
requestUserName: String, requestRepositoryName: String, requestBranch: String): Boolean = {
|
requestUserName: String, requestRepositoryName: String, requestBranch: String): Boolean = {
|
||||||
LockUtil.lock(s"${userName}/${repositoryName}/merge-check"){
|
LockUtil.lock(s"${userName}/${repositoryName}/merge-check"){
|
||||||
using(Git.open(getRepositoryDir(requestUserName, requestRepositoryName))) { git =>
|
using(Git.open(getRepositoryDir(requestUserName, requestRepositoryName))) { git =>
|
||||||
val fromRefName = s"refs/heads/${branch}"
|
val remoteRefName = s"refs/heads/${branch}"
|
||||||
val toRefName = s"refs/merge-check/${userName}/${branch}"
|
val tmpRefName = s"refs/merge-check/${userName}/${branch}"
|
||||||
|
|
||||||
withTmpRefSpec(new RefSpec(s"${fromRefName}:${toRefName}").setForceUpdate(true), git) { ref =>
|
withTmpRefSpec(new RefSpec(s"${remoteRefName}:${tmpRefName}").setForceUpdate(true), git) { ref =>
|
||||||
// fetch objects from origin repository branch
|
// fetch objects from origin repository branch
|
||||||
git.fetch
|
git.fetch
|
||||||
.setRemote(getRepositoryDir(userName, repositoryName).toURI.toString)
|
.setRemote(getRepositoryDir(userName, repositoryName).toURI.toString)
|
||||||
.setRefSpecs(ref)
|
.setRefSpecs(ref)
|
||||||
.call
|
.call
|
||||||
|
|
||||||
// merge conflict check
|
// merge conflict check
|
||||||
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
||||||
val mergeTip = git.getRepository.resolve(toRefName)
|
|
||||||
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${requestBranch}")
|
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${requestBranch}")
|
||||||
|
val mergeTip = git.getRepository.resolve(tmpRefName)
|
||||||
try {
|
try {
|
||||||
!merger.merge(mergeTip, mergeBaseTip)
|
!merger.merge(mergeBaseTip, mergeTip)
|
||||||
} catch {
|
} catch {
|
||||||
case e: NoMergeBaseException => true
|
case e: NoMergeBaseException => true
|
||||||
}
|
}
|
||||||
@@ -373,18 +371,12 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
.setRefSpecs(headRef)
|
.setRefSpecs(headRef)
|
||||||
.call
|
.call
|
||||||
|
|
||||||
// setup mergeBase refs/pull/${issueId}/merge
|
|
||||||
val mergeName = s"refs/pull/${issueId}/merge"
|
|
||||||
val updateMergeRef = git.getRepository.updateRef(mergeName)
|
|
||||||
updateMergeRef.setNewObjectId(git.getRepository.resolve(s"refs/heads/${branch}"))
|
|
||||||
updateMergeRef.forceUpdate
|
|
||||||
|
|
||||||
// merge
|
// merge
|
||||||
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
val merger = MergeStrategy.RECURSIVE.newMerger(git.getRepository, true)
|
||||||
val mergeTip = git.getRepository.resolve(headName)
|
|
||||||
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${branch}")
|
val mergeBaseTip = git.getRepository.resolve(s"refs/heads/${branch}")
|
||||||
|
val mergeTip = git.getRepository.resolve(headName)
|
||||||
try {
|
try {
|
||||||
!merger.merge(mergeTip, mergeBaseTip)
|
!merger.merge(mergeBaseTip, mergeTip)
|
||||||
} catch {
|
} catch {
|
||||||
case e: NoMergeBaseException => true
|
case e: NoMergeBaseException => true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user