Split shared: Use KonanVersion in the generated version

This commit is contained in:
Ilya Matveev
2019-05-27 17:45:17 +03:00
committed by Ilya Matveev
parent a89bfba751
commit 1c2e324ad9
2 changed files with 10 additions and 102 deletions
@@ -1,3 +1,8 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
package org.jetbrains.kotlin
import groovy.lang.Closure
@@ -11,7 +16,7 @@ open class VersionGenerator: DefaultTask() {
@OutputDirectory
val versionSourceDirectory = project.file("build/generated")
@OutputFile
val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/KonanVersion.kt")
val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/KonanVersionGenerated.kt")
val konanVersion: String
@Input get() = project.properties["konanVersion"].toString()
@@ -44,66 +49,11 @@ open class VersionGenerator: DefaultTask() {
+ """
|package org.jetbrains.kotlin.konan
|
|import java.io.Serializable
|internal val currentKonanVersion: KonanVersion =
| KonanVersionImpl($meta, $major, $minor, $maintenance, $build)
|
|interface KonanVersion : Serializable {
| val meta: MetaVersion
| val major: Int
| val minor: Int
| val maintenance: Int
| val build: Int
|
| fun toString(showMeta: Boolean, showBuild: Boolean): String
|
| companion object {
| val CURRENT = KonanVersionImpl($meta, $major, $minor, $maintenance, $build)
| }
|}
|
|data class KonanVersionImpl(
| override val meta: MetaVersion = MetaVersion.DEV,
| override val major: Int,
| override val minor: Int,
| override val maintenance: Int,
| override val build: Int
|) : KonanVersion {
|
| override fun toString(showMeta: Boolean, showBuild: Boolean) = buildString {
| append(major)
| append('.')
| append(minor)
| if (maintenance != 0) {
| append('.')
| append(maintenance)
| }
| if (showMeta) {
| append('-')
| append(meta.metaString)
| }
| if (showBuild && build != -1) {
| append('-')
| append(build)
| }
| }
|
| private val isRelease: Boolean
| get() = meta == MetaVersion.RELEASE
|
| private val versionString by lazy { toString(!isRelease, !isRelease) }
|
| override fun toString() = versionString
|}
|fun String.parseKonanVersion(): KonanVersion {
| val (major, minor, maintenance, meta, build) =
| Regex(""${'"'}([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-(\p{Alpha}\p{Alnum}*))?(?:-([0-9]+))?""${'"'})
| .matchEntire(this)!!.destructured
| return KonanVersionImpl(
| MetaVersion.findAppropriate(meta),
| major.toInt(),
| minor.toInt(),
| maintenance.toIntOrNull() ?: 0,
| build.toIntOrNull() ?: -1)
|}
|val KonanVersion.Companion.CURRENT: KonanVersion
| get() = currentKonanVersion
""".trimMargin()
}
versionFile.printWriter().use {
@@ -1,42 +0,0 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.konan
// FIXME(ddol): KLIB-REFACTORING-CLEANUP: remove the whole file!
/**
* https://en.wikipedia.org/wiki/Software_versioning
* scheme major.minor[.build[.revision]].
*/
enum class MetaVersion(val metaString: String) {
DEV("dev"),
EAP("eap"),
ALPHA("alpha"),
BETA("beta"),
RC1("rc1"),
RC2("rc2"),
RELEASE("release");
companion object {
fun findAppropriate(metaString: String): MetaVersion {
return MetaVersion.values().find { it.metaString.equals(metaString, ignoreCase = true) }
?: if (metaString.isBlank()) RELEASE else error("Unknown meta version: $metaString")
}
}
}