summaryrefslogtreecommitdiff
path: root/platform/util/src/com/intellij/openapi/util/BuildNumber.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/util/src/com/intellij/openapi/util/BuildNumber.java')
-rw-r--r--platform/util/src/com/intellij/openapi/util/BuildNumber.java35
1 files changed, 29 insertions, 6 deletions
diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java
index a888db7becf9..22cf77504a63 100644
--- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java
+++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java
@@ -38,22 +38,28 @@ public class BuildNumber implements Comparable<BuildNumber> {
private final String myProductCode;
private final int myBaselineVersion;
private final int myBuildNumber;
+ private final String myAttemptInfo;
public BuildNumber(String productCode, int baselineVersion, int buildNumber) {
+ this(productCode, baselineVersion, buildNumber, null);
+ }
+
+ public BuildNumber(String productCode, int baselineVersion, int buildNumber, String attemptInfo) {
myProductCode = productCode;
myBaselineVersion = baselineVersion;
myBuildNumber = buildNumber;
+ myAttemptInfo = StringUtil.isEmpty(attemptInfo) ? null : attemptInfo;
}
public String asString() {
- return asString(true);
+ return asString(true, false);
}
public String asStringWithoutProductCode() {
- return asString(false);
+ return asString(false, false);
}
- private String asString(boolean includeProductCode) {
+ private String asString(boolean includeProductCode, boolean withBuildAttempt) {
StringBuilder builder = new StringBuilder();
if (includeProductCode && !StringUtil.isEmpty(myProductCode)) {
@@ -69,6 +75,10 @@ public class BuildNumber implements Comparable<BuildNumber> {
builder.append(SNAPSHOT);
}
+ if (withBuildAttempt && myAttemptInfo != null) {
+ builder.append('.').append(myAttemptInfo);
+ }
+
return builder.toString();
}
@@ -98,9 +108,11 @@ public class BuildNumber implements Comparable<BuildNumber> {
int baselineVersionSeparator = code.indexOf('.');
int baselineVersion;
int buildNumber;
+ String attemptInfo = null;
+
if (baselineVersionSeparator > 0) {
try {
- final String baselineVersionString = code.substring(0, baselineVersionSeparator);
+ String baselineVersionString = code.substring(0, baselineVersionSeparator);
if (baselineVersionString.trim().isEmpty()) return null;
baselineVersion = Integer.parseInt(baselineVersionString);
code = code.substring(baselineVersionSeparator + 1);
@@ -109,6 +121,11 @@ public class BuildNumber implements Comparable<BuildNumber> {
throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name);
}
+ int minorBuildSeparator = code.indexOf('.'); // allow <BuildNumber>.<BuildAttemptNumber> skipping BuildAttemptNumber
+ if (minorBuildSeparator > 0) {
+ attemptInfo = code.substring(minorBuildSeparator + 1);
+ code = code.substring(0, minorBuildSeparator);
+ }
buildNumber = parseBuildNumber(version, code, name);
}
else {
@@ -116,13 +133,13 @@ public class BuildNumber implements Comparable<BuildNumber> {
if (buildNumber <= 2000) {
// it's probably a baseline, not a build number
- return new BuildNumber(productCode, buildNumber, 0);
+ return new BuildNumber(productCode, buildNumber, 0, null);
}
baselineVersion = getBaseLineForHistoricBuilds(buildNumber);
}
- return new BuildNumber(productCode, baselineVersion, buildNumber);
+ return new BuildNumber(productCode, baselineVersion, buildNumber, attemptInfo);
}
private static int parseBuildNumber(String version, String code, String name) {
@@ -188,6 +205,7 @@ public class BuildNumber implements Comparable<BuildNumber> {
if (myBaselineVersion != that.myBaselineVersion) return false;
if (myBuildNumber != that.myBuildNumber) return false;
if (!myProductCode.equals(that.myProductCode)) return false;
+ if (!Comparing.equal(myAttemptInfo, that.myAttemptInfo)) return false;
return true;
}
@@ -197,6 +215,7 @@ public class BuildNumber implements Comparable<BuildNumber> {
int result = myProductCode.hashCode();
result = 31 * result + myBaselineVersion;
result = 31 * result + myBuildNumber;
+ if (myAttemptInfo != null) result = 31 * result + myAttemptInfo.hashCode();
return result;
}
@@ -256,4 +275,8 @@ public class BuildNumber implements Comparable<BuildNumber> {
public boolean isSnapshot() {
return myBuildNumber == Integer.MAX_VALUE;
}
+
+ public String asStringWithAllDetails() {
+ return asString(true, true);
+ }
}