diff --git a/scm-core/src/main/java/sonia/scm/plugin/AvailablePlugin.java b/scm-core/src/main/java/sonia/scm/plugin/AvailablePlugin.java index db8d96ca15..5a85055a0c 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/AvailablePlugin.java +++ b/scm-core/src/main/java/sonia/scm/plugin/AvailablePlugin.java @@ -5,7 +5,7 @@ import com.google.common.base.Preconditions; public class AvailablePlugin implements Plugin { private final AvailablePluginDescriptor pluginDescriptor; - private final boolean pending; + private boolean pending; public AvailablePlugin(AvailablePluginDescriptor pluginDescriptor) { this(pluginDescriptor, false); @@ -25,6 +25,10 @@ public class AvailablePlugin implements Plugin { return pending; } + public void cancelInstallation() { + this.pending = false; + } + public AvailablePlugin install() { Preconditions.checkState(!pending, "installation is already pending"); return new AvailablePlugin(pluginDescriptor, true); diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginManager.java b/scm-core/src/main/java/sonia/scm/plugin/PluginManager.java index 71d269599d..4c8fcd7306 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginManager.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginManager.java @@ -109,5 +109,5 @@ public interface PluginManager { /** * Update all installed plugins. */ - void updateAll(boolean restartAfterInstallation); + void updateAll(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java index e258aadd5d..8b0cb46d9e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java @@ -67,7 +67,7 @@ public class InstalledPluginResource { }) @TypeHint(CollectionDto.class) public Response updateAll(@QueryParam("restart") boolean restartAfterInstallation) { - pluginManager.updateAll(restartAfterInstallation); + pluginManager.updateAll(); return Response.ok().build(); } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index 53180e34eb..247e548972 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -288,17 +288,19 @@ public class DefaultPluginManager implements PluginManager { } @Override - public void updateAll(boolean restartAfterInstallation) { + public void updateAll() { PluginPermissions.manage().check(); + boolean pluginUpdated = false; for (InstalledPlugin installedPlugin : getInstalled()) { String pluginName = installedPlugin.getDescriptor().getInformation().getName(); if (isUpdatable(pluginName)) { install(pluginName, false); + pluginUpdated = true; } - if (restartAfterInstallation) { - restart("update all plugin"); - } + } + if (pluginUpdated) { + restart("update all plugins"); } } } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java b/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java index fa59930a78..2f5d388db2 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java @@ -28,6 +28,7 @@ class PendingPluginInstallation { LOG.info("cancel installation of plugin {}", name); try { Files.delete(file); + plugin.cancelInstallation(); } catch (IOException ex) { throw new PluginFailedToCancelInstallationException("failed to cancel installation of plugin " + name, ex); } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java index 80137be203..5db97af241 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java @@ -487,7 +487,7 @@ class DefaultPluginManagerTest { when(center.getAvailable()).thenReturn(ImmutableSet.of(newMailPlugin, newReviewPlugin)); - manager.updateAll(false); + manager.updateAll(); verify(installer).install(newMailPlugin); verify(installer).install(newReviewPlugin); @@ -503,7 +503,7 @@ class DefaultPluginManagerTest { when(center.getAvailable()).thenReturn(ImmutableSet.of(oldScriptPlugin)); - manager.updateAll(false); + manager.updateAll(); verify(installer, never()).install(oldScriptPlugin); } @@ -569,7 +569,7 @@ class DefaultPluginManagerTest { @Test void shouldThrowAuthorizationExceptionsForUpdateAll() { - assertThrows(AuthorizationException.class, () -> manager.updateAll(false)); + assertThrows(AuthorizationException.class, () -> manager.updateAll()); } } }