implemented restart after installation

This commit is contained in:
Sebastian Sdorra
2019-08-21 11:22:49 +02:00
parent 05d7e0bd1e
commit 25cb0d6a25
8 changed files with 143 additions and 77 deletions

View File

@@ -16,6 +16,7 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import java.util.List;
import java.util.Optional;
@@ -90,9 +91,9 @@ public class AvailablePluginResource {
@ResponseCode(code = 200, condition = "success"),
@ResponseCode(code = 500, condition = "internal server error")
})
public Response installPlugin(@PathParam("name") String name) {
public Response installPlugin(@PathParam("name") String name, @QueryParam("restart") boolean restartAfterInstallation) {
PluginPermissions.manage().check();
pluginManager.install(name);
pluginManager.install(name, restartAfterInstallation);
return Response.ok().build();
}
}

View File

@@ -40,6 +40,8 @@ import com.google.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.NotFoundException;
import sonia.scm.event.ScmEventBus;
import sonia.scm.lifecycle.RestartEvent;
//~--- JDK imports ------------------------------------------------------------
import javax.inject.Inject;
@@ -61,12 +63,14 @@ public class DefaultPluginManager implements PluginManager {
private static final Logger LOG = LoggerFactory.getLogger(DefaultPluginManager.class);
private final ScmEventBus eventBus;
private final PluginLoader loader;
private final PluginCenter center;
private final PluginInstaller installer;
@Inject
public DefaultPluginManager(PluginLoader loader, PluginCenter center, PluginInstaller installer) {
public DefaultPluginManager(ScmEventBus eventBus, PluginLoader loader, PluginCenter center, PluginInstaller installer) {
this.eventBus = eventBus;
this.loader = loader;
this.center = center;
this.installer = installer;
@@ -112,7 +116,7 @@ public class DefaultPluginManager implements PluginManager {
}
@Override
public void install(String name) {
public void install(String name, boolean restartAfterInstallation) {
PluginPermissions.manage().check();
List<AvailablePlugin> plugins = collectPluginsToInstall(name);
List<PendingPluginInstallation> pendingInstallations = new ArrayList<>();
@@ -125,6 +129,9 @@ public class DefaultPluginManager implements PluginManager {
throw ex;
}
}
if (restartAfterInstallation) {
eventBus.post(new RestartEvent(PluginManager.class, "plugin installation"));
}
}
private void cancelPending(List<PendingPluginInstallation> pendingInstallations) {