diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java index c5be5a14..5260d064 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java @@ -493,8 +493,11 @@ public List getLatestVersionsOfPlugins(List plugins) { throw new IllegalStateException("List of plugins is not available. Likely Update Center data has not been downloaded yet"); } - if (isBeta(pluginVersion) && experimentalPlugins.has(plugin.getName())) { - return getUpdatedPlugin(plugin, experimentalPlugins); + if (isBeta(pluginVersion)) { + resolveExperimentalUcIfRequired(); + if (experimentalPlugins.has(plugin.getName())) { + return getUpdatedPlugin(plugin, experimentalPlugins); + } } if (latestPlugins.has(plugin.getName())) { @@ -848,7 +851,7 @@ public void getUCJson(VersionNumber jenkinsVersion) { logVerbose("\nRetrieving update center information"); cm.createCache(); - String cacheSuffix = jenkinsVersion != null ? "-" + jenkinsVersion : ""; + String cacheSuffix = getCacheSuffix(jenkinsVersion); try { URIBuilder uriBuilder = new URIBuilder(cfg.getJenkinsUc().toURI()); if (jenkinsVersion != null) { @@ -866,11 +869,13 @@ public void getUCJson(VersionNumber jenkinsVersion) { throw new RuntimeException(e); } latestPlugins = latestUcJson.getJSONObject("plugins"); - experimentalUcJson = getJson(cfg.getJenkinsUcExperimental(), "experimental-update-center" + cacheSuffix); - experimentalPlugins = experimentalUcJson.getJSONObject("plugins"); pluginInfoJson = getJson(cfg.getJenkinsPluginInfo(), "plugin-versions"); } + private static String getCacheSuffix(VersionNumber jenkinsVersion) { + return jenkinsVersion != null ? "-" + jenkinsVersion : ""; + } + /** * Gets the JSONArray containing plugin a * @@ -1059,6 +1064,8 @@ public List resolveDirectDependencies(Plugin plugin) { } else if (version.equals(Plugin.LATEST)) { dependentPlugins = resolveDependenciesFromJson(plugin, latestUcJson); } else if (version.equals(Plugin.EXPERIMENTAL)) { + resolveExperimentalUcIfRequired(); + dependentPlugins = resolveDependenciesFromJson(plugin, experimentalUcJson); } else { dependentPlugins = resolveDependenciesFromJson(plugin, pluginInfoJson); @@ -1070,6 +1077,16 @@ public List resolveDirectDependencies(Plugin plugin) { return dependentPlugins; } + private void resolveExperimentalUcIfRequired() { + if (experimentalPlugins == null) { + experimentalUcJson = getJson( + cfg.getJenkinsUcExperimental(), + "experimental-update-center" + getCacheSuffix(getJenkinsVersion()) + ); + experimentalPlugins = experimentalUcJson.getJSONObject("plugins"); + } + } + /** * Finds all recursive dependencies for a given plugin. If the same plugin is required by different plugins, the * highest required version will be taken.