From d27fd1ee45efbc09b1094eafe01bf470ac038265 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 28 May 2014 20:50:18 +0400 Subject: [PATCH] plugin updater: accept older plugin versions for broken plugins (IDEA-125646) --- .../ide/plugins/InstalledPluginsTableModel.java | 2 +- .../updateSettings/impl/PluginDownloader.java | 12 ++++++++++-- .../openapi/updateSettings/impl/UpdateChecker.java | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java index 741824e5c681..44d9606bd418 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java @@ -269,7 +269,7 @@ public class InstalledPluginsTableModel extends PluginTableModel { } private static void updateExistingPluginInfo(IdeaPluginDescriptor descr, IdeaPluginDescriptor existing) { - int state = StringUtil.compareVersionNumbers(descr.getVersion(), existing.getVersion()); + int state = PluginDownloader.compareVersionsSkipBroken(existing, descr.getVersion()); final PluginId pluginId = existing.getPluginId(); final String idString = pluginId.getIdString(); final JDOMExternalizableStringList installedPlugins = PluginManagerUISettings.getInstance().getInstalledPlugins(); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java index 44d804777aea..a6641bb0cea4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java @@ -103,7 +103,7 @@ public class PluginDownloader { //store old plugins file descriptor = PluginManager.getPlugin(PluginId.getId(myPluginId)); LOG.assertTrue(descriptor != null); - if (myPluginVersion != null && StringUtil.compareVersionNumbers(descriptor.getVersion(), myPluginVersion) >= 0) { + if (myPluginVersion != null && compareVersionsSkipBroken(descriptor, myPluginVersion) <= 0) { LOG.info("Plugin " + myPluginId + ": current version (max) " + myPluginVersion); return false; } @@ -140,7 +140,7 @@ public class PluginDownloader { } myPluginVersion = actualDescriptor.getVersion(); - if (descriptor != null && StringUtil.compareVersionNumbers(descriptor.getVersion(), actualDescriptor.getVersion()) >= 0) { + if (descriptor != null && compareVersionsSkipBroken(descriptor, myPluginVersion) <= 0) { LOG.info("Plugin " + myPluginId + ": current version (max) " + myPluginVersion); return false; //was not updated } @@ -155,6 +155,14 @@ public class PluginDownloader { return true; } + public static int compareVersionsSkipBroken(IdeaPluginDescriptor descriptor, String newPluginVersion) { + int state = StringUtil.compareVersionNumbers(newPluginVersion, descriptor.getVersion()); + if (PluginManagerCore.isBrokenPlugin(descriptor) && state < 0) { + state = 1; + } + return state; + } + @Nullable public static IdeaPluginDescriptorImpl loadDescriptionFromJar(final File file) throws IOException { IdeaPluginDescriptorImpl descriptor = PluginManagerCore.loadDescriptorFromJar(file); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java index b0a0694a412d..8205d9e9f37e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java @@ -252,7 +252,7 @@ public final class UpdateChecker { prepareToInstall(downloaded, loadedPlugin, indicator, buildNumber); } else { final String newVersion = loadedPlugin.getVersion(); - if (StringUtil.compareVersionNumbers(newVersion, installedPlugin.getVersion()) > 0) { + if (PluginDownloader.compareVersionsSkipBroken(installedPlugin, newVersion) > 0) { updateSettings.myOutdatedPlugins.add(idString); if (isReadyToUpdate(idString, newVersion) && !disabledPlugins.contains(idString)) { prepareToInstall(downloaded, loadedPlugin, indicator, buildNumber); @@ -422,7 +422,7 @@ public final class UpdateChecker { final PluginDownloader downloader = new PluginDownloader(pluginId, finalPluginUrl, pluginVersion); final IdeaPluginDescriptor loadedPlugin = PluginManager.getPlugin(PluginId.getId(pluginId)); if (loadedPlugin == null || pluginVersion == null || - StringUtil.compareVersionNumbers(pluginVersion, loadedPlugin.getVersion()) > 0) { + PluginDownloader.compareVersionsSkipBroken(loadedPlugin, pluginVersion) > 0) { if (isReadyToUpdate(pluginId, pluginVersion) && downloader.prepareToInstall(progressIndicator, buildNumber)) { downloaded.put(PluginId.getId(pluginId), downloader); }