Platform: build numbers: .* is treated identically as .SNAPSHOT, '2016' is parsed as '2016.0'

This commit is contained in:
Anton Makeev
2016-04-04 18:47:50 +02:00
parent ae5b162423
commit cc5e4a35ee
3 changed files with 43 additions and 29 deletions
@@ -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
@@ -38,8 +38,7 @@ public class BuildNumber implements Comparable<BuildNumber> {
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<BuildNumber> {
}
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<BuildNumber> {
// 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<BuildNumber> {
return SNAPSHOT_VALUE;
}
if (STAR.equals(code)) {
return STAR_VALUE;
return SNAPSHOT_VALUE;
}
try {
@@ -219,9 +222,9 @@ public class BuildNumber implements Comparable<BuildNumber> {
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;
@@ -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());