From 95ae574fac3621ca05774a0292b267ca77650944 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 3 Oct 2013 21:53:52 +0400 Subject: [PATCH] IDEA-113944: Make Jira version number matching more permissive --- .../intellij/tasks/jira/JiraRepository.java | 2 ++ .../com/intellij/tasks/jira/JiraVersion.java | 25 ++++++++++++------- .../integration/JiraIntegrationTest.java | 8 ++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepository.java index 5c5f181de97a..4270254efd4a 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraRepository.java @@ -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); } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraVersion.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraVersion.java index 41e69820c183..83519590cd33 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraVersion.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/jira/JiraVersion.java @@ -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 { + // 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()); } } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/JiraIntegrationTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/JiraIntegrationTest.java index 75a792d7e493..3780bd89c15a 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/JiraIntegrationTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/integration/JiraIntegrationTest.java @@ -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();