adds verification of dependency versions on plugin installation

This commit is contained in:
Sebastian Sdorra
2020-08-05 15:28:39 +02:00
parent c984844f25
commit c946c130eb
13 changed files with 673 additions and 56 deletions

View File

@@ -42,6 +42,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -68,6 +69,8 @@ public class DefaultPluginManager implements PluginManager {
private final Collection<PendingPluginUninstallation> pendingUninstallQueue = new ArrayList<>();
private final PluginDependencyTracker dependencyTracker = new PluginDependencyTracker();
private Function<List<AvailablePlugin>, PluginInstallationContext> contextFactory;
@Inject
public DefaultPluginManager(PluginLoader loader, PluginCenter center, PluginInstaller installer, Restarter restarter, ScmEventBus eventBus) {
this.loader = loader;
@@ -77,6 +80,12 @@ public class DefaultPluginManager implements PluginManager {
this.eventBus = eventBus;
this.computeInstallationDependencies();
this.contextFactory = (availablePlugins -> PluginInstallationContext.of(getInstalled(), availablePlugins));
}
@VisibleForTesting
void setContextFactory(Function<List<AvailablePlugin>, PluginInstallationContext> contextFactory) {
this.contextFactory = contextFactory;
}
@VisibleForTesting
@@ -167,9 +176,10 @@ public class DefaultPluginManager implements PluginManager {
List<AvailablePlugin> plugins = collectPluginsToInstall(name);
List<PendingPluginInstallation> pendingInstallations = new ArrayList<>();
for (AvailablePlugin plugin : plugins) {
try {
PendingPluginInstallation pending = installer.install(plugin);
PendingPluginInstallation pending = installer.install(contextFactory.apply(plugins), plugin);
dependencyTracker.addInstalled(plugin.getDescriptor());
pendingInstallations.add(pending);
eventBus.post(new PluginEvent(PluginEvent.PluginEventType.INSTALLED, plugin));