From 884056b7b47412d947889268ea71e2dee36266d0 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Tue, 9 Feb 2021 13:14:06 +0700 Subject: [PATCH] Check that given anotherDistro path is actually a Kotlin/Native distribution --- .../kotlin/CompareDistributionSignatures.kt | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt index 381cc7c551d..6a5320f04c8 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt @@ -5,6 +5,10 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import org.jetbrains.kotlin.konan.target.HostManager import java.io.File +import java.nio.file.Files +import java.nio.file.LinkOption +import java.nio.file.Path +import java.nio.file.Paths /** * Compares SignatureIds of the current distribution and the given older one. @@ -60,6 +64,12 @@ open class CompareDistributionSignatures : DefaultTask() { @TaskAction fun run() { + check(looksLikeKotlinNativeDistribution(Paths.get(oldDistribution))) { + """ + `$oldDistribution` doesn't look like Kotlin/Native distribution. + Make sure to provide an absolute path to it. + """.trimIndent() + } val platformLibsDiff = computeDiff() if (platformLibsDiff.missingLibs.isNotEmpty()) { messageBuilder.apply { @@ -114,10 +124,24 @@ open class CompareDistributionSignatures : DefaultTask() { ) private fun String.stdlib(): File = - File("$this/klib/common/stdlib") + File("$this/klib/common/stdlib").also { + check(it.exists()) { + """ + `${it.absolutePath}` doesn't exists. + If $oldDistribution has a different directory layout then it is time to update this comparator. + """.trimIndent() + } + } private fun String.platformLibs(target: String): File = - File("$this/klib/platform/$target") + File("$this/klib/platform/$target").also { + check(it.exists()) { + """ + `${it.absolutePath}` doesn't exists. + Make sure that given distribution actually supports $target. + """.trimIndent() + } + } private fun getKlibSignatures(klib: File): List { @@ -137,4 +161,12 @@ open class CompareDistributionSignatures : DefaultTask() { oldKlibSignatures - newKlibSignatures, ) } + + private fun looksLikeKotlinNativeDistribution(directory: Path): Boolean { + val distributionComponents = directory.run { + val konanDir = resolve("konan") + setOf(resolve("bin"), resolve("klib"), konanDir, konanDir.resolve("konan.properties")) + } + return distributionComponents.all { Files.exists(it, LinkOption.NOFOLLOW_LINKS) } + } } \ No newline at end of file