Improved version parsing.
This commit is contained in:
parent
c16f95a8d3
commit
c678bb7889
2 changed files with 34 additions and 13 deletions
|
@ -36,6 +36,7 @@ import org.gradle.api.GradleException
|
|||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.util.Properties
|
||||
|
||||
/**
|
||||
|
@ -77,7 +78,7 @@ object Utils {
|
|||
if (!exists() && createNewFile()) {
|
||||
isNew = true
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (e: IOException) {
|
||||
throw GradleException("Unable to create: `$absoluteFile`", e)
|
||||
}
|
||||
if (canReadFile()) {
|
||||
|
@ -131,26 +132,29 @@ object Utils {
|
|||
if (input.isNullOrBlank()) return false
|
||||
|
||||
try {
|
||||
val max = 5
|
||||
val min = 3
|
||||
|
||||
val parts = input.split(
|
||||
Regex("[\\Q${version.separator}${version.preReleasePrefix}${version.buildMetaPrefix}\\E]"),
|
||||
5
|
||||
max
|
||||
)
|
||||
|
||||
if (parts.size >= 3) {
|
||||
if (parts.size >= min) {
|
||||
version.major = parts[0].toInt()
|
||||
version.minor = parts[1].toInt()
|
||||
version.patch = parts[2].toInt()
|
||||
version.preRelease = ""
|
||||
version.buildMeta = ""
|
||||
|
||||
if (parts.size > 3) {
|
||||
if (parts.size > min) {
|
||||
when {
|
||||
parts.size == 5 -> {
|
||||
parts.size == max -> {
|
||||
version.preRelease = parts[3]
|
||||
version.buildMeta = parts[4]
|
||||
}
|
||||
parts.size == 4 -> {
|
||||
if (input.contains(version.buildMetaPrefix)) {
|
||||
if (input.endsWith(version.buildMetaPrefix + parts[3])) {
|
||||
version.buildMeta = parts[3]
|
||||
} else {
|
||||
version.preRelease = parts[3]
|
||||
|
@ -208,11 +212,11 @@ object Utils {
|
|||
store(it, "Generated by the Semver Plugin for Gradle")
|
||||
}
|
||||
} else {
|
||||
throw GradleException()
|
||||
throw IOException("Can't write.")
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`")
|
||||
} catch (e: IOException) {
|
||||
throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,8 +152,10 @@ object UtilsSpec : Spek({
|
|||
}
|
||||
}
|
||||
|
||||
Scenario("Testing Version Parsing") {
|
||||
When("validating version parsing") {
|
||||
Scenario("Version Parsing") {
|
||||
When("validating version parsing") {}
|
||||
|
||||
Then("versions should parse") {
|
||||
listOf(
|
||||
"1.0.0",
|
||||
"2.1.0-beta",
|
||||
|
@ -168,19 +170,34 @@ object UtilsSpec : Spek({
|
|||
}
|
||||
}
|
||||
|
||||
Then("should throw exceptions") {
|
||||
assertFailsWith<GradleException> {
|
||||
Utils.parseSemVer("2.1.1a", version)
|
||||
}
|
||||
assertFailsWith<GradleException> {
|
||||
Utils.parseSemVer("2a.1.1", version)
|
||||
}
|
||||
assertFailsWith<GradleException> {
|
||||
Utils.parseSemVer("2.1a.1", version)
|
||||
}
|
||||
assertFailsWith<GradleException> {
|
||||
Utils.parseSemVer("2.1", version)
|
||||
}
|
||||
}
|
||||
|
||||
Given("new prefixes") {
|
||||
version.preReleasePrefix = "."
|
||||
version.buildMetaPrefix = "."
|
||||
}
|
||||
|
||||
Then("validating prefixes parsing") {
|
||||
Then("prefixes should parse") {
|
||||
listOf("2.1.0.beta.1", "2.1.1.1", "3.2.1.beta.1.007").forEach {
|
||||
assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
|
||||
assertEquals(it, version.semver, it)
|
||||
}
|
||||
}
|
||||
|
||||
Then("verifying pre-release and meta") {
|
||||
Then("last pre-release and meta should match") {
|
||||
assertEquals(version.preRelease, "beta")
|
||||
assertEquals(version.buildMeta, "1.007")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue