[K/N][build] Define meta versions order and comparing

Move isAtLeast() from compiler downloader and test
to CompilerVersion.kt
This commit is contained in:
Pavel Punegov
2022-02-17 18:57:33 +03:00
parent 4644562e7f
commit 3d17d476e0
5 changed files with 39 additions and 39 deletions
@@ -76,3 +76,11 @@ data class CompilerVersionImpl(
override fun toString() = versionString
}
fun CompilerVersion.isAtLeast(compilerVersion: CompilerVersion): Boolean {
if (this.major != compilerVersion.major) return this.major > compilerVersion.major
if (this.minor != compilerVersion.minor) return this.minor > compilerVersion.minor
if (this.maintenance != compilerVersion.maintenance) return this.maintenance > compilerVersion.maintenance
if (this.meta != compilerVersion.meta) return this.meta > compilerVersion.meta
return this.build >= compilerVersion.build
}
@@ -5,21 +5,30 @@
package org.jetbrains.kotlin.konan
inline class MetaVersion(val metaString: String) {
operator fun compareTo(other: MetaVersion): Int {
if (metaOrder.contains(this)) {
if (metaOrder.contains(other)) {
return metaOrder.indexOf(this).compareTo(metaOrder.indexOf(other))
}
}
return metaString.compareTo(other.metaString)
}
companion object {
// Following meta versions are left for source-level compatibility
val DEV = MetaVersion("dev")
val DEV_GOOGLE = MetaVersion("dev-google-pr")
val EAP = MetaVersion("eap")
val BETA = MetaVersion("Beta")
val M1 = MetaVersion("M1")
val M2 = MetaVersion("M2")
val RC = MetaVersion("RC")
val PUB = MetaVersion("PUB")
val RELEASE = MetaVersion("release")
fun findAppropriate(metaString: String): MetaVersion =
listOf(DEV, DEV_GOOGLE, EAP, BETA, M1, M2, RC, PUB, RELEASE)
.find { it.metaString.equals(metaString, ignoreCase = true) }
?: if (metaString.isBlank()) RELEASE else MetaVersion(metaString)
// Defines order of meta versions
private val metaOrder = listOf(DEV, DEV_GOOGLE, EAP, BETA, RC, PUB, RELEASE)
fun findAppropriate(metaString: String): MetaVersion = metaOrder
.find { it.metaString.equals(metaString, ignoreCase = true) }
?: if (metaString.isBlank()) RELEASE else MetaVersion(metaString) // should it be lowercased?
}
}
@@ -5,10 +5,7 @@
package org.jetbrains.kotlin.native
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.CompilerVersionImpl
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.parseCompilerVersion
import org.jetbrains.kotlin.konan.*
import org.junit.Assert.assertEquals
import org.junit.Test
import kotlin.test.*
@@ -62,20 +59,6 @@ class NativeCompilerVersionTest {
assertEquals(MetaVersion.DEV, meta)
assertEquals(1, build)
}
"1.6.10-M1-3".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(6, minor)
assertEquals(10, maintenance)
assertEquals(MetaVersion.M1, meta)
assertEquals(3, build)
}
"1.6.20-M2".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(6, minor)
assertEquals(20, maintenance)
assertEquals(MetaVersion.M2, meta)
assertEquals(-1, build)
}
"1.6.10-RC".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(6, minor)
@@ -161,4 +144,17 @@ class NativeCompilerVersionTest {
assertEquals(-1, build)
}
}
@Test
fun metaVersionOrder() {
assertTrue("1.7.0-RC2".parseCompilerVersion().isAtLeast("1.7.0-RC".parseCompilerVersion()))
assertTrue("1.7.0-RC".parseCompilerVersion().isAtLeast("1.7.0-BETA".parseCompilerVersion()))
assertTrue("1.7.0-RC".parseCompilerVersion().isAtLeast("1.7.0-BETA2".parseCompilerVersion()))
assertTrue("1.7.0-RC2".parseCompilerVersion().isAtLeast("1.7.0-BETA3".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-RC".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-RC3".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-dev-1234".parseCompilerVersion()))
assertTrue("1.7.0-eap1".parseCompilerVersion().isAtLeast("1.7.0-eap".parseCompilerVersion()))
assertTrue("1.7.0-eap1".parseCompilerVersion().isAtLeast("1.7.0-eap-134".parseCompilerVersion()))
}
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.util.modify
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.CompilerVersionImpl
import org.jetbrains.kotlin.konan.isAtLeast
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.presetName
@@ -65,14 +66,6 @@ class NativePlatformLibsIT : BaseGradleIT() {
}
}
private fun CompilerVersion.isAtLeast(compilerVersion: CompilerVersion): Boolean {
if (this.major != compilerVersion.major) return this.major > compilerVersion.major
if (this.minor != compilerVersion.minor) return this.minor > compilerVersion.minor
if (this.maintenance != compilerVersion.maintenance) return this.maintenance > compilerVersion.maintenance
if (this.meta.ordinal != compilerVersion.meta.ordinal) return this.meta.ordinal > compilerVersion.meta.ordinal
return this.build >= compilerVersion.build
}
private fun simpleOsName(compilerVersion: CompilerVersion): String =
if (compilerVersion.isAtLeast(CompilerVersionImpl(major = 1, minor = 5, maintenance = 30, build = 1466))) {
HostManager.platformName()
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.NativeDistributionTyp
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.CompilerVersionImpl
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.isAtLeast
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.DependencyDirectories
import java.io.File
@@ -50,13 +51,6 @@ class NativeCompilerDownloader(
private val simpleOsName: String
get() {
fun CompilerVersion.isAtLeast(compilerVersion: CompilerVersion): Boolean {
if (this.major != compilerVersion.major) return this.major > compilerVersion.major
if (this.minor != compilerVersion.minor) return this.minor > compilerVersion.minor
if (this.maintenance != compilerVersion.maintenance) return this.maintenance > compilerVersion.maintenance
if (this.meta.ordinal != compilerVersion.meta.ordinal) return this.meta.ordinal > compilerVersion.meta.ordinal
return this.build >= compilerVersion.build
}
return if (compilerVersion.isAtLeast(CompilerVersionImpl(major = 1, minor = 5, maintenance = 30, build = 1466))) {
HostManager.platformName()
} else {