diff --git a/changelog.html b/changelog.html index 910693ef0b..a88d49efae 100644 --- a/changelog.html +++ b/changelog.html @@ -56,10 +56,7 @@ Upcoming changes

What's new in 1.656 (2016/04/03)

diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 906f44fd7a..52e6e5ba13 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -679,8 +679,7 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas // so existing plugins can't be depending on this newly deployed one. plugins.add(p); - if (p.isActive()) - activePlugins.add(p); + activePlugins.add(p); synchronized (((UberClassLoader) uberClassLoader).loaded) { ((UberClassLoader) uberClassLoader).loaded.clear(); } diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java index e5ca24513d..c30dba8ae2 100644 --- a/core/src/main/java/hudson/PluginWrapper.java +++ b/core/src/main/java/hudson/PluginWrapper.java @@ -87,12 +87,6 @@ import javax.annotation.Nonnull; */ @ExportedBean public class PluginWrapper implements Comparable, ModelObject { - /** - * A plugin won't be loaded unless his declared dependencies are present and match the required minimal version. - * This can be set to false to disable the version check (legacy behaviour) - */ - private static final boolean ENABLE_PLUGIN_DEPENDENCIES_VERSION_CHECK = Boolean.parseBoolean(System.getProperty(PluginWrapper.class.getName()+"." + "dependenciesVersionCheck.enabled", "true")); - /** * {@link PluginManager} to which this belongs to. */ @@ -214,10 +208,10 @@ public class PluginWrapper implements Comparable, ModelObject { if(idx==-1) throw new IllegalArgumentException("Illegal dependency specifier "+s); this.shortName = s.substring(0,idx); - String version = s.substring(idx+1); - + this.version = s.substring(idx+1); + boolean isOptional = false; - String[] osgiProperties = version.split("[;]"); + String[] osgiProperties = s.split(";"); for (int i = 1; i < osgiProperties.length; i++) { String osgiProperty = osgiProperties[i].trim(); if (osgiProperty.equalsIgnoreCase("resolution:=optional")) { @@ -225,16 +219,11 @@ public class PluginWrapper implements Comparable, ModelObject { } } this.optional = isOptional; - if (isOptional) { - this.version = osgiProperties[0]; - } else { - this.version = version; - } } @Override public String toString() { - return shortName + " (" + version + ") " + (optional ? "optional" : ""); + return shortName + " (" + version + ")"; } } @@ -398,21 +387,6 @@ public class PluginWrapper implements Comparable, ModelObject { return "???"; } - /** - * Returns the required Jenkins core version of this plugin. - * @return the required Jenkins core version of this plugin. - * @since 1.657 - */ - @Exported - public @CheckForNull String getRequiredCoreVersion() { - String v = manifest.getMainAttributes().getValue("Jenkins-Version"); - if (v!= null) return v; - - v = manifest.getMainAttributes().getValue("Hudson-Version"); - if (v!= null) return v; - return null; - } - /** * Returns the version number of this plugin */ @@ -539,71 +513,19 @@ public class PluginWrapper implements Comparable, ModelObject { * thrown if one or several mandatory dependencies doesn't exists. */ /*package*/ void resolvePluginDependencies() throws IOException { - if (ENABLE_PLUGIN_DEPENDENCIES_VERSION_CHECK) { - String requiredCoreVersion = getRequiredCoreVersion(); - if (requiredCoreVersion == null) { - LOGGER.warning(shortName + " doesn't declare required core version."); - } else { - if (Jenkins.getVersion().isOlderThan(new VersionNumber(requiredCoreVersion))) { - throw new IOException(shortName + " requires a more recent core version (" + requiredCoreVersion + ") than the current (" + Jenkins.getVersion() + ")."); - } - } - } List missingDependencies = new ArrayList(); - List obsoleteDependencies = new ArrayList(); - List disabledDependencies = new ArrayList(); // make sure dependencies exist for (Dependency d : dependencies) { - PluginWrapper dependency = parent.getPlugin(d.shortName); - if (dependency == null) { + if (parent.getPlugin(d.shortName) == null) missingDependencies.add(d.toString()); - } else { - if (dependency.isActive()) { - if (ENABLE_PLUGIN_DEPENDENCIES_VERSION_CHECK && dependency.getVersionNumber().isOlderThan(new VersionNumber(d.version))) { - obsoleteDependencies.add(dependency.getShortName() + "(" + dependency.getVersion() + " < " + d.version + ")"); - } - } else { - disabledDependencies.add(d.toString()); - } - - } } + if (!missingDependencies.isEmpty()) + throw new IOException("Dependency "+Util.join(missingDependencies, ", ")+" doesn't exist"); + // add the optional dependencies that exists for (Dependency d : optionalDependencies) { - PluginWrapper dependency = parent.getPlugin(d.shortName); - if (dependency != null && dependency.isActive()) { - if (ENABLE_PLUGIN_DEPENDENCIES_VERSION_CHECK && dependency.getVersionNumber().isOlderThan(new VersionNumber(d.version))) { - obsoleteDependencies.add(dependency.getShortName() + "(" + dependency.getVersion() + " < " + d.version + ")"); - } else { - dependencies.add(d); - } - } - } - StringBuilder messageBuilder = new StringBuilder(); - if (!missingDependencies.isEmpty()) { - boolean plural = missingDependencies.size() > 1; - messageBuilder.append(plural ? "Dependencies " : "Dependency ") - .append(Util.join(missingDependencies, ", ")) - .append(" ").append(plural ? "don't" : "doesn't") - .append(" exist. "); - } - if (!disabledDependencies.isEmpty()) { - boolean plural = disabledDependencies.size() > 1; - messageBuilder.append(plural ? "Dependencies " : "Dependency ") - .append(Util.join(missingDependencies, ", ")) - .append(" ").append(plural ? "are" : "is") - .append(" disabled. "); - } - if (!obsoleteDependencies.isEmpty()) { - boolean plural = obsoleteDependencies.size() > 1; - messageBuilder.append(plural ? "Dependencies " : "Dependency ") - .append(Util.join(obsoleteDependencies, ", ")) - .append(" ").append(plural ? "are" : "is") - .append(" older than required."); - } - String message = messageBuilder.toString(); - if (!message.isEmpty()) { - throw new IOException(message); + if (parent.getPlugin(d.shortName) != null) + dependencies.add(d); } } diff --git a/test/src/test/java/hudson/PluginManagerTest.java b/test/src/test/java/hudson/PluginManagerTest.java index 777bf4d23f..913e3f4a15 100644 --- a/test/src/test/java/hudson/PluginManagerTest.java +++ b/test/src/test/java/hudson/PluginManagerTest.java @@ -47,7 +47,6 @@ import net.sf.json.JSONObject; import org.apache.commons.io.FileUtils; import org.apache.tools.ant.filters.StringInputStream; import static org.junit.Assert.*; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -340,75 +339,6 @@ public class PluginManagerTest { assertTrue(r.jenkins.getExtensionList("org.jenkinsci.plugins.dependencytest.dependee.DependeeExtensionPoint").isEmpty()); } - @Issue("JENKINS-21486") - @Test public void installPluginWithObsoleteDependencyFails() throws Exception { - // Load dependee 0.0.1. - { - dynamicLoad("dependee.hpi"); - } - - // Load mandatory-depender 0.0.2, depending on dependee 0.0.2 - try { - dynamicLoad("mandatory-depender-0.0.2.hpi"); - fail("Should not have worked"); - } catch (IOException e) { - // Expected - } - } - - @Issue("JENKINS-21486") - @Test public void installPluginWithDisabledOptionalDependencySucceeds() throws Exception { - // Load dependee 0.0.2. - { - dynamicLoadAndDisable("dependee-0.0.2.hpi"); - } - - // Load depender 0.0.2, depending optionally on dependee 0.0.2 - { - dynamicLoad("depender-0.0.2.hpi"); - } - - // dependee is not loaded so we cannot list any extension for it. - try { - r.jenkins.getExtensionList("org.jenkinsci.plugins.dependencytest.dependee.DependeeExtensionPoint"); - fail(); - } catch( ClassNotFoundException _ ){ - } - } - - @Issue("JENKINS-21486") - @Test public void installPluginWithDisabledDependencyFails() throws Exception { - // Load dependee 0.0.2. - { - dynamicLoadAndDisable("dependee-0.0.2.hpi"); - } - - // Load mandatory-depender 0.0.2, depending on dependee 0.0.2 - try { - dynamicLoad("mandatory-depender-0.0.2.hpi"); - fail("Should not have worked"); - } catch (IOException e) { - // Expected - } - } - - - @Issue("JENKINS-21486") - @Test public void installPluginWithObsoleteOptionalDependencyFails() throws Exception { - // Load dependee 0.0.1. - { - dynamicLoad("dependee.hpi"); - } - - // Load depender 0.0.2, depending optionally on dependee 0.0.2 - try { - dynamicLoad("depender-0.0.2.hpi"); - fail("Should not have worked"); - } catch (IOException e) { - // Expected - } - } - @Issue("JENKINS-12753") @WithPlugin("tasks.jpi") @Test public void dynamicLoadRestartRequiredException() throws Exception { @@ -447,8 +377,4 @@ public class PluginManagerTest { private void dynamicLoad(String plugin) throws IOException, InterruptedException, RestartRequiredException { PluginManagerUtil.dynamicLoad(plugin, r.jenkins); } - - private void dynamicLoadAndDisable(String plugin) throws IOException, InterruptedException, RestartRequiredException { - PluginManagerUtil.dynamicLoad(plugin, r.jenkins, true); - } } diff --git a/test/src/test/java/hudson/PluginManagerUtil.java b/test/src/test/java/hudson/PluginManagerUtil.java index 2263622b4c..e67b9b31f9 100644 --- a/test/src/test/java/hudson/PluginManagerUtil.java +++ b/test/src/test/java/hudson/PluginManagerUtil.java @@ -48,16 +48,9 @@ public class PluginManagerUtil { } public static void dynamicLoad(String plugin, Jenkins jenkins) throws IOException, InterruptedException, RestartRequiredException { - dynamicLoad(plugin, jenkins, false); - } - - public static void dynamicLoad(String plugin, Jenkins jenkins, boolean disable) throws IOException, InterruptedException, RestartRequiredException { URL src = PluginManagerTest.class.getClassLoader().getResource("plugins/" + plugin); File dest = new File(jenkins.getRootDir(), "plugins/" + plugin); FileUtils.copyURLToFile(src, dest); - if (disable) { - new File(dest.getPath() + ".disabled").createNewFile(); - } jenkins.pluginManager.dynamicLoad(dest); } } diff --git a/test/src/test/java/hudson/PluginWrapperTest.java b/test/src/test/java/hudson/PluginWrapperTest.java deleted file mode 100644 index 7529c53194..0000000000 --- a/test/src/test/java/hudson/PluginWrapperTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package hudson; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class PluginWrapperTest { - - @Test - public void dependencyTest() { - String version = "plugin:0.0.2"; - PluginWrapper.Dependency dependency = new PluginWrapper.Dependency(version); - assertEquals("plugin", dependency.shortName); - assertEquals("0.0.2", dependency.version); - assertEquals(false, dependency.optional); - } - - @Test - public void optionalDependencyTest() { - String version = "plugin:0.0.2;resolution:=optional"; - PluginWrapper.Dependency dependency = new PluginWrapper.Dependency(version); - assertEquals("plugin", dependency.shortName); - assertEquals("0.0.2", dependency.version); - assertEquals(true, dependency.optional); - } -} diff --git a/test/src/test/resources/plugins/dependee-0.0.2.hpi b/test/src/test/resources/plugins/dependee-0.0.2.hpi deleted file mode 100644 index 79525b0846..0000000000 Binary files a/test/src/test/resources/plugins/dependee-0.0.2.hpi and /dev/null differ diff --git a/test/src/test/resources/plugins/depender-0.0.2.hpi b/test/src/test/resources/plugins/depender-0.0.2.hpi deleted file mode 100644 index 34826d3f77..0000000000 Binary files a/test/src/test/resources/plugins/depender-0.0.2.hpi and /dev/null differ diff --git a/test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi b/test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi deleted file mode 100644 index dedc65a62f..0000000000 Binary files a/test/src/test/resources/plugins/mandatory-depender-0.0.2.hpi and /dev/null differ