From 1089eca2ace9184d47da84ef25e1411e93bfb72e Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 16 Dec 2014 17:18:27 +0100 Subject: [PATCH] problem with suggesting patch when eap channel and release channel builds are available --- .../updateSettings/impl/BuildInfo.java | 8 +++- .../updateSettings/impl/UpdateStrategy.java | 6 ++- .../ide/updates/UpdateStrategyTest.java | 12 ++++++ .../ide/updates/idea-patchAvailable.xml | 37 +++++++++++++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 platform/platform-tests/testSrc/com/intellij/ide/updates/idea-patchAvailable.xml diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/BuildInfo.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/BuildInfo.java index 9b8885aa5cef..4beaf82778d7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/BuildInfo.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/BuildInfo.java @@ -101,9 +101,13 @@ public class BuildInfo implements Comparable { @Nullable public PatchInfo findPatchForCurrentBuild() { - BuildNumber currentBuild = ApplicationInfo.getInstance().getBuild(); + return findPatchForBuild(ApplicationInfo.getInstance().getBuild()); + } + + @Nullable + public PatchInfo findPatchForBuild(BuildNumber currentBuild) { for (PatchInfo each : myPatches) { - if (each.isAvailable() && each.getFromBuild().asStringWithoutProductCode().equals(currentBuild.asStringWithoutProductCode())) + if (each.isAvailable() && each.getFromBuild().asStringWithoutProductCode().equals(currentBuild.asStringWithoutProductCode())) return each; } return null; diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.java index e29c2c6bf715..399168ab35e2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.java @@ -89,7 +89,11 @@ public class UpdateStrategy { for (UpdateChannel channel : channels) { if ((channel.getMajorVersion() == myMajorVersion && channel.getStatus().compareTo(myChannelStatus) >= 0) || (channel.getMajorVersion() > myMajorVersion && channel.getStatus() == ChannelStatus.EAP && myChannelStatus == ChannelStatus.EAP)) { - result.add(channel); + if (channel.getMajorVersion() == myMajorVersion && channel.getStatus().compareTo(myChannelStatus) == 0) { + result.add(0, channel); // prefer channel that has same status as our selected channel status + } else { + result.add(channel); + } } } return result; diff --git a/platform/platform-tests/testSrc/com/intellij/ide/updates/UpdateStrategyTest.java b/platform/platform-tests/testSrc/com/intellij/ide/updates/UpdateStrategyTest.java index c287b32ad172..ab7217ea85c9 100644 --- a/platform/platform-tests/testSrc/com/intellij/ide/updates/UpdateStrategyTest.java +++ b/platform/platform-tests/testSrc/com/intellij/ide/updates/UpdateStrategyTest.java @@ -116,4 +116,16 @@ public class UpdateStrategyTest extends TestCase { Assert.assertEquals("IDEA10EAP", newChannel.getId()); Assert.assertEquals("IntelliJ IDEA X EAP", newChannel.getName()); } + + public void testChannelWithCurrentStatusPreferred() { + final TestUpdateSettings settings = new TestUpdateSettings(ChannelStatus.EAP); + + BuildNumber currentBuild = BuildNumber.fromString("IU-139.658"); + UpdateStrategy strategy = new UpdateStrategy(14, currentBuild, UpdatesInfoXppParserTest.InfoReader.read("idea-patchAvailable.xml"), settings); + + final CheckForUpdateResult result = strategy.checkForUpdates(); + Assert.assertEquals(UpdateStrategy.State.LOADED, result.getState()); + Assert.assertEquals(result.getUpdatedChannel().getStatus(), ChannelStatus.EAP); + Assert.assertNotNull(result.getNewBuildInSelectedChannel().findPatchForBuild(currentBuild)); + } } diff --git a/platform/platform-tests/testSrc/com/intellij/ide/updates/idea-patchAvailable.xml b/platform/platform-tests/testSrc/com/intellij/ide/updates/idea-patchAvailable.xml new file mode 100644 index 000000000000..ee7aec67ac17 --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/ide/updates/idea-patchAvailable.xml @@ -0,0 +1,37 @@ + + + IU + IC + + + + IntelliJ IDEA 14.0.2 build 139.659 is available. +