IDEA-113944: Make Jira version number matching more permissive

This commit is contained in:
Mikhail Golubev
2013-10-03 21:53:52 +04:00
parent f719906102
commit 95ae574fac
3 changed files with 26 additions and 9 deletions
@@ -142,6 +142,8 @@ public class JiraRepository extends BaseRepositoryImpl {
throw e;
}
JsonObject object = JiraUtil.GSON.fromJson(responseBody, JsonObject.class);
// when JIRA 4.x support will be dropped 'versionNumber' array in response
// may be used instead version string parsing
return JiraRestApi.fromJiraVersion(object.get("version").getAsString(), this);
}
@@ -1,6 +1,7 @@
package com.intellij.tasks.jira;
import com.intellij.util.text.VersionComparatorUtil;
import org.jetbrains.annotations.NotNull;
import java.util.regex.Matcher;
@@ -9,10 +10,11 @@ import java.util.regex.Pattern;
/**
* @author Mikhail Golubev
*/
public class JiraVersion {
private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?");
public class JiraVersion implements Comparable<JiraVersion> {
// Fix for IDEA-113944
private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)(?:[^\\d]+(\\d+))?(?:[^\\d]+(\\d+))?.*");
private final int myMajorNumber, myMinorNumber, myBuildNumber;
private final int myMajorNumber, myMinorNumber, myMicroNumber;
public JiraVersion(int majorNumber) {
this(majorNumber, 0, 0);
@@ -22,10 +24,10 @@ public class JiraVersion {
this(majorNumber, minorNumber, 0);
}
public JiraVersion(int majorNumber, int minorNumber, int buildNumber) {
public JiraVersion(int majorNumber, int minorNumber, int microNumber) {
myMajorNumber = majorNumber;
myMinorNumber = minorNumber;
myBuildNumber = buildNumber;
myMicroNumber = microNumber;
}
public JiraVersion(@NotNull String version) {
@@ -35,7 +37,7 @@ public class JiraVersion {
}
myMajorNumber = m.group(1) == null ? 0 : Integer.parseInt(m.group(1));
myMinorNumber = m.group(2) == null ? 0 : Integer.parseInt(m.group(2));
myBuildNumber = m.group(3) == null ? 0 : Integer.parseInt(m.group(3));
myMicroNumber = m.group(3) == null ? 0 : Integer.parseInt(m.group(3));
}
public int getMajorNumber() {
@@ -46,12 +48,17 @@ public class JiraVersion {
return myMinorNumber;
}
public int getBuildNumber() {
return myBuildNumber;
public int getMicroNumber() {
return myMicroNumber;
}
@Override
public String toString() {
return String.format("%d.%d.%d", myMajorNumber, myMinorNumber, myBuildNumber);
return String.format("%d.%d.%d", myMajorNumber, myMinorNumber, myMicroNumber);
}
@Override
public int compareTo(@NotNull JiraVersion o) {
return VersionComparatorUtil.compare(toString(), o.toString());
}
}
@@ -20,6 +20,7 @@ import com.intellij.tasks.TaskManagerTestCase;
import com.intellij.tasks.TaskState;
import com.intellij.tasks.jira.JiraRepository;
import com.intellij.tasks.jira.JiraRepositoryType;
import com.intellij.tasks.jira.JiraVersion;
import org.jetbrains.annotations.NonNls;
/**
@@ -115,6 +116,13 @@ public class JiraIntegrationTest extends TaskManagerTestCase {
}
}
public void testParseVersionNumbers() throws Exception {
assertEquals(new JiraVersion("6.1-OD-09-WN").toString(), "6.1.9");
assertEquals(new JiraVersion("5.0.6").toString(), "5.0.6");
assertEquals(new JiraVersion("4.4.5").toString(), "4.4.5");
}
@Override
public void setUp() throws Exception {
super.setUp();