diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 1498c25..f3d1105 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -126,19 +126,6 @@ } }) - // TODO Share this method with WikiService - private def processTree(git: Git, id: ObjectId)(f: (String, CanonicalTreeParser) => Unit) = { - using(new RevWalk(git.getRepository)){ revWalk => - using(new TreeWalk(git.getRepository)){ treeWalk => - val index = treeWalk.addTree(revWalk.parseTree(id)) - treeWalk.setRecursive(true) - while(treeWalk.next){ - f(treeWalk.getPathString, treeWalk.getTree(index, classOf[CanonicalTreeParser])) - } - } - } - } - post("/:owner/:repository/edit/*", editorForm)(collaboratorsOnly { (form, repository) => val (id, path) = splitPath(repository, multiParams("splat").head) @@ -150,7 +137,7 @@ val headName = s"refs/heads/${id}" val headTip = git.getRepository.resolve(s"refs/heads/${id}") - processTree(git, headTip){ (treePath, tree) => + JGitUtil.processTree(git, headTip){ (treePath, tree) => if(treePath != path){ builder.add(JGitUtil.createDirCacheEntry(treePath, tree.getEntryFileMode, tree.getEntryObjectId)) } diff --git a/src/main/scala/service/WikiService.scala b/src/main/scala/service/WikiService.scala index 8c742e9..20fa764 100644 --- a/src/main/scala/service/WikiService.scala +++ b/src/main/scala/service/WikiService.scala @@ -175,17 +175,9 @@ val inserter = git.getRepository.newObjectInserter() val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}") - using(new RevWalk(git.getRepository)){ revWalk => - using(new TreeWalk(git.getRepository)){ treeWalk => - val index = treeWalk.addTree(revWalk.parseTree(headId)) - treeWalk.setRecursive(true) - while(treeWalk.next){ - val path = treeWalk.getPathString - val tree = treeWalk.getTree(index, classOf[CanonicalTreeParser]) - if(revertInfo.find(x => x.filePath == path).isEmpty){ - builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) - } - } + JGitUtil.processTree(git, headId){ (path, tree) => + if(revertInfo.find(x => x.filePath == path).isEmpty){ + builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) } } @@ -226,22 +218,14 @@ var removed = false if(headId != null){ - using(new RevWalk(git.getRepository)){ revWalk => - using(new TreeWalk(git.getRepository)){ treeWalk => - val index = treeWalk.addTree(revWalk.parseTree(headId)) - treeWalk.setRecursive(true) - while(treeWalk.next){ - val path = treeWalk.getPathString - val tree = treeWalk.getTree(index, classOf[CanonicalTreeParser]) - if(path == currentPageName + ".md" && currentPageName != newPageName){ - removed = true - } else if(path != newPageName + ".md"){ - builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) - } else { - created = false - updated = JGitUtil.getContentFromId(git, tree.getEntryObjectId, true).map(new String(_, "UTF-8") != content).getOrElse(false) - } - } + JGitUtil.processTree(git, headId){ (path, tree) => + if(path == currentPageName + ".md" && currentPageName != newPageName){ + removed = true + } else if(path != newPageName + ".md"){ + builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) + } else { + created = false + updated = JGitUtil.getContentFromId(git, tree.getEntryObjectId, true).map(new String(_, "UTF-8") != content).getOrElse(false) } } } @@ -280,25 +264,16 @@ val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}") var removed = false - using(new RevWalk(git.getRepository)){ revWalk => - using(new TreeWalk(git.getRepository)){ treeWalk => - val index = treeWalk.addTree(revWalk.parseTree(headId)) - treeWalk.setRecursive(true) - while(treeWalk.next){ - val path = treeWalk.getPathString - val tree = treeWalk.getTree(index, classOf[CanonicalTreeParser]) - if(path != pageName + ".md"){ - builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) - } else { - removed = true - } - } + JGitUtil.processTree(git, headId){ (path, tree) => + if(path != pageName + ".md"){ + builder.add(JGitUtil.createDirCacheEntry(path, tree.getEntryFileMode, tree.getEntryObjectId)) + } else { + removed = true } - - if(removed){ - builder.finish() - JGitUtil.createNewCommit(git, inserter, headId, builder.getDirCache.writeTree(inserter), committer, mailAddress, message) - } + } + if(removed){ + builder.finish() + JGitUtil.createNewCommit(git, inserter, headId, builder.getDirCache.writeTree(inserter), committer, mailAddress, message) } } } diff --git a/src/main/scala/util/ControlUtil.scala b/src/main/scala/util/ControlUtil.scala index 0b0f712..c231fb0 100644 --- a/src/main/scala/util/ControlUtil.scala +++ b/src/main/scala/util/ControlUtil.scala @@ -37,15 +37,4 @@ def using[T](treeWalk: TreeWalk)(f: TreeWalk => T): T = try f(treeWalk) finally treeWalk.release() - -// def withTmpRefSpec[T](ref: RefSpec, git: Git)(f: RefSpec => T): T = { -// try { -// f(ref) -// } finally { -// val refUpdate = git.getRepository.updateRef(ref.getDestination) -// refUpdate.setForceUpdate(true) -// refUpdate.delete() -// } -// } - } diff --git a/src/main/scala/util/FileUtil.scala b/src/main/scala/util/FileUtil.scala index e4c052f..f3bba07 100644 --- a/src/main/scala/util/FileUtil.scala +++ b/src/main/scala/util/FileUtil.scala @@ -31,24 +31,6 @@ def isText(content: Array[Byte]): Boolean = !content.contains(0) -// def createZipFile(dest: File, dir: File): Unit = { -// def addDirectoryToZip(out: ZipArchiveOutputStream, dir: File, path: String): Unit = { -// dir.listFiles.map { file => -// if(file.isFile){ -// out.putArchiveEntry(new ZipArchiveEntry(path + "/" + file.getName)) -// out.write(FileUtils.readFileToByteArray(file)) -// out.closeArchiveEntry -// } else if(file.isDirectory){ -// addDirectoryToZip(out, file, path + "/" + file.getName) -// } -// } -// } -// -// using(new ZipArchiveOutputStream(dest)){ out => -// addDirectoryToZip(out, dir, dir.getName) -// } -// } - def getFileName(path: String): String = defining(path.lastIndexOf('/')){ i => if(i >= 0) path.substring(i + 1) else path } diff --git a/src/main/scala/util/JGitUtil.scala b/src/main/scala/util/JGitUtil.scala index ef41f6b..62887a7 100644 --- a/src/main/scala/util/JGitUtil.scala +++ b/src/main/scala/util/JGitUtil.scala @@ -585,4 +585,17 @@ existIds.toSeq } + def processTree(git: Git, id: ObjectId)(f: (String, CanonicalTreeParser) => Unit) = { + using(new RevWalk(git.getRepository)){ revWalk => + using(new TreeWalk(git.getRepository)){ treeWalk => + val index = treeWalk.addTree(revWalk.parseTree(id)) + treeWalk.setRecursive(true) + while(treeWalk.next){ + f(treeWalk.getPathString, treeWalk.getTree(index, classOf[CanonicalTreeParser])) + } + } + } + } + + }