From cc5e4a35eeb044e87c56b3111ee99c5c60e47c0f Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 4 Apr 2016 18:47:50 +0200 Subject: [PATCH] Platform: build numbers: .* is treated identically as .SNAPSHOT, '2016' is parsed as '2016.0' --- .../ide/plugins/PluginManagerTest.java | 4 ++ .../intellij/openapi/util/BuildNumber.java | 19 ++++--- .../openapi/util/BuildNumberTest.java | 49 +++++++++++-------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginManagerTest.java b/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginManagerTest.java index 41bad51d874d..42d8056c54ac 100644 --- a/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginManagerTest.java +++ b/platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginManagerTest.java @@ -88,6 +88,10 @@ public class PluginManagerTest { assertCompatible("2016.2.1", "2016.2", "2016.2.*"); assertCompatible("2016.2.SNAPSHOT", null, "2016.2.*"); + + assertCompatible("2016.2", "2016", null); + assertCompatible("2015", null, "2016"); + assertIncompatible("2016.1", null, "2016"); } @Test diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java index b02ce9784afd..cde24cfca881 100644 --- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java +++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java @@ -38,8 +38,7 @@ public class BuildNumber implements Comparable { private static final String FALLBACK_VERSION = "2999.1.SNAPSHOT"; public static final int SNAPSHOT_VALUE = Integer.MAX_VALUE; - public static final int STAR_VALUE = -Integer.MAX_VALUE; - + private static class Holder { private static final BuildNumber CURRENT_VERSION = fromFile(); } @@ -82,11 +81,11 @@ public class BuildNumber implements Comparable { } for (int each : myComponents) { - if (each != SNAPSHOT_VALUE && each != STAR_VALUE) { + if (each != SNAPSHOT_VALUE) { builder.append(each); } else if (withSnapshotMarker) { - builder.append(each == SNAPSHOT_VALUE ? SNAPSHOT : STAR); + builder.append(SNAPSHOT); } builder.append('.'); } @@ -168,6 +167,10 @@ public class BuildNumber implements Comparable { // it's probably a baseline, not a build number return new BuildNumber(productCode, Format.BRANCH_BASED, buildNumber, 0); } + + if (buildNumber >= 2016 && buildNumber <= 2999) { + return new BuildNumber(productCode, Format.YEAR_BASED, buildNumber, 0); + } baselineVersion = getBaseLineForHistoricBuilds(buildNumber); return new BuildNumber(productCode, Format.HISTORIC, baselineVersion, buildNumber); @@ -179,7 +182,7 @@ public class BuildNumber implements Comparable { return SNAPSHOT_VALUE; } if (STAR.equals(code)) { - return STAR_VALUE; + return SNAPSHOT_VALUE; } try { @@ -219,9 +222,9 @@ public class BuildNumber implements Comparable { int[] c2 = o.myComponents; for (int i = 0; i < Math.min(c1.length, c2.length); i++) { - if (c1[i] == c2[i] && (c1[i] == SNAPSHOT_VALUE || c1[i] == STAR_VALUE)) return 0; - if (c1[i] == STAR_VALUE) return 1; - if (c2[i] == STAR_VALUE) return -1; + if (c1[i] == c2[i] && c1[i] == SNAPSHOT_VALUE) return 0; + if (c1[i] == SNAPSHOT_VALUE) return 1; + if (c2[i] == SNAPSHOT_VALUE) return -1; int result = c1[i] - c2[i]; if (result != 0) return result; diff --git a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java index 2910ba215314..02e35329723c 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java @@ -28,35 +28,42 @@ public class BuildNumberTest { @Test public void branchBasedBuild() throws Exception { - assertParsed(BuildNumber.fromString("145"), 145, 0, "145.0"); - assertParsed(BuildNumber.fromString("145.1"), 145, 1, "145.1"); - assertParsed(BuildNumber.fromString("145.1.2"), 145, 1, "145.1.2"); - assertParsed(BuildNumber.fromString("IU-145.1.2"), 145, 1, "IU-145.1.2"); - assertParsed(BuildNumber.fromString("IU-145.SNAPSHOT"), 145, BuildNumber.SNAPSHOT_VALUE, "IU-145.SNAPSHOT"); - assertParsed(BuildNumber.fromString("IU-145.1.SNAPSHOT"), 145, 1, "IU-145.1.SNAPSHOT"); + assertParsed(BuildNumber.fromString("145"), 145, 0, BuildNumber.Format.BRANCH_BASED, "145.0"); + assertParsed(BuildNumber.fromString("145.1"), 145, 1, BuildNumber.Format.BRANCH_BASED, "145.1"); + assertParsed(BuildNumber.fromString("145.1.2"), 145, 1, BuildNumber.Format.BRANCH_BASED, "145.1.2"); + assertParsed(BuildNumber.fromString("IU-145.1.2"), 145, 1, BuildNumber.Format.BRANCH_BASED, "IU-145.1.2"); + assertParsed(BuildNumber.fromString("IU-145.SNAPSHOT"), 145, BuildNumber.SNAPSHOT_VALUE, BuildNumber.Format.BRANCH_BASED, "IU-145.SNAPSHOT"); + assertParsed(BuildNumber.fromString("IU-145.1.SNAPSHOT"), 145, 1, BuildNumber.Format.BRANCH_BASED, "IU-145.1.SNAPSHOT"); } @Test public void yearBasedBuild() throws Exception { - assertParsed(BuildNumber.fromString("2016.1.2"), 20161, -1, "2016.1.2"); - assertParsed(BuildNumber.fromString("IU-2016.1.2"), 20161, -1, "IU-2016.1.2"); - assertParsed(BuildNumber.fromString("2016.1.2.3"), 20161, -1, "2016.1.2.3"); - assertParsed(BuildNumber.fromString("IU-2016.1.2.3"), 20161, -1, "IU-2016.1.2.3"); - assertParsed(BuildNumber.fromString("2016.1.2.3.4"), 20161, -1, "2016.1.2.3.4"); - assertParsed(BuildNumber.fromString("IU-2016.1.2.3.4"), 20161, -1, "IU-2016.1.2.3.4"); + assertParsed(BuildNumber.fromString("2016"), 20160, -1, BuildNumber.Format.YEAR_BASED, "2016.0"); + assertParsed(BuildNumber.fromString("2016.1"), 20161, -1, BuildNumber.Format.YEAR_BASED, "2016.1"); + assertParsed(BuildNumber.fromString("2016.1.2"), 20161, -1, BuildNumber.Format.YEAR_BASED, "2016.1.2"); + assertParsed(BuildNumber.fromString("IU-2016.1.2"), 20161, -1, BuildNumber.Format.YEAR_BASED, "IU-2016.1.2"); + assertParsed(BuildNumber.fromString("2016.1.2.3"), 20161, -1, BuildNumber.Format.YEAR_BASED, "2016.1.2.3"); + assertParsed(BuildNumber.fromString("IU-2016.1.2.3"), 20161, -1, BuildNumber.Format.YEAR_BASED, "IU-2016.1.2.3"); + assertParsed(BuildNumber.fromString("2016.1.2.3.4"), 20161, -1, BuildNumber.Format.YEAR_BASED, "2016.1.2.3.4"); + assertParsed(BuildNumber.fromString("IU-2016.1.2.3.4"), 20161, -1, BuildNumber.Format.YEAR_BASED, "IU-2016.1.2.3.4"); - assertParsed(BuildNumber.fromString("IU-2016.1.SNAPSHOT"), 20161, -1, "IU-2016.1.SNAPSHOT"); - assertParsed(BuildNumber.fromString("IU-2016.1.SNAPSHOT.1"), 20161, -1, "IU-2016.1.SNAPSHOT.1"); + assertParsed(BuildNumber.fromString("IU-2016.1.SNAPSHOT"), 20161, -1, BuildNumber.Format.YEAR_BASED, "IU-2016.1.SNAPSHOT"); + assertParsed(BuildNumber.fromString("IU-2016.1.SNAPSHOT.1"), 20161, -1, BuildNumber.Format.YEAR_BASED, "IU-2016.1.SNAPSHOT.1"); } - private static void assertParsed(BuildNumber n, int expectedBaseline, int expectedBuildNumber, String asString) { + private static void assertParsed(BuildNumber n, int expectedBaseline, int expectedBuildNumber, BuildNumber.Format based, String asString) { assertEquals(expectedBaseline, n.getBaselineVersion()); assertEquals(expectedBuildNumber, n.getBuildNumber()); assertEquals(asString, n.asString()); + assertEquals(based, n.getFormat()); } @Test public void comparingVersion() throws Exception { + assertTrue(BuildNumber.fromString("2016").compareTo(BuildNumber.fromString("2016.1")) < 0); + assertTrue(BuildNumber.fromString("2015.1").compareTo(BuildNumber.fromString("2016")) < 0); + assertTrue(BuildNumber.fromString("2016.0").compareTo(BuildNumber.fromString("2016.0")) == 0); + assertTrue(BuildNumber.fromString("2016.1").compareTo(BuildNumber.fromString("2016.1")) == 0); assertTrue(BuildNumber.fromString("2016.1.1").compareTo(BuildNumber.fromString("2016.1.1")) == 0); assertTrue(BuildNumber.fromString("2016.1.1.1").compareTo(BuildNumber.fromString("2016.1.1.1")) == 0); @@ -84,11 +91,11 @@ public class BuildNumberTest { assertTrue(BuildNumber.fromString("145.1").compareTo(BuildNumber.fromString("146.*")) < 0); assertTrue(BuildNumber.fromString("145.1").compareTo(BuildNumber.fromString("144.*")) > 0); - assertTrue(BuildNumber.fromString("145.SNAPSHOT").compareTo(BuildNumber.fromString("145.*")) < 0); - assertTrue(BuildNumber.fromString("145.*").compareTo(BuildNumber.fromString("145.SNAPSHOT")) > 0); + assertTrue(BuildNumber.fromString("145.SNAPSHOT").compareTo(BuildNumber.fromString("145.*")) == 0); + assertTrue(BuildNumber.fromString("145.*").compareTo(BuildNumber.fromString("145.SNAPSHOT")) == 0); - assertTrue(BuildNumber.fromString("2016.1.SNAPSHOT").compareTo(BuildNumber.fromString("2016.1.*")) < 0); - assertTrue(BuildNumber.fromString("2016.1.*").compareTo(BuildNumber.fromString("2016.1.SNAPSHOT")) > 0); + assertTrue(BuildNumber.fromString("2016.1.SNAPSHOT").compareTo(BuildNumber.fromString("2016.1.*")) == 0); + assertTrue(BuildNumber.fromString("2016.1.*").compareTo(BuildNumber.fromString("2016.1.SNAPSHOT")) == 0); assertTrue(BuildNumber.fromString("2016.1.SNAPSHOT").compareTo(BuildNumber.fromString("2016.*")) < 0); assertTrue(BuildNumber.fromString("2016.*").compareTo(BuildNumber.fromString("2016.1.SNAPSHOT")) > 0); @@ -103,7 +110,7 @@ public class BuildNumberTest { assertTrue(BuildNumber.fromString("__BUILD_NUMBER__").isSnapshot()); assertTrue(BuildNumber.fromString("IU-90.SNAPSHOT").isSnapshot()); - assertFalse(BuildNumber.fromString("IC-90.*").isSnapshot()); + assertTrue(BuildNumber.fromString("IC-90.*").isSnapshot()); assertFalse(BuildNumber.fromString("90.9999999").isSnapshot()); assertFalse(BuildNumber.fromString("2016.1").isSnapshot()); @@ -151,7 +158,7 @@ public class BuildNumberTest { @Test public void fallbackVersion() throws Exception { - assertParsed(BuildNumber.fallback(), 29991, -1, "2999.1.SNAPSHOT"); + assertParsed(BuildNumber.fallback(), 29991, -1, BuildNumber.Format.YEAR_BASED, "2999.1.SNAPSHOT"); assertEquals(BuildNumber.Format.YEAR_BASED, BuildNumber.fallback().getFormat()); assertTrue(BuildNumber.fallback().isSnapshot());