diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 55e2043..c74a4f0 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -126,10 +126,13 @@ } val treeWalk = new TreeWalk(git.getRepository) - treeWalk.addTree(revCommit.getTree) - treeWalk.setRecursive(true) - val objectId = getPathObjectId(path, treeWalk) - treeWalk.release + val objectId = try { + treeWalk.addTree(revCommit.getTree) + treeWalk.setRecursive(true) + getPathObjectId(path, treeWalk) + } finally { + treeWalk.release + } if(raw){ // Download @@ -137,10 +140,22 @@ JGitUtil.getContent(git, objectId, false).get } else { // Viewer - val large = FileTypeUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize) - val viewer = if(FileTypeUtil.isImage(path)) "image" else if(large) "large" else "text" - val content = JGitUtil.ContentInfo(viewer, - if(viewer == "text") JGitUtil.getContent(git, objectId, false).map(new String(_, "UTF-8")) else None) + val large = FileTypeUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize) + val viewer = if(FileTypeUtil.isImage(path)) "image" else if(large) "large" else "other" + val bytes = if(viewer == "other") JGitUtil.getContent(git, objectId, false) else None + + val content = if(viewer == "other"){ + if(bytes.isDefined && FileTypeUtil.isText(bytes.get)){ + // text + JGitUtil.ContentInfo("text", bytes.map(new String(_, "UTF-8"))) + } else { + // binary + JGitUtil.ContentInfo("binary", None) + } + } else { + // image or large + JGitUtil.ContentInfo(viewer, None) + } repo.html.blob(id, repositoryInfo, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit)) } diff --git a/src/main/twirl/repo/blob.scala.html b/src/main/twirl/repo/blob.scala.html index 32dde5c..3078a52 100644 --- a/src/main/twirl/repo/blob.scala.html +++ b/src/main/twirl/repo/blob.scala.html @@ -37,7 +37,7 @@ @if(content.viewType == "image"){ } - @if(content.viewType == "large"){ + @if(content.viewType == "large" || content.viewType == "binary"){
View Raw
(Sorry about that, but we can't show files that are this big right now)