From 1e308bb549af7b184098e79ce33569ac14cb29ff Mon Sep 17 00:00:00 2001 From: Gunnar Busch Date: Mon, 22 Feb 2021 16:47:51 +0100 Subject: [PATCH] Fix version info parsing --- app/models/config/SmuiVersion.scala | 20 +++++++------------- test/models/config/SmuiVersionSpec.scala | 7 +++++-- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/app/models/config/SmuiVersion.scala b/app/models/config/SmuiVersion.scala index dbe9e590..daec13d8 100644 --- a/app/models/config/SmuiVersion.scala +++ b/app/models/config/SmuiVersion.scala @@ -35,19 +35,12 @@ case class SmuiVersion( object SmuiVersion extends Logging { def parse(rawVersionString: String): Option[SmuiVersion] = { - val regExPattern = "([\\d]+).([\\d]+).([\\d]+)".r - Try({ - val regExPattern(majorStr, minorStr, buildStr) = rawVersionString - // convert strings to Ints - SmuiVersion( - majorStr.toInt, minorStr.toInt, buildStr.toInt - ) - }).toOption match { - case None => { - logger.error(s":: parse :: failed to parse rawVersionString = $rawVersionString") - None - } - case Some(version) => Some(version) + val Pattern = """^(\d+)(.\d+)?(.\d+)?$""".r + rawVersionString match { + case Pattern(major, null, null) => Some(SmuiVersion(major.toInt, 0, 0)) + case Pattern(major, minor, null) => Some(SmuiVersion(major.toInt, minor.tail.toInt, 0)) + case Pattern(major, minor, build) => Some(SmuiVersion(major.toInt, minor.tail.toInt, build.tail.toInt)) + case _ => None } } @@ -85,6 +78,7 @@ object SmuiVersion extends Logging { } else { rawVer1.get }) + parse(rawVer) match { case None => { logger.error(s":: unable to parse latest DockerHub version string for SMUI (rawVer = $rawVer)") diff --git a/test/models/config/SmuiVersionSpec.scala b/test/models/config/SmuiVersionSpec.scala index 63109f75..0e8ad925 100644 --- a/test/models/config/SmuiVersionSpec.scala +++ b/test/models/config/SmuiVersionSpec.scala @@ -23,12 +23,15 @@ class SmuiVersionSpec extends FlatSpec with Matchers { "SmuiVersion version parsing" should "return None for invalid strings" in { SmuiVersion.parse("invalid") shouldEqual None - SmuiVersion.parse("1.0") shouldEqual None SmuiVersion.parse("1.0.") shouldEqual None - SmuiVersion.parse("1") shouldEqual None SmuiVersion.parse("1.") shouldEqual None } + "SmuiVersion version parsing" should "fill missing values for minor or build versions" in { + SmuiVersion.parse("1") shouldEqual Some(SmuiVersion(1, 0, 0)) + SmuiVersion.parse("1.0") shouldEqual Some(SmuiVersion(1, 0, 0)) + } + "SmuiVersion for next deployment" should "be greater than latest version provided on DockerHub" in { // TODO deal with local deployments, that do not necessarily come with an incremented version number