mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-01 11:06:06 +01:00
(refs #2)Fix pull request and marge behavior.
This commit is contained in:
@@ -123,6 +123,20 @@ trait CreateRepositoryControllerBase extends ControllerBase {
|
|||||||
getWikiRepositoryDir(repository.owner, repository.name),
|
getWikiRepositoryDir(repository.owner, repository.name),
|
||||||
getWikiRepositoryDir(loginUserName, repository.name))
|
getWikiRepositoryDir(loginUserName, repository.name))
|
||||||
|
|
||||||
|
// insert commit id
|
||||||
|
JGitUtil.withGit(getRepositoryDir(loginUserName, repository.name)){ git =>
|
||||||
|
JGitUtil.getRepositoryInfo(loginUserName, repository.name, baseUrl).branchList.foreach { branch =>
|
||||||
|
JGitUtil.getCommitLog(git, branch) match {
|
||||||
|
case Right((commits, _)) => commits.foreach { commit =>
|
||||||
|
if(!existsCommitId(loginUserName, repository.name, commit.id)){
|
||||||
|
insertCommitId(loginUserName, repository.name, commit.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case Left(_) => ???
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Record activity
|
// Record activity
|
||||||
recordForkActivity(repository.owner, repository.name, loginUserName)
|
recordForkActivity(repository.owner, repository.name, loginUserName)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,15 @@ package app
|
|||||||
|
|
||||||
import util.{CollaboratorsAuthenticator, FileUtil, JGitUtil, ReferrerAuthenticator}
|
import util.{CollaboratorsAuthenticator, FileUtil, JGitUtil, ReferrerAuthenticator}
|
||||||
import util.Directory._
|
import util.Directory._
|
||||||
|
import util.Implicits._
|
||||||
|
import util.JGitUtil.{DiffInfo, CommitInfo}
|
||||||
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 util.JGitUtil.{DiffInfo, CommitInfo}
|
|
||||||
import org.eclipse.jgit.transport.RefSpec
|
import org.eclipse.jgit.transport.RefSpec
|
||||||
import org.apache.commons.io.FileUtils
|
import org.apache.commons.io.FileUtils
|
||||||
import org.eclipse.jgit.lib.PersonIdent
|
import org.eclipse.jgit.lib.PersonIdent
|
||||||
|
import scala.collection.JavaConverters._
|
||||||
|
|
||||||
class PullRequestsController extends PullRequestsControllerBase
|
class PullRequestsController extends PullRequestsControllerBase
|
||||||
with RepositoryService with AccountService with IssuesService with PullRequestService with MilestonesService with ActivityService
|
with RepositoryService with AccountService with IssuesService with PullRequestService with MilestonesService with ActivityService
|
||||||
@@ -49,9 +51,9 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
val requestCommitId = git.getRepository.resolve(pullreq.requestBranch)
|
val requestCommitId = git.getRepository.resolve(pullreq.requestBranch)
|
||||||
|
|
||||||
val (commits, diffs) = if(pullreq.mergeStartId.isDefined){
|
val (commits, diffs) = if(pullreq.mergeStartId.isDefined){
|
||||||
getCompareInfo(owner, name, pullreq.mergeStartId.get, owner, name, pullreq.mergeEndId.get, true)
|
getMergedCompareInfo(owner, name, pullreq.mergeStartId.get, pullreq.mergeEndId.get)
|
||||||
} else {
|
} else {
|
||||||
getCompareInfo(owner, name, pullreq.branch, pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch, false)
|
getRequestCompareInfo(owner, name, pullreq.branch, pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch)
|
||||||
}
|
}
|
||||||
|
|
||||||
pulls.html.pullreq(
|
pulls.html.pullreq(
|
||||||
@@ -84,16 +86,6 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
val git = Git.cloneRepository.setDirectory(tmpdir).setURI(remote.toURI.toString).call
|
val git = Git.cloneRepository.setDirectory(tmpdir).setURI(remote.toURI.toString).call
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val (commits, _) = getCompareInfo(repository.owner, repository.name, pullreq.branch,
|
|
||||||
pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch, false)
|
|
||||||
mergePullRequest(repository.owner, repository.name, issueId,
|
|
||||||
git.getRepository.resolve("master").getName,
|
|
||||||
commits.head.head.id)
|
|
||||||
|
|
||||||
commits.flatten.foreach { commit =>
|
|
||||||
insertCommitId(repository.owner, repository.name, commit.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO mark issue as 'merged'
|
// TODO mark issue as 'merged'
|
||||||
val loginAccount = context.loginAccount.get
|
val loginAccount = context.loginAccount.get
|
||||||
createComment(repository.owner, repository.name, loginAccount.userName, issueId, "Closed", Some("close"))
|
createComment(repository.owner, repository.name, loginAccount.userName, issueId, "Closed", Some("close"))
|
||||||
@@ -117,6 +109,17 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
+ form.message).call
|
+ form.message).call
|
||||||
git.push.call
|
git.push.call
|
||||||
|
|
||||||
|
val (commits, _) = getRequestCompareInfo(repository.owner, repository.name, pullreq.branch,
|
||||||
|
pullreq.requestUserName, pullreq.requestRepositoryName, pullreq.requestBranch)
|
||||||
|
|
||||||
|
mergePullRequest(repository.owner, repository.name, issueId,
|
||||||
|
git.getRepository.resolve(pullreq.requestBranch).getName,
|
||||||
|
commits.head.head.id)
|
||||||
|
|
||||||
|
commits.flatten.foreach { commit =>
|
||||||
|
insertCommitId(repository.owner, repository.name, commit.id)
|
||||||
|
}
|
||||||
|
|
||||||
redirect(s"/${repository.owner}/${repository.name}/pulls/${issueId}")
|
redirect(s"/${repository.owner}/${repository.name}/pulls/${issueId}")
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
@@ -182,9 +185,9 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git =>
|
JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git =>
|
||||||
val newId = git.getRepository.resolve(forkedId)
|
val newId = git.getRepository.resolve(forkedId)
|
||||||
|
|
||||||
val (commits, diffs) = getCompareInfo(
|
val (commits, diffs) = getRequestCompareInfo(
|
||||||
origin, repository.repository.originRepositoryName.get, originId,
|
origin, repository.repository.originRepositoryName.get, originId,
|
||||||
repository.owner, repository.name, forkedId, false)
|
repository.owner, repository.name, forkedId)
|
||||||
|
|
||||||
pulls.html.compare(commits, diffs, origin, originId, forkedId, newId.getName,
|
pulls.html.compare(commits, diffs, origin, originId, forkedId, newId.getName,
|
||||||
checkConflict(originUserName, originRepositoryName, originId, repository.owner, repository.name, forkedId),
|
checkConflict(originUserName, originRepositoryName, originId, repository.owner, repository.name, forkedId),
|
||||||
@@ -230,15 +233,8 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private def getRequestCompareInfo(userName: String, repositoryName: String, branch: String,
|
||||||
* Returns the commits and diffs between specified repository and revision.
|
requestUserName: String, requestRepositoryName: String, requestBranch: String): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) = {
|
||||||
*/
|
|
||||||
private def getCompareInfo(userName: String, repositoryName: String, branch: String,
|
|
||||||
requestUserName: String, requestRepositoryName: String, requestBranch: String,
|
|
||||||
containsLastCommit: Boolean): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) = {
|
|
||||||
|
|
||||||
import scala.collection.JavaConverters._
|
|
||||||
import util.Implicits._
|
|
||||||
|
|
||||||
withGit(
|
withGit(
|
||||||
getRepositoryDir(userName, repositoryName),
|
getRepositoryDir(userName, repositoryName),
|
||||||
@@ -261,4 +257,24 @@ trait PullRequestsControllerBase extends ControllerBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def getMergedCompareInfo(userName: String, repositoryName: String,
|
||||||
|
startId: String, endId: String): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) = {
|
||||||
|
|
||||||
|
JGitUtil.withGit(getRepositoryDir(userName, repositoryName)){ git =>
|
||||||
|
val oldId = git.getRepository.resolve(startId)
|
||||||
|
val newId = git.getRepository.resolve(endId)
|
||||||
|
|
||||||
|
val commits = git.log.addRange(newId, oldId).call.iterator.asScala.map { revCommit =>
|
||||||
|
new CommitInfo(revCommit)
|
||||||
|
}.toList.splitWith{ (commit1, commit2) =>
|
||||||
|
view.helpers.date(commit1.time) == view.helpers.date(commit2.time)
|
||||||
|
}
|
||||||
|
|
||||||
|
val diffs = JGitUtil.getDiffs(git, oldId.getName, newId.getName, true)
|
||||||
|
|
||||||
|
(commits, diffs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user