plugin updater: accept older plugin versions for broken plugins (IDEA-125646)

This commit is contained in:
Anna Kozlova
2014-05-28 20:57:08 +04:00
parent eeca5a8124
commit d27fd1ee45
3 changed files with 13 additions and 5 deletions
@@ -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();
@@ -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);
@@ -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);
}