From a4412a93b9bd8faa6b760cf105682d23488c6169 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Wed, 29 Apr 2009 05:01:36 +0000 Subject: [PATCH] added the help command. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@17606 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/cli/CLICommand.java | 6 +++++ .../main/java/hudson/cli/GroovyshCommand.java | 5 ++++ .../src/main/java/hudson/cli/HelpCommand.java | 24 +++++++++++++++++++ .../main/java/hudson/cli/VersionCommand.java | 5 ++++ core/src/main/java/hudson/model/Hudson.java | 8 +++---- 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/hudson/cli/HelpCommand.java diff --git a/core/src/main/java/hudson/cli/CLICommand.java b/core/src/main/java/hudson/cli/CLICommand.java index 2055267b54..738487d3f4 100644 --- a/core/src/main/java/hudson/cli/CLICommand.java +++ b/core/src/main/java/hudson/cli/CLICommand.java @@ -123,6 +123,12 @@ public abstract class CLICommand implements ExtensionPoint, Cloneable { return name.replaceAll("([a-z0-9])([A-Z])","$1-$2").toLowerCase(Locale.ENGLISH); } + /** + * Gets the quick summary of what this command does. + * Used by the help command to generate the list of commands. + */ + public abstract String getShortDescription(); + public int main(List args, InputStream stdin, PrintStream stdout, PrintStream stderr) { this.stdin = new BufferedInputStream(stdin); this.stdout = stdout; diff --git a/core/src/main/java/hudson/cli/GroovyshCommand.java b/core/src/main/java/hudson/cli/GroovyshCommand.java index 08bb6b3b1d..e8d7e09384 100644 --- a/core/src/main/java/hudson/cli/GroovyshCommand.java +++ b/core/src/main/java/hudson/cli/GroovyshCommand.java @@ -20,6 +20,11 @@ import jline.Terminal; */ @Extension public class GroovyshCommand extends CLICommand { + @Override + public String getShortDescription() { + return "Runs an interactive groovy shell"; + } + @Override public int main(List args, InputStream stdin, PrintStream stdout, PrintStream stderr) { // this allows the caller to manipulate the JVM state, so require the admin privilege. diff --git a/core/src/main/java/hudson/cli/HelpCommand.java b/core/src/main/java/hudson/cli/HelpCommand.java new file mode 100644 index 0000000000..d8141fcd68 --- /dev/null +++ b/core/src/main/java/hudson/cli/HelpCommand.java @@ -0,0 +1,24 @@ +package hudson.cli; + +import hudson.Extension; + +/** + * Show the list of all commands. + * + * @author Kohsuke Kawaguchi + */ +@Extension +public class HelpCommand extends CLICommand { + @Override + public String getShortDescription() { + return "Lists all the available commands"; + } + + protected int run() { + for (CLICommand c : CLICommand.all()) { + stderr.println(" "+c.getName()); + stderr.println(" "+c.getShortDescription()); + } + return 0; + } +} diff --git a/core/src/main/java/hudson/cli/VersionCommand.java b/core/src/main/java/hudson/cli/VersionCommand.java index 3366d5dd3b..ce735a77f2 100644 --- a/core/src/main/java/hudson/cli/VersionCommand.java +++ b/core/src/main/java/hudson/cli/VersionCommand.java @@ -33,6 +33,11 @@ import hudson.model.Hudson; */ @Extension public class VersionCommand extends CLICommand { + @Override + public String getShortDescription() { + return "Shows the Hudson version"; + } + protected int run() { stdout.println(Hudson.VERSION); return 0; diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 7d0a1b551a..3ee32be66b 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -46,6 +46,7 @@ import hudson.DescriptorExtensionList; import hudson.ExtensionListView; import hudson.cli.CliEntryPoint; import hudson.cli.CLICommand; +import hudson.cli.HelpCommand; import hudson.logging.LogRecorderManager; import hudson.lifecycle.Lifecycle; import hudson.model.Descriptor.FormException; @@ -2671,6 +2672,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl } public int main(List args, Locale locale, InputStream stdin, OutputStream stdout, OutputStream stderr) { + PrintStream out = new PrintStream(stdout); PrintStream err = new PrintStream(stderr); String subCmd = args.get(0); @@ -2680,16 +2682,14 @@ public final class Hudson extends Node implements ItemGroup, Stapl SecurityContextHolder.getContext().setAuthentication(auth); try { // execute the command, do so with the originator of the request as the principal - return cmd.main(args.subList(1,args.size()), - stdin, new PrintStream(stdout), err); + return cmd.main(args.subList(1,args.size()),stdin, out, err); } finally { SecurityContextHolder.getContext().setAuthentication(old); } } err.println("No such command: "+subCmd); - for (CLICommand c : CLICommand.all()) - err.println(" "+c.getName()); + new HelpCommand().main(Collections.emptyList(), stdin, out, err); return -1; } -- GitLab