upgrade optional dependencies on plugin installation/upgrade

This commit is contained in:
Konstantin Schaper
2020-07-21 15:17:40 +02:00
parent 38047a25aa
commit b6ca84cd6c
3 changed files with 61 additions and 10 deletions

View File

@@ -253,21 +253,40 @@ public class DefaultPluginManager implements PluginManager {
private void collectPluginsToInstallOrUpdate(List<AvailablePlugin> plugins, String name) {
if (!isInstalledOrPending(name) || isUpdatable(name)) {
AvailablePlugin plugin = getAvailable(name).orElseThrow(() -> NotFoundException.notFound(entity(AvailablePlugin.class, name)));
Set<String> dependencies = plugin.getDescriptor().getDependencies();
if (dependencies != null) {
for (String dependency : dependencies) {
collectPluginsToInstallOrUpdate(plugins, dependency);
}
}
plugins.add(plugin);
collectDependentPlugins(plugins, name);
} else {
LOG.info("plugin {} is already installed or installation is pending, skipping installation", name);
}
}
private void collectOptionalPluginToInstallOrUpdate(List<AvailablePlugin> plugins, String name) {
if (isInstalledOrPending(name) && isUpdatable(name)) {
collectDependentPlugins(plugins, name);
} else {
LOG.info("optional plugin {} is not installed or not updatable", name);
}
}
private void collectDependentPlugins(List<AvailablePlugin> plugins, String name) {
AvailablePlugin plugin = getAvailable(name).orElseThrow(() -> NotFoundException.notFound(entity(AvailablePlugin.class, name)));
Set<String> dependencies = plugin.getDescriptor().getDependencies();
if (dependencies != null) {
for (String dependency : dependencies) {
collectPluginsToInstallOrUpdate(plugins, dependency);
}
}
Set<String> optionalDependencies = plugin.getDescriptor().getOptionalDependencies();
if (dependencies != null) {
for (String optionalDependency : optionalDependencies) {
collectOptionalPluginToInstallOrUpdate(plugins, optionalDependency);
}
}
plugins.add(plugin);
}
private boolean isInstalledOrPending(String name) {
return getInstalled(name).isPresent() || getPending(name).isPresent();
}