mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 16:35:45 +01:00
Append uninstall links
This commit is contained in:
@@ -74,10 +74,9 @@ public abstract class PluginDtoMapper {
|
||||
) {
|
||||
links.single(link("update", resourceLinks.availablePlugin().install(information.getName())));
|
||||
}
|
||||
if (!plugin.isCore()
|
||||
if (plugin.isUninstallable()
|
||||
&& (!availablePlugin.isPresent() || !availablePlugin.get().isPending())
|
||||
&& PluginPermissions.manage().isPermitted()
|
||||
// TODO check if plugin is no dependency of another plugin
|
||||
) {
|
||||
links.single(link("uninstall", resourceLinks.installedPlugin().uninstall(information.getName())));
|
||||
}
|
||||
|
||||
@@ -82,15 +82,16 @@ public class DefaultPluginManager implements PluginManager {
|
||||
this.center = center;
|
||||
this.installer = installer;
|
||||
|
||||
this.computeRequiredPlugins();
|
||||
this.computeInstallationDependencies();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
synchronized void computeRequiredPlugins() {
|
||||
synchronized void computeInstallationDependencies() {
|
||||
loader.getInstalledPlugins()
|
||||
.stream()
|
||||
.map(InstalledPlugin::getDescriptor)
|
||||
.forEach(dependencyTracker::addInstalled);
|
||||
updateMayUninstallFlag();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -166,6 +167,7 @@ public class DefaultPluginManager implements PluginManager {
|
||||
for (AvailablePlugin plugin : plugins) {
|
||||
try {
|
||||
PendingPluginInstallation pending = installer.install(plugin);
|
||||
dependencyTracker.addInstalled(plugin.getDescriptor());
|
||||
pendingInstallations.add(pending);
|
||||
} catch (PluginInstallException ex) {
|
||||
cancelPending(pendingInstallations);
|
||||
@@ -178,6 +180,7 @@ public class DefaultPluginManager implements PluginManager {
|
||||
restart("plugin installation");
|
||||
} else {
|
||||
pendingQueue.addAll(pendingInstallations);
|
||||
updateMayUninstallFlag();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -197,6 +200,23 @@ public class DefaultPluginManager implements PluginManager {
|
||||
} catch (IOException e) {
|
||||
throw new PluginException("could not mark plugin " + name + " in path " + installed.getDirectory() + " for uninstall", e);
|
||||
}
|
||||
|
||||
if (restartAfterInstallation) {
|
||||
restart("plugin installation");
|
||||
} else {
|
||||
updateMayUninstallFlag();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateMayUninstallFlag() {
|
||||
loader.getInstalledPlugins()
|
||||
.forEach(p -> p.setUninstallable(isUninstallable(p)));
|
||||
}
|
||||
|
||||
private boolean isUninstallable(InstalledPlugin p) {
|
||||
return !p.isCore()
|
||||
&& !p.isMarkedForUninstall()
|
||||
&& dependencyTracker.mayUninstall(p.getDescriptor().getInformation().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user