(refs #2)Fix pull request and marge behavior.

This commit is contained in:
takezoe
2013-07-16 21:02:22 +09:00
parent f53f71ecf1
commit 2c52a4c40c
2 changed files with 54 additions and 24 deletions

View File

@@ -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)
} }

View File

@@ -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)
}
}
} }