diff --git a/changelog.html b/changelog.html index 0a546536cd..efbcdac53a 100644 --- a/changelog.html +++ b/changelog.html @@ -62,6 +62,8 @@ Upcoming changes Saving the update center list after the metadata has been fetched results in the metadata being persisted twice (issue 15889) +
  • + Added list-plugins CLI command. diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index bb61a8f56b..8624157591 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -538,6 +538,11 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas return failedPlugins; } + /** + * Get the plugin instance with the given short name. + * @param shortName the short name of the plugin + * @return The plugin singleton or null if a plugin with the given short name does not exist. + */ public PluginWrapper getPlugin(String shortName) { for (PluginWrapper p : plugins) { if(p.getShortName().equals(shortName)) diff --git a/core/src/main/java/hudson/cli/ListPluginsCommand.java b/core/src/main/java/hudson/cli/ListPluginsCommand.java new file mode 100644 index 0000000000..22e2bd9a72 --- /dev/null +++ b/core/src/main/java/hudson/cli/ListPluginsCommand.java @@ -0,0 +1,89 @@ +/* + * The MIT License + * + * Copyright (c) 2004-2010, Sun Microsystems, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.cli; + +import java.util.List; +import hudson.Extension; +import hudson.PluginManager; +import hudson.PluginWrapper; +import hudson.model.UpdateSite; +import jenkins.model.Jenkins; +import org.kohsuke.args4j.Argument; + +/** + * Outputs a list of installed plugins. + * + * @author Michael Koch + */ +@Extension +public class ListPluginsCommand extends CLICommand { + @Override + public String getShortDescription() { + return Messages.ListPluginsCommand_ShortDescription(); + } + + @Argument(metaVar = "NAME", usage = "Name of a specific plugin", required = false) + public String name; + + protected int run() { + Jenkins h = Jenkins.getInstance(); + PluginManager pluginManager = h.getPluginManager(); + + if (this.name != null) { + PluginWrapper plugin = pluginManager.getPlugin(this.name); + + if (plugin != null) { + printPlugin(plugin); + } + else { + stderr.println(String.format("No plugin with the name '%s' found", this.name)); + } + } + else { + List plugins = pluginManager.getPlugins(); + + if (plugins != null) { + for (PluginWrapper plugin : plugins) { + printPlugin(plugin); + } + } + } + + return 0; + } + + private void printPlugin(PluginWrapper plugin) { + final String version; + + if (plugin.hasUpdate()) { + UpdateSite.Plugin updateInfo = plugin.getUpdateInfo(); + version = String.format("%s (%s)", plugin.getVersion(), updateInfo.version); + } + else { + version = plugin.getVersion(); + } + + stdout.println(String.format("%s - %s - %s", plugin.getShortName(), plugin.getDisplayName(), version)); + } +} diff --git a/core/src/main/resources/hudson/cli/Messages.properties b/core/src/main/resources/hudson/cli/Messages.properties index 6346b0b2ec..0a595b0c5c 100644 --- a/core/src/main/resources/hudson/cli/Messages.properties +++ b/core/src/main/resources/hudson/cli/Messages.properties @@ -27,6 +27,8 @@ ListChangesCommand.ShortDescription=\ Dumps the changelog for the specified build(s). ListJobsCommand.ShortDescription=\ Lists all jobs in a specific view or item group. +ListPluginsCommand.ShortDescription=\ + Outputs a list of installed plugins. LoginCommand.ShortDescription=\ Saves the current credential to allow future commands to run without explicit credential information. LogoutCommand.ShortDescription=\ @@ -47,4 +49,4 @@ WhoAmICommand.ShortDescription=\ Reports your credential and permissions UpdateJobCommand.ShortDescription=\ Updates the job definition XML from stdin. The opposite of the get-job command -BuildCommand.CLICause.ShortDescription=Started by command line by {0} \ No newline at end of file +BuildCommand.CLICause.ShortDescription=Started by command line by {0}