Make help more friendly over SSH

`ssh -p 29418 localhost help` and `ssh -p 29418 localhost gerrit help`
are now more user friendly by displaying commands the user can invoke
from within this context.

Bug: issue 296
Change-Id: I62c32855cf50ff65ee225d8e5e2c14e4badcb4af
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gerrit/server/ssh/DispatchCommand.java b/src/main/java/com/google/gerrit/server/ssh/DispatchCommand.java
index 6abc3a3..aac3d5f 100644
--- a/src/main/java/com/google/gerrit/server/ssh/DispatchCommand.java
+++ b/src/main/java/com/google/gerrit/server/ssh/DispatchCommand.java
@@ -65,6 +65,11 @@
       args = "";
     }
 
+    if (name.equals("help") || name.equals("--help") || name.equals("-h")) {
+      usage();
+      return;
+    }
+
     final Provider<Command> p = commands.get(name);
     if (p != null) {
       final Command cmd = p.get();
@@ -98,15 +103,26 @@
 
   private void usage() throws IOException, UnsupportedEncodingException {
     final StringBuilder usage = new StringBuilder();
-    usage.append("usage: " + prefix + " COMMAND [ARGS]\n");
+    if (prefix.indexOf(' ') < 0) {
+      usage.append("usage: " + prefix + " COMMAND [ARGS]\n");
+    }
     usage.append("\n");
     usage.append("Available commands of " + prefix + " are:\n");
+    usage.append("\n");
     for (Map.Entry<String, Provider<Command>> e : commands.entrySet()) {
       usage.append("   ");
       usage.append(e.getKey());
       usage.append("\n");
     }
     usage.append("\n");
+
+    usage.append("See '");
+    if (prefix.indexOf(' ') < 0) {
+      usage.append(prefix);
+      usage.append(' ');
+    }
+    usage.append("COMMAND --help' for more information.\n");
+    usage.append("\n");
     err.write(usage.toString().getBytes("UTF-8"));
     err.flush();
     onExit(1);