Build: Implement preserveFileTimestamps for stripMetadata task
This commit is contained in:
@@ -5,14 +5,17 @@ import org.jetbrains.org.objectweb.asm.*
|
||||
import java.io.BufferedOutputStream
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.util.*
|
||||
import java.util.jar.JarFile
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
private val CONSTANT_TIME_FOR_ZIP_ENTRIES = GregorianCalendar(1980, 1, 1, 0, 0, 0).timeInMillis
|
||||
|
||||
/**
|
||||
* Removes @kotlin.Metadata annotations from compiled Kotlin classes
|
||||
*/
|
||||
fun stripMetadata(logger: Logger, classNamePattern: String, inFile: File, outFile: File) {
|
||||
fun stripMetadata(logger: Logger, classNamePattern: String, inFile: File, outFile: File, preserveFileTimestamps: Boolean = true) {
|
||||
val classRegex = classNamePattern.toRegex()
|
||||
|
||||
assert(inFile.exists()) { "Input file not found at $inFile" }
|
||||
@@ -49,6 +52,9 @@ fun stripMetadata(logger: Logger, classNamePattern: String, inFile: File, outFil
|
||||
}
|
||||
|
||||
val newEntry = ZipEntry(entry.name)
|
||||
if (!preserveFileTimestamps) {
|
||||
newEntry.time = CONSTANT_TIME_FOR_ZIP_ENTRIES
|
||||
}
|
||||
outJar.putNextEntry(newEntry)
|
||||
outJar.write(outBytes)
|
||||
outJar.closeEntry()
|
||||
|
||||
@@ -128,7 +128,13 @@ val stripMetadata by tasks.registering {
|
||||
outputs.file(outputJar)
|
||||
outputs.cacheIf { true }
|
||||
doLast {
|
||||
stripMetadata(logger, "kotlin/reflect/jvm/internal/impl/.*", inputJar.get(), outputJar)
|
||||
stripMetadata(
|
||||
logger = logger,
|
||||
classNamePattern = "kotlin/reflect/jvm/internal/impl/.*",
|
||||
inFile = inputJar.get(),
|
||||
outFile = outputJar,
|
||||
preserveFileTimestamps = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user