diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala
index 20c1490..b237ac8 100644
--- a/src/main/scala/app/WikiController.scala
+++ b/src/main/scala/app/WikiController.scala
@@ -45,6 +45,32 @@
JGitUtil.getRepositoryInfo(owner, repository, servletContext))
}
+ get("/:owner/:repository/wiki/:page/_compare/:commitId"){
+ val owner = params("owner")
+ val repository = params("repository")
+ val page = params("page")
+ val commitId = params("commitId").split("\\.\\.\\.")
+
+ println(commitId(0))
+ println(commitId(1))
+
+ html.wikicompare(Some(page),
+ WikiUtil.getDiffs(Git.open(WikiUtil.getWikiRepositoryDir(owner, repository)), commitId(0), commitId(1)),
+ JGitUtil.getRepositoryInfo(owner, repository, servletContext))
+ }
+
+ get("/:owner/:repository/wiki/_compare/:commitId"){
+ val owner = params("owner")
+ val repository = params("repository")
+ val commitId = params("commitId").split("\\.\\.\\.")
+
+ println(commitId(0))
+ println(commitId(1))
+
+ html.wikicompare(None,
+ WikiUtil.getDiffs(Git.open(WikiUtil.getWikiRepositoryDir(owner, repository)), commitId(0), commitId(1)),
+ JGitUtil.getRepositoryInfo(owner, repository, servletContext))
+ }
get("/:owner/:repository/wiki/:page/_edit"){
val owner = params("owner")
diff --git a/src/main/scala/util/WikiUtil.scala b/src/main/scala/util/WikiUtil.scala
index bf6c0fe..40cf255 100644
--- a/src/main/scala/util/WikiUtil.scala
+++ b/src/main/scala/util/WikiUtil.scala
@@ -5,6 +5,12 @@
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 @@
}
}
+ 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
+// }
+ }
+
}
\ No newline at end of file
diff --git a/src/main/twirl/commit.scala.html b/src/main/twirl/commit.scala.html
index 6feef66..b845598 100644
--- a/src/main/twirl/commit.scala.html
+++ b/src/main/twirl/commit.scala.html
@@ -21,95 +21,5 @@
-
- @diffs.zipWithIndex.map { case (diff, i) =>
-
-
-
- @if(diff.changeType == ChangeType.COPY || diff.changeType == ChangeType.RENAME){
- @diff.oldPath -> @diff.newPath
- }
- @if(diff.changeType == ChangeType.ADD || diff.changeType == ChangeType.DELETE || diff.changeType == ChangeType.MODIFY){
- @diff.newPath
- }
-
- |
-
-
-
- @if(diff.newContent != None || diff.oldContent != None){
-
-
-
- } else {
- Too big file not shown
- }
- |
-
-
-
- }
+ @diff(diffs, repository, Some(commit.id))
}
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/twirl/diff.scala.html b/src/main/twirl/diff.scala.html
new file mode 100644
index 0000000..07b6d6d
--- /dev/null
+++ b/src/main/twirl/diff.scala.html
@@ -0,0 +1,94 @@
+@(diffs: Seq[app.DiffInfo], repository: app.RepositoryInfo, commitId: Option[String])(implicit context: app.Context)
+@import context._
+@import org.eclipse.jgit.diff.DiffEntry.ChangeType
+@diffs.zipWithIndex.map { case (diff, i) =>
+
+
+
+ @if(diff.changeType == ChangeType.COPY || diff.changeType == ChangeType.RENAME){
+ @diff.oldPath -> @diff.newPath
+ }
+ @if(diff.changeType == ChangeType.ADD || diff.changeType == ChangeType.DELETE || diff.changeType == ChangeType.MODIFY){
+ @diff.newPath
+ }
+ @if(commitId.isDefined){
+
+ }
+ |
+
+
+
+ @if(diff.newContent != None || diff.oldContent != None){
+
+
+
+ } else {
+ Too big file not shown
+ }
+ |
+
+
+}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/twirl/files.scala.html b/src/main/twirl/files.scala.html
index d75d024..e6d661e 100644
--- a/src/main/twirl/files.scala.html
+++ b/src/main/twirl/files.scala.html
@@ -1,7 +1,7 @@
@(branch: String, repository: app.RepositoryInfo, pathList: List[String], latestCommit: app.CommitInfo, files: List[app.FileInfo], readme: Option[String])(implicit context: app.Context)
@import context._
@import view.helpers
-@main(repository.owner+"/"+repository.name) {
+@main(repository.owner + "/" + repository.name) {
@header("code", repository)
@navtab(branch, repository, "files")
diff --git a/src/main/twirl/main.scala.html b/src/main/twirl/main.scala.html
index 6b57be8..4faf436 100644
--- a/src/main/twirl/main.scala.html
+++ b/src/main/twirl/main.scala.html
@@ -4,7 +4,7 @@
-
@title - GitBucket
+
@title
diff --git a/src/main/twirl/wikicompare.scala.html b/src/main/twirl/wikicompare.scala.html
new file mode 100644
index 0000000..ca5deea
--- /dev/null
+++ b/src/main/twirl/wikicompare.scala.html
@@ -0,0 +1,24 @@
+@(pageName: Option[String], diffs: Seq[app.DiffInfo], repository: app.RepositoryInfo)(implicit context: app.Context)
+@import view.helpers
+@import context._
+@import org.eclipse.jgit.diff.DiffEntry.ChangeType
+@main("Compare Revisions - " + repository.owner + "/" + repository.name){
+ @header("wiki", repository)
+ @wikitab("history", repository)
+
+ -
+
Compare Revisions
+
+ -
+
+
+
+ @diff(diffs, repository, None)
+}
diff --git a/src/main/twirl/wikihistory.scala.html b/src/main/twirl/wikihistory.scala.html
index 816dee8..66bd80e 100644
--- a/src/main/twirl/wikihistory.scala.html
+++ b/src/main/twirl/wikihistory.scala.html
@@ -7,11 +7,10 @@