not to make a temporary file when archive

This commit is contained in:
Toru Nayuki
2015-01-09 18:39:48 +09:00
parent 485d502bd3
commit 2552a58e08

View File

@@ -532,7 +532,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
} }
} }
private def archiveRepository(name: String, suffix: String, repository: RepositoryService.RepositoryInfo): File = { private def archiveRepository(name: String, suffix: String, repository: RepositoryService.RepositoryInfo): Unit = {
val revision = name.stripSuffix(suffix) val revision = name.stripSuffix(suffix)
val workDir = getDownloadWorkDir(repository.owner, repository.name, session.getId) val workDir = getDownloadWorkDir(repository.owner, repository.name, session.getId)
if(workDir.exists) { if(workDir.exists) {
@@ -540,21 +540,23 @@ trait RepositoryViewerControllerBase extends ControllerBase {
} }
workDir.mkdirs workDir.mkdirs
val file = new File(workDir, repository.name + "-" + val filename = repository.name + "-" +
(if(revision.length == 40) revision.substring(0, 10) else revision).replace('/', '_') + suffix) (if(revision.length == 40) revision.substring(0, 10) else revision).replace('/', '_') + suffix
using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(revision)) val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(revision))
using(new java.io.FileOutputStream(file)) { out =>
contentType = "application/octet-stream"
response.setHeader("Content-Disposition", s"attachment; filename=${filename}")
response.setBufferSize(1024 * 1024);
git.archive git.archive
.setFormat(suffix.tail) .setFormat(suffix.tail)
.setTree(revCommit.getTree) .setTree(revCommit.getTree)
.setOutputStream(out) .setOutputStream(response.getOutputStream)
.call() .call()
}
contentType = "application/octet-stream" Unit
response.setHeader("Content-Disposition", s"attachment; filename=${file.getName}")
file
} }
} }