Platform: build numbers: support arbitrary number of components in branch-based build number as well

This commit is contained in:
Anton Makeev
2016-04-07 15:39:17 +02:00
parent 4c428b5dc4
commit 6349a5ccd1
3 changed files with 31 additions and 42 deletions
+1 -1
View File
@@ -1 +1 @@
2016.2.SNAPSHOT
146.SNAPSHOT
@@ -34,7 +34,7 @@ public class BuildNumber implements Comparable<BuildNumber> {
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<BuildNumber> {
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<String> 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<String> 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 <BuildNumber>.<BuildAttemptNumber> 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);
@@ -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);