From 6349a5ccd1df04bb67f8c83fd8850bee87983cec Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Thu, 7 Apr 2016 15:39:17 +0200 Subject: [PATCH] Platform: build numbers: support arbitrary number of components in branch-based build number as well --- build.txt | 2 +- .../intellij/openapi/util/BuildNumber.java | 49 +++++-------------- .../openapi/util/BuildNumberTest.java | 22 +++++++-- 3 files changed, 31 insertions(+), 42 deletions(-) diff --git a/build.txt b/build.txt index 3cc9852876ab..6f540e14d3a6 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -2016.2.SNAPSHOT +146.SNAPSHOT diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java index b31473ab6fd5..5d9178209380 100644 --- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java +++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java @@ -34,7 +34,7 @@ public class BuildNumber implements Comparable { private static final String BUILD_NUMBER = "__BUILD_NUMBER__"; private static final String STAR = "*"; private static final String SNAPSHOT = "SNAPSHOT"; - private static final String FALLBACK_VERSION = "2999.1.SNAPSHOT"; + private static final String FALLBACK_VERSION = "9999.SNAPSHOT"; public static final int SNAPSHOT_VALUE = Integer.MAX_VALUE; @@ -117,49 +117,24 @@ public class BuildNumber implements Comparable { if (baselineVersionSeparator > 0) { String baselineVersionString = code.substring(0, baselineVersionSeparator); if (baselineVersionString.trim().isEmpty()) return null; - try { - baselineVersion = Integer.parseInt(baselineVersionString); - } - catch (NumberFormatException e) { - throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name); + + List stringComponents = StringUtil.split(code, "."); + TIntArrayList intComponentsList = new TIntArrayList(); + + for (String stringComponent : stringComponents) { + int comp = parseBuildNumber(version, stringComponent, name); + intComponentsList.add(comp); + if (comp == SNAPSHOT_VALUE) break; } - if (isYearBased(baselineVersion)) { - List stringComponents = StringUtil.split(code, "."); - TIntArrayList intComponentsList = new TIntArrayList(); - - for (String stringComponent : stringComponents) { - int comp = parseBuildNumber(version, stringComponent, name); - intComponentsList.add(comp); - if (comp == SNAPSHOT_VALUE) break; - } - - int[] intComponents = intComponentsList.toNativeArray(); + int[] intComponents = intComponentsList.toNativeArray(); + if (isYearBased(intComponents[0])) { if (intComponents[1] != SNAPSHOT_VALUE) { intComponents[1] = normalizedYearRevision(intComponents); } - - return new BuildNumber(productCode, intComponents); } - else { - code = code.substring(baselineVersionSeparator + 1); - int minorBuildSeparator = code.indexOf('.'); // allow . skipping BuildAttemptNumber - - Integer attemptInfo = null; - if (minorBuildSeparator > 0) { - attemptInfo = parseBuildNumber(version, code.substring(minorBuildSeparator + 1), name); - code = code.substring(0, minorBuildSeparator); - } - buildNumber = parseBuildNumber(version, code, name); - - if (attemptInfo != null) { - return new BuildNumber(productCode, baselineVersion, buildNumber, attemptInfo); - } - else { - return new BuildNumber(productCode, baselineVersion, buildNumber); - } - } + return new BuildNumber(productCode, intComponents); } else { buildNumber = parseBuildNumber(version, code, name); diff --git a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java index ad148f5737eb..a026d3b27efd 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java @@ -40,6 +40,9 @@ public class BuildNumberTest { assertParsed(BuildNumber.fromString("IU-145.1.2"), 145, 1, false, "IU-145.1.2"); assertParsed(BuildNumber.fromString("IU-145.SNAPSHOT"), 145, BuildNumber.SNAPSHOT_VALUE, false, "IU-145.SNAPSHOT"); assertParsed(BuildNumber.fromString("IU-145.1.SNAPSHOT"), 145, 1, false, "IU-145.1.SNAPSHOT"); + + assertParsed(BuildNumber.fromString("IU-145.1.2.3.4"), 145, 1, false, "IU-145.1.2.3.4"); + assertParsed(BuildNumber.fromString("IU-145.1000.2000.3000.4000"), 145, 1000, false, "IU-145.1000.2000.3000.4000"); } @Test @@ -102,8 +105,11 @@ public class BuildNumberTest { assertTrue(BuildNumber.fromString("145.1").compareTo(BuildNumber.fromString("145.*")) < 0); assertTrue(BuildNumber.fromString("145.1.1").compareTo(BuildNumber.fromString("145.*")) < 0); + assertTrue(BuildNumber.fromString("145.1.1.1.1").compareTo(BuildNumber.fromString("145.*")) < 0); assertTrue(BuildNumber.fromString("145.1").compareTo(BuildNumber.fromString("146.*")) < 0); assertTrue(BuildNumber.fromString("145.1").compareTo(BuildNumber.fromString("144.*")) > 0); + assertTrue(BuildNumber.fromString("145.1.1.1").compareTo(BuildNumber.fromString("145.1.1.1.1")) < 0); + assertTrue(BuildNumber.fromString("145.1.1.2").compareTo(BuildNumber.fromString("145.1.1.1.1")) > 0); assertTrue(BuildNumber.fromString("145.SNAPSHOT").compareTo(BuildNumber.fromString("145.*")) == 0); assertTrue(BuildNumber.fromString("145.*").compareTo(BuildNumber.fromString("145.SNAPSHOT")) == 0); @@ -123,6 +129,7 @@ public class BuildNumberTest { assertTrue(BuildNumber.fromString("SNAPSHOT").isSnapshot()); assertTrue(BuildNumber.fromString("__BUILD_NUMBER__").isSnapshot()); assertTrue(BuildNumber.fromString("IU-90.SNAPSHOT").isSnapshot()); + assertTrue(BuildNumber.fromString("IU-145.1.2.3.4.SNAPSHOT").isSnapshot()); assertTrue(BuildNumber.fromString("IC-90.*").isSnapshot()); assertFalse(BuildNumber.fromString("90.9999999").isSnapshot()); @@ -172,10 +179,17 @@ public class BuildNumberTest { @Test public void fallbackVersion() throws Exception { - assertParsed(BuildNumber.fallback(), 29991, -1, true, "2999.1.SNAPSHOT"); - assertTrue(BuildNumber.fallback().isYearBased()); - assertTrue(BuildNumber.fallback().isSnapshot()); - + if (false /* we have moved to year-based format*/) { + assertParsed(BuildNumber.fallback(), 29991, -1, true, "2999.1.SNAPSHOT"); + assertTrue(BuildNumber.fallback().isYearBased()); + assertTrue(BuildNumber.fallback().isSnapshot()); + } + else { + assertParsed(BuildNumber.fallback(), 9999, BuildNumber.SNAPSHOT_VALUE, false, "9999.SNAPSHOT"); + assertFalse(BuildNumber.fallback().isYearBased()); + assertTrue(BuildNumber.fallback().isSnapshot()); + } + assertTrue(BuildNumber.fallback().compareTo(BuildNumber.fromString("7512")) > 0); assertTrue(BuildNumber.fallback().compareTo(BuildNumber.fromString("145")) > 0); assertTrue(BuildNumber.fallback().compareTo(BuildNumber.fromString("145.12")) > 0);