mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
(refs #330)Return NotFound if specified file does not exist
This commit is contained in:
@@ -82,44 +82,45 @@ trait RepositoryViewerControllerBase extends ControllerBase {
|
|||||||
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
|
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
|
||||||
|
|
||||||
@scala.annotation.tailrec
|
@scala.annotation.tailrec
|
||||||
def getPathObjectId(path: String, walk: TreeWalk): ObjectId = walk.next match {
|
def getPathObjectId(path: String, walk: TreeWalk): Option[ObjectId] = walk.next match {
|
||||||
case true if(walk.getPathString == path) => walk.getObjectId(0)
|
case true if(walk.getPathString == path) => Some(walk.getObjectId(0))
|
||||||
case true => getPathObjectId(path, walk)
|
case true => getPathObjectId(path, walk)
|
||||||
|
case false => None
|
||||||
}
|
}
|
||||||
|
|
||||||
val objectId = using(new TreeWalk(git.getRepository)){ treeWalk =>
|
using(new TreeWalk(git.getRepository)){ treeWalk =>
|
||||||
treeWalk.addTree(revCommit.getTree)
|
treeWalk.addTree(revCommit.getTree)
|
||||||
treeWalk.setRecursive(true)
|
treeWalk.setRecursive(true)
|
||||||
getPathObjectId(path, treeWalk)
|
getPathObjectId(path, treeWalk)
|
||||||
}
|
} map { objectId =>
|
||||||
|
if(raw){
|
||||||
if(raw){
|
// Download
|
||||||
// Download
|
defining(JGitUtil.getContent(git, objectId, false).get){ bytes =>
|
||||||
defining(JGitUtil.getContent(git, objectId, false).get){ bytes =>
|
contentType = FileUtil.getContentType(path, bytes)
|
||||||
contentType = FileUtil.getContentType(path, bytes)
|
bytes
|
||||||
bytes
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Viewer
|
|
||||||
val large = FileUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize)
|
|
||||||
val viewer = if(FileUtil.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 && FileUtil.isText(bytes.get)){
|
|
||||||
// text
|
|
||||||
JGitUtil.ContentInfo("text", bytes.map(StringUtil.convertFromByteArray))
|
|
||||||
} else {
|
|
||||||
// binary
|
|
||||||
JGitUtil.ContentInfo("binary", None)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// image or large
|
// Viewer
|
||||||
JGitUtil.ContentInfo(viewer, None)
|
val large = FileUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize)
|
||||||
}
|
val viewer = if(FileUtil.isImage(path)) "image" else if(large) "large" else "other"
|
||||||
|
val bytes = if(viewer == "other") JGitUtil.getContent(git, objectId, false) else None
|
||||||
|
|
||||||
repo.html.blob(id, repository, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit))
|
val content = if(viewer == "other"){
|
||||||
}
|
if(bytes.isDefined && FileUtil.isText(bytes.get)){
|
||||||
|
// text
|
||||||
|
JGitUtil.ContentInfo("text", bytes.map(StringUtil.convertFromByteArray))
|
||||||
|
} else {
|
||||||
|
// binary
|
||||||
|
JGitUtil.ContentInfo("binary", None)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// image or large
|
||||||
|
JGitUtil.ContentInfo(viewer, None)
|
||||||
|
}
|
||||||
|
|
||||||
|
repo.html.blob(id, repository, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit))
|
||||||
|
}
|
||||||
|
} getOrElse NotFound
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user