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
import java.io.File
import java.io.{File, FileInputStream, FileOutputStream}
import scala.util.Using
import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
@@ -993,11 +993,10 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val entryPath =
if (path.isEmpty) baseName + "/" + treeWalk.getPathString
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 entry: ArchiveEntry = entryCreator(entryPath, size, date, mode)
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(
EolStreamTypeUtil.wrapInputStream(
in,
@@ -1008,9 +1007,17 @@ trait RepositoryViewerControllerBase extends ControllerBase {
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()
tempFile.delete()
}
}
}
@@ -1034,6 +1041,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
Using.resource(new ZipArchiveOutputStream(response.getOutputStream)) { zip =>
archive(revision, ".zip", zip) { (path, size, date, mode) =>
val entry = new ZipArchiveEntry(path)
entry.setSize(size)
entry.setUnixMode(mode)
entry.setTime(date.getTime)
entry
@@ -1058,6 +1066,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
tar.setAddPaxHeadersForNonAsciiNames(true)
archive(revision, ".tar.gz", tar) { (path, size, date, mode) =>
val entry = new TarArchiveEntry(path)
entry.setSize(size)
entry.setModTime(date)
entry.setMode(mode)
entry