Improve performance of the commit history page.

This commit is contained in:
takezoe
2013-06-20 03:00:54 +09:00
parent ff27135df6
commit 111c6a7bad

View File

@@ -238,7 +238,7 @@ object JGitUtil {
if(path.nonEmpty){ if(path.nonEmpty){
revWalk.setRevFilter(new RevFilter(){ revWalk.setRevFilter(new RevFilter(){
def include(walk: RevWalk, commit: RevCommit): Boolean = { def include(walk: RevWalk, commit: RevCommit): Boolean = {
getDiffs(git, commit.getName).find(_.newPath == path).nonEmpty getDiffs(git, commit.getName, false).find(_.newPath == path).nonEmpty
} }
override def clone(): RevFilter = this override def clone(): RevFilter = this
}) })
@@ -374,7 +374,7 @@ object JGitUtil {
case e: MissingObjectException => None case e: MissingObjectException => None
} }
def getDiffs(git: Git, id: String): List[DiffInfo] = { def getDiffs(git: Git, id: String, fetchContent: Boolean = true): List[DiffInfo] = {
@scala.annotation.tailrec @scala.annotation.tailrec
def getCommitLog(i: java.util.Iterator[RevCommit], logs: List[RevCommit]): List[RevCommit] = def getCommitLog(i: java.util.Iterator[RevCommit], logs: List[RevCommit]): List[RevCommit] =
i.hasNext match { i.hasNext match {
@@ -405,8 +405,8 @@ object JGitUtil {
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
git.diff.setNewTree(newTreeIter).setOldTree(oldTreeIter).call.asScala.map { diff => git.diff.setNewTree(newTreeIter).setOldTree(oldTreeIter).call.asScala.map { diff =>
if(FileTypeUtil.isImage(diff.getOldPath) || FileTypeUtil.isImage(diff.getNewPath)){ if(!fetchContent || FileTypeUtil.isImage(diff.getOldPath) || FileTypeUtil.isImage(diff.getNewPath)){
DiffInfo(diff.getChangeType, diff.getOldPath, diff.getNewPath, None, None) DiffInfo(diff.getChangeType, diff.getOldPath, diff.getNewPath, None, None)
} else { } else {
DiffInfo(diff.getChangeType, diff.getOldPath, diff.getNewPath, DiffInfo(diff.getChangeType, diff.getOldPath, diff.getNewPath,
JGitUtil.getContent(git, diff.getOldId.toObjectId, false).map(new String(_, "UTF-8")), JGitUtil.getContent(git, diff.getOldId.toObjectId, false).map(new String(_, "UTF-8")),
@@ -419,8 +419,11 @@ object JGitUtil {
walk.addTree(revCommit.getTree) walk.addTree(revCommit.getTree)
val buffer = new scala.collection.mutable.ListBuffer[DiffInfo]() val buffer = new scala.collection.mutable.ListBuffer[DiffInfo]()
while(walk.next){ while(walk.next){
buffer.append(DiffInfo(ChangeType.ADD, null, walk.getPathString, None, buffer.append((if(!fetchContent){
JGitUtil.getContent(git, walk.getObjectId(0), false).map(new String(_, "UTF-8")))) DiffInfo(ChangeType.ADD, null, walk.getPathString, None, None)
} else {
DiffInfo(ChangeType.ADD, null, walk.getPathString, None, JGitUtil.getContent(git, walk.getObjectId(0), false).map(new String(_, "UTF-8")))
}))
} }
walk.release walk.release
buffer.toList buffer.toList