Provide json output from the version programm and SSH command

Release-Notes: skip
Change-Id: Id03267c3eafea970d3532f2cf513638c28dfb136
diff --git a/Documentation/cmd-version.txt b/Documentation/cmd-version.txt
index 67259a1..3e53678 100644
--- a/Documentation/cmd-version.txt
+++ b/Documentation/cmd-version.txt
@@ -8,6 +8,7 @@
 --
 _ssh_ -p <port> <host> _gerrit version_
   [--verbose | -v]
+  [--json]
 --
 
 == DESCRIPTION
@@ -37,6 +38,9 @@
 -v::
   Verbose output, include also the NoteDb version and the version of each index.
 
+--json::
+  Json output format. Assumes verbose output.
+
 == EXAMPLES
 
 ----
diff --git a/java/com/google/gerrit/pgm/BUILD b/java/com/google/gerrit/pgm/BUILD
index ea9edb6..8523e8a 100644
--- a/java/com/google/gerrit/pgm/BUILD
+++ b/java/com/google/gerrit/pgm/BUILD
@@ -20,6 +20,7 @@
         "//java/com/google/gerrit/httpd/auth/restapi",
         "//java/com/google/gerrit/index",
         "//java/com/google/gerrit/index/project",
+        "//java/com/google/gerrit/json",
         "//java/com/google/gerrit/launcher",
         "//java/com/google/gerrit/lifecycle",
         "//java/com/google/gerrit/lucene",
@@ -57,5 +58,6 @@
         "//lib/prolog:cafeteria",
         "//lib/prolog:compiler",
         "//lib/prolog:runtime",
+        "@gson//jar",
     ],
 )
diff --git a/java/com/google/gerrit/pgm/Version.java b/java/com/google/gerrit/pgm/Version.java
index ea11932..27c52d3 100644
--- a/java/com/google/gerrit/pgm/Version.java
+++ b/java/com/google/gerrit/pgm/Version.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.pgm;
 
 import com.google.gerrit.extensions.common.VersionInfo;
+import com.google.gerrit.json.OutputFormat;
 import com.google.gerrit.pgm.util.AbstractProgram;
 import com.google.gerrit.server.version.VersionInfoModule;
 import org.kohsuke.args4j.Option;
@@ -28,6 +29,9 @@
       usage = "verbose version info")
   private boolean verbose;
 
+  @Option(name = "--json", usage = "json output format, assumes verbose output")
+  private boolean json;
+
   @Override
   public int run() throws Exception {
     VersionInfo versionInfo = new VersionInfoModule().createVersionInfo();
@@ -36,7 +40,9 @@
       return 1;
     }
 
-    if (verbose) {
+    if (json) {
+      System.out.println(OutputFormat.JSON.newGson().toJson(versionInfo));
+    } else if (verbose) {
       System.out.print(versionInfo.verbose());
     } else {
       System.out.print(versionInfo.compact());
diff --git a/java/com/google/gerrit/sshd/commands/VersionCommand.java b/java/com/google/gerrit/sshd/commands/VersionCommand.java
index f78cad4..c274b3d 100644
--- a/java/com/google/gerrit/sshd/commands/VersionCommand.java
+++ b/java/com/google/gerrit/sshd/commands/VersionCommand.java
@@ -17,6 +17,7 @@
 import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
 
 import com.google.gerrit.extensions.common.VersionInfo;
+import com.google.gerrit.json.OutputFormat;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
 import com.google.inject.Inject;
@@ -31,6 +32,9 @@
       usage = "verbose version info")
   private boolean verbose;
 
+  @Option(name = "--json", usage = "json output format, assumes verbose output")
+  private boolean json;
+
   @Inject private VersionInfo versionInfo;
 
   @Override
@@ -40,7 +44,9 @@
       throw new Failure(1, "fatal: version unavailable");
     }
 
-    if (verbose) {
+    if (json) {
+      stdout.println(OutputFormat.JSON.newGson().toJson(versionInfo));
+    } else if (verbose) {
       stdout.print(versionInfo.verbose());
     } else {
       stdout.print(versionInfo.compact());