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.BufferedOutputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
|
import java.util.*
|
||||||
import java.util.jar.JarFile
|
import java.util.jar.JarFile
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipOutputStream
|
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
|
* 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()
|
val classRegex = classNamePattern.toRegex()
|
||||||
|
|
||||||
assert(inFile.exists()) { "Input file not found at $inFile" }
|
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)
|
val newEntry = ZipEntry(entry.name)
|
||||||
|
if (!preserveFileTimestamps) {
|
||||||
|
newEntry.time = CONSTANT_TIME_FOR_ZIP_ENTRIES
|
||||||
|
}
|
||||||
outJar.putNextEntry(newEntry)
|
outJar.putNextEntry(newEntry)
|
||||||
outJar.write(outBytes)
|
outJar.write(outBytes)
|
||||||
outJar.closeEntry()
|
outJar.closeEntry()
|
||||||
|
|||||||
@@ -128,7 +128,13 @@ val stripMetadata by tasks.registering {
|
|||||||
outputs.file(outputJar)
|
outputs.file(outputJar)
|
||||||
outputs.cacheIf { true }
|
outputs.cacheIf { true }
|
||||||
doLast {
|
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