diff --git a/src/main/scala/service/WikiService.scala b/src/main/scala/service/WikiService.scala index 9878348..3d09bc3 100644 --- a/src/main/scala/service/WikiService.scala +++ b/src/main/scala/service/WikiService.scala @@ -99,40 +99,45 @@ def revertWikiPage(owner: String, repository: String, from: String, to: String, committer: model.Account, pageName: Option[String]): Boolean = { LockUtil.lock(s"${owner}/${repository}/wiki"){ - using(Git.open(Directory.getWikiWorkDir(owner, repository))){ git => - val reader = git.getRepository.newObjectReader - val oldTreeIter = new CanonicalTreeParser - oldTreeIter.reset(reader, git.getRepository.resolve(from + "^{tree}")) + defining(Directory.getWikiWorkDir(owner, repository)){ workDir => + // clone working copy + cloneOrPullWorkingCopy(workDir, owner, repository) - val newTreeIter = new CanonicalTreeParser - newTreeIter.reset(reader, git.getRepository.resolve(to + "^{tree}")) + using(Git.open(workDir)){ git => + val reader = git.getRepository.newObjectReader + val oldTreeIter = new CanonicalTreeParser + oldTreeIter.reset(reader, git.getRepository.resolve(from + "^{tree}")) - import scala.collection.JavaConverters._ - val diffs = git.diff.setNewTree(oldTreeIter).setOldTree(newTreeIter).call.asScala.filter { diff => - pageName match { - case Some(x) => diff.getNewPath == x + ".md" - case None => true + val newTreeIter = new CanonicalTreeParser + newTreeIter.reset(reader, git.getRepository.resolve(to + "^{tree}")) + + import scala.collection.JavaConverters._ + val diffs = git.diff.setNewTree(oldTreeIter).setOldTree(newTreeIter).call.asScala.filter { diff => + pageName match { + case Some(x) => diff.getNewPath == x + ".md" + case None => true + } } - } - val patch = using(new java.io.ByteArrayOutputStream()){ out => - val formatter = new DiffFormatter(out) - formatter.setRepository(git.getRepository) - formatter.format(diffs.asJava) - new String(out.toByteArray, "UTF-8") - } + val patch = using(new java.io.ByteArrayOutputStream()){ out => + val formatter = new DiffFormatter(out) + formatter.setRepository(git.getRepository) + formatter.format(diffs.asJava) + new String(out.toByteArray, "UTF-8") + } - try { - git.apply.setPatch(new java.io.ByteArrayInputStream(patch.getBytes("UTF-8"))).call - git.add.addFilepattern(".").call - git.commit.setCommitter(committer.userName, committer.mailAddress).setMessage(pageName match { - case Some(x) => s"Revert ${from} ... ${to} on ${x}" - case None => s"Revert ${from} ... ${to}" - }).call - git.push.call - true - } catch { - case ex: PatchApplyException => false + try { + git.apply.setPatch(new java.io.ByteArrayInputStream(patch.getBytes("UTF-8"))).call + git.add.addFilepattern(".").call + git.commit.setCommitter(committer.userName, committer.mailAddress).setMessage(pageName match { + case Some(x) => s"Revert ${from} ... ${to} on ${x}" + case None => s"Revert ${from} ... ${to}" + }).call + git.push.call + true + } catch { + case ex: PatchApplyException => false + } } } }