[Gradle][MPP] zipUtils: Add ZipFile.copyPartially

^KT-48135 WIP
This commit is contained in:
Sebastian Sellmair
2022-09-14 11:09:55 +02:00
committed by Space
parent 2391720999
commit 74594c05ca
@@ -12,35 +12,37 @@ import java.util.zip.ZipOutputStream
internal fun copyZipFilePartially(sourceZipFile: File, destinationZipFile: File, path: String) { internal fun copyZipFilePartially(sourceZipFile: File, destinationZipFile: File, path: String) {
requireValidZipDirectoryPath(path) requireValidZipDirectoryPath(path)
ZipFile(sourceZipFile).use { zip -> zip.copyPartially(destinationZipFile, path) }
}
ZipFile(sourceZipFile).use { zip -> internal fun ZipFile.copyPartially(destinationZipFile: File, path: String) {
val entries = zip.listDescendants(path).toList() requireValidZipDirectoryPath(path)
if (entries.isEmpty()) return val entries = listDescendants(path).toList()
if (entries.isEmpty()) return
ZipOutputStream(destinationZipFile.outputStream()).use { destinationZipOutputStream -> ZipOutputStream(destinationZipFile.outputStream()).use { destinationZipOutputStream ->
entries.forEach { sourceEntry -> entries.forEach { sourceEntry ->
val destinationEntry = ZipEntry(sourceEntry.name.substringAfter(path)) val destinationEntry = ZipEntry(sourceEntry.name.substringAfter(path))
sourceEntry.lastAccessTime?.let { destinationEntry.lastAccessTime = it } sourceEntry.lastAccessTime?.let { destinationEntry.lastAccessTime = it }
sourceEntry.lastModifiedTime?.let { destinationEntry.lastModifiedTime = it } sourceEntry.lastModifiedTime?.let { destinationEntry.lastModifiedTime = it }
sourceEntry.creationTime?.let { destinationEntry.creationTime = it } sourceEntry.creationTime?.let { destinationEntry.creationTime = it }
destinationEntry.crc = sourceEntry.crc destinationEntry.crc = sourceEntry.crc
destinationEntry.comment = sourceEntry.comment destinationEntry.comment = sourceEntry.comment
destinationEntry.size = sourceEntry.size destinationEntry.size = sourceEntry.size
destinationEntry.compressedSize = sourceEntry.compressedSize destinationEntry.compressedSize = sourceEntry.compressedSize
destinationEntry.extra = sourceEntry.extra destinationEntry.extra = sourceEntry.extra
destinationEntry.method = sourceEntry.method destinationEntry.method = sourceEntry.method
destinationZipOutputStream.putNextEntry(destinationEntry) destinationZipOutputStream.putNextEntry(destinationEntry)
if (!sourceEntry.isDirectory) { if (!sourceEntry.isDirectory) {
zip.getInputStream(sourceEntry).use { inputStream -> getInputStream(sourceEntry).use { inputStream ->
inputStream.copyTo(destinationZipOutputStream) inputStream.copyTo(destinationZipOutputStream)
}
} }
destinationZipOutputStream.closeEntry()
} }
destinationZipOutputStream.closeEntry()
} }
} }
} }