mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 20:15:59 +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