From: Duarte Meneses Date: Fri, 20 Oct 2017 08:32:27 +0000 (+0200) Subject: SONAR-9333 Web service api/plugins/uninstall fails when plugin is already being unins... X-Git-Tag: 6.7-RC1~56 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=061b025defefdba99fcbd45518742b8685fceb4a;p=sonarqube.git SONAR-9333 Web service api/plugins/uninstall fails when plugin is already being uninstalling --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java index f8760d3358b..7fb654172f9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java @@ -316,10 +316,16 @@ public class ServerPluginRepository implements PluginRepository, Startable { for (String uninstallKey : uninstallKeys) { PluginInfo info = getPluginInfo(uninstallKey); + try { + if (!getPluginFile(info).exists()) { + LOG.info("Plugin already uninstalled: {} [{}]", info.getName(), info.getKey()); + continue; + } + LOG.info("Uninstalling plugin {} [{}]", info.getName(), info.getKey()); - File masterFile = pluginFile(info); + File masterFile = getPluginFile(info); moveFileToDirectory(masterFile, uninstallDir, true); } catch (IOException e) { throw new IllegalStateException(format("Fail to uninstall plugin %s [%s]", info.getName(), info.getKey()), e); @@ -344,7 +350,7 @@ public class ServerPluginRepository implements PluginRepository, Startable { for (PluginInfo otherPlugin : getPluginInfos()) { if (!otherPlugin.getKey().equals(pluginKey)) { for (PluginInfo.RequiredPlugin requirement : otherPlugin.getRequiredPlugins()) { - if (requirement.getKey().equals(pluginKey) && pluginFile(otherPlugin).exists()) { + if (requirement.getKey().equals(pluginKey)) { appendTo.add(otherPlugin.getKey()); appendDependentPluginKeys(otherPlugin.getKey(), appendTo); } @@ -353,7 +359,7 @@ public class ServerPluginRepository implements PluginRepository, Startable { } } - private File pluginFile(PluginInfo info) { + private File getPluginFile(PluginInfo info) { // we don't reuse info.getFile() just to be sure that file is located in from extensions/plugins return new File(fs.getInstalledPluginsDir(), info.getNonNullJarFile().getName()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java index 1040c6813a9..df94b6e5d5d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java @@ -269,6 +269,23 @@ public class ServerPluginRepositoryTest { assertThat(uninstallDir.list()).containsOnly(base.getName(), extension.getName()); } + @Test + public void dont_uninstall_non_existing_files() throws IOException { + File base = copyTestPluginTo("test-base-plugin", fs.getInstalledPluginsDir()); + File extension = copyTestPluginTo("test-require-plugin", fs.getInstalledPluginsDir()); + File uninstallDir = temp.newFolder("uninstallDir"); + + underTest.start(); + assertThat(underTest.getPluginInfos()).hasSize(2); + underTest.uninstall("testbase", uninstallDir); + assertThat(underTest.getPluginInfos()).hasSize(2); + + underTest.uninstall("testbase", uninstallDir); + assertThat(base).doesNotExist(); + assertThat(extension).doesNotExist(); + assertThat(uninstallDir.list()).containsOnly(base.getName(), extension.getName()); + } + @Test public void install_plugin_and_its_extension_plugins_at_startup() throws Exception { copyTestPluginTo("test-base-plugin", fs.getInstalledPluginsDir());