mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-25 07:57:12 -07:00
Create directories before actual entries in the jar file.
This commit is contained in:
parent
df89933cc8
commit
a6f36de6a6
1 changed files with 33 additions and 2 deletions
|
@ -29,6 +29,7 @@ class MetaArchive(outputFile: File, val manifest: Manifest?) : Closeable {
|
|||
// If no manifest was passed, create an empty one so it's the first one in the archive
|
||||
val m = manifest ?: Manifest()
|
||||
val manifestFile = File.createTempFile("kobalt", "tmpManifest")
|
||||
addEntry(ZipArchiveEntry("META-INF/"), null)
|
||||
if (manifest != null) {
|
||||
FileOutputStream(manifestFile).use { fos ->
|
||||
m.write(fos)
|
||||
|
@ -40,10 +41,16 @@ class MetaArchive(outputFile: File, val manifest: Manifest?) : Closeable {
|
|||
|
||||
|
||||
fun addFile(f: File, entryFile: File, path: String?) {
|
||||
maybeCreateParentDirectories(f)
|
||||
addFile2(f, entryFile, path)
|
||||
}
|
||||
|
||||
private fun addFile2(f: File, entryFile: File, path: String?) {
|
||||
val file = f.normalize()
|
||||
FileInputStream(file).use { inputStream ->
|
||||
val actualPath = KFiles.fixSlashes(if (path != null) path + entryFile.path else entryFile.path)
|
||||
ZipArchiveEntry(actualPath).let { entry ->
|
||||
maybeCreateParentDirectories(File(actualPath))
|
||||
maybeAddEntry(entry) {
|
||||
addEntry(entry, inputStream)
|
||||
}
|
||||
|
@ -51,6 +58,30 @@ class MetaArchive(outputFile: File, val manifest: Manifest?) : Closeable {
|
|||
}
|
||||
}
|
||||
|
||||
private val createdDirs = hashSetOf<String>()
|
||||
|
||||
/**
|
||||
* For an entry a/b/c/File, an entry needs to be created for each individual directory:
|
||||
* a/
|
||||
* a/b/
|
||||
* a/b/c
|
||||
* a/b/c/File
|
||||
*/
|
||||
private fun maybeCreateParentDirectories(file: File) {
|
||||
val toCreate = arrayListOf<String>()
|
||||
var current = file.parentFile
|
||||
while (current != null && current.path != ".") {
|
||||
if (!createdDirs.contains(current.path)) {
|
||||
toCreate.add(0, KFiles.fixSlashes(current) + "/")
|
||||
createdDirs.add(current.path)
|
||||
}
|
||||
current = current.parentFile
|
||||
}
|
||||
toCreate.forEach { dir ->
|
||||
addEntry(ZipArchiveEntry(dir), null)
|
||||
}
|
||||
}
|
||||
|
||||
fun addArchive(jarFile: File) {
|
||||
ApacheZipFile(jarFile).use { jar ->
|
||||
val jarEntries = jar.entries
|
||||
|
@ -73,9 +104,9 @@ class MetaArchive(outputFile: File, val manifest: Manifest?) : Closeable {
|
|||
|
||||
override fun close() = zos.close()
|
||||
|
||||
private fun addEntry(entry: ArchiveEntry, inputStream: FileInputStream) {
|
||||
private fun addEntry(entry: ArchiveEntry, inputStream: FileInputStream?) {
|
||||
zos.putArchiveEntry(entry)
|
||||
inputStream.use { ins ->
|
||||
inputStream?.use { ins ->
|
||||
ins.copyTo(zos, 50 * 1024)
|
||||
}
|
||||
zos.closeArchiveEntry()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue