Added compare revisions for Wiki changes.

This commit is contained in:
takezoe
2013-05-04 02:09:14 +09:00
parent fc8bd7d3a6
commit 66db3a898b
8 changed files with 223 additions and 98 deletions

View File

@@ -5,6 +5,12 @@ import java.util.Date
import org.eclipse.jgit.api.Git
import org.apache.commons.io.FileUtils
import org.eclipse.jgit.lib.RepositoryBuilder
import app.DiffInfo
import org.eclipse.jgit.treewalk.CanonicalTreeParser
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.treewalk.TreeWalk
import org.eclipse.jgit.revwalk.RevWalk
import org.eclipse.jgit.diff.DiffEntry.ChangeType
object WikiUtil {
@@ -121,4 +127,53 @@ object WikiUtil {
}
}
def getDiffs(git: Git, commitId1: String, commitId2: String): List[DiffInfo] = {
// @scala.annotation.tailrec
// def getCommitLog(i: java.util.Iterator[RevCommit], logs: List[RevCommit]): List[RevCommit] =
// i.hasNext match {
// case true if(logs.size < 2) => getCommitLog(i, logs :+ i.next)
// case _ => logs
// }
//
// val revWalk = new RevWalk(git.getRepository)
// revWalk.markStart(revWalk.parseCommit(git.getRepository.resolve(commitId2)))
//
// val commits = getCommitLog(revWalk.iterator, Nil)
// revWalk.release
//
// val revCommit = commits(0)
//
//// if(commits.length >= 2){
// // not initial commit
// val oldCommit = commits(1)
// get diff between specified commit and its previous commit
val reader = git.getRepository.newObjectReader
val oldTreeIter = new CanonicalTreeParser
oldTreeIter.reset(reader, git.getRepository.resolve(commitId1 + "^{tree}"))
val newTreeIter = new CanonicalTreeParser
newTreeIter.reset(reader, git.getRepository.resolve(commitId2 + "^{tree}"))
import scala.collection.JavaConverters._
git.diff.setNewTree(newTreeIter).setOldTree(oldTreeIter).call.asScala.map { diff =>
DiffInfo(diff.getChangeType, diff.getOldPath, diff.getNewPath,
JGitUtil.getContent(git, diff.getOldId.toObjectId, false).map(new String(_, "UTF-8")),
JGitUtil.getContent(git, diff.getNewId.toObjectId, false).map(new String(_, "UTF-8")))
}.toList
// } else {
// // initial commit
// val walk = new TreeWalk(git.getRepository)
// walk.addTree(revCommit.getTree)
// val buffer = new scala.collection.mutable.ListBuffer[DiffInfo]()
// while(walk.next){
// buffer.append(DiffInfo(ChangeType.ADD, null, walk.getPathString, None,
// JGitUtil.getContent(git, walk.getObjectId(0), false).map(new String(_, "UTF-8"))))
// }
// walk.release
// buffer.toList
// }
}
}