Set entry size in creating an archive file (#2324)

This commit is contained in:
Naoki Takezoe
2019-08-05 02:44:49 +09:00
committed by GitHub
parent 91bf562b91
commit d494014011

View File

@@ -1,6 +1,6 @@
package gitbucket.core.controller package gitbucket.core.controller
import java.io.File import java.io.{File, FileInputStream, FileOutputStream}
import scala.util.Using import scala.util.Using
import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
@@ -993,11 +993,10 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val entryPath = val entryPath =
if (path.isEmpty) baseName + "/" + treeWalk.getPathString if (path.isEmpty) baseName + "/" + treeWalk.getPathString
else path.split("/").last + treeWalk.getPathString.substring(path.length) else path.split("/").last + treeWalk.getPathString.substring(path.length)
val size = JGitUtil.getContentSize(git.getRepository.open(treeWalk.getObjectId(0)))
val mode = treeWalk.getFileMode.getBits val mode = treeWalk.getFileMode.getBits
val entry: ArchiveEntry = entryCreator(entryPath, size, date, mode)
JGitUtil.openFile(git, repository, commit.getTree, treeWalk.getPathString) { in => JGitUtil.openFile(git, repository, commit.getTree, treeWalk.getPathString) { in =>
archive.putArchiveEntry(entry) val tempFile = File.createTempFile("gitbucket", ".archive")
val size = using(new FileOutputStream(tempFile)) { out =>
IOUtils.copy( IOUtils.copy(
EolStreamTypeUtil.wrapInputStream( EolStreamTypeUtil.wrapInputStream(
in, in,
@@ -1008,9 +1007,17 @@ trait RepositoryViewerControllerBase extends ControllerBase {
treeWalk.getAttributes treeWalk.getAttributes
) )
), ),
archive out
) )
}
val entry: ArchiveEntry = entryCreator(entryPath, size, date, mode)
archive.putArchiveEntry(entry)
using(new FileInputStream(tempFile)) { in =>
IOUtils.copy(in, archive)
}
archive.closeArchiveEntry() archive.closeArchiveEntry()
tempFile.delete()
} }
} }
} }
@@ -1034,6 +1041,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
Using.resource(new ZipArchiveOutputStream(response.getOutputStream)) { zip => Using.resource(new ZipArchiveOutputStream(response.getOutputStream)) { zip =>
archive(revision, ".zip", zip) { (path, size, date, mode) => archive(revision, ".zip", zip) { (path, size, date, mode) =>
val entry = new ZipArchiveEntry(path) val entry = new ZipArchiveEntry(path)
entry.setSize(size)
entry.setUnixMode(mode) entry.setUnixMode(mode)
entry.setTime(date.getTime) entry.setTime(date.getTime)
entry entry
@@ -1058,6 +1066,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
tar.setAddPaxHeadersForNonAsciiNames(true) tar.setAddPaxHeadersForNonAsciiNames(true)
archive(revision, ".tar.gz", tar) { (path, size, date, mode) => archive(revision, ".tar.gz", tar) { (path, size, date, mode) =>
val entry = new TarArchiveEntry(path) val entry = new TarArchiveEntry(path)
entry.setSize(size)
entry.setModTime(date) entry.setModTime(date)
entry.setMode(mode) entry.setMode(mode)
entry entry