Reindex: Add --list option to list available indices

Change-Id: I3d46d39d9cc9751489cb348e22c63c60c2f1dbd1
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/Documentation/pgm-reindex.txt b/Documentation/pgm-reindex.txt
index a583d16..b58527e 100644
--- a/Documentation/pgm-reindex.txt
+++ b/Documentation/pgm-reindex.txt
@@ -24,6 +24,9 @@
 --dry-run::
 	Dry run.  Don't write anything to index.
 
+--list::
+	List available index names.
+
 == CONTEXT
 The secondary index must be enabled. See
 link:config-gerrit.html#index.type[index.type].
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Reindex.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Reindex.java
index ceda604..657511d 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Reindex.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Reindex.java
@@ -60,6 +60,9 @@
   @Option(name = "--verbose", usage = "Output debug information for each change")
   private boolean verbose;
 
+  @Option(name = "--list", usage = "List supported indices and exit")
+  private boolean list;
+
   private Injector dbInjector;
   private Injector sysInjector;
   private Config globalConfig;
@@ -88,10 +91,7 @@
     sysInjector.injectMembers(this);
 
     try {
-      boolean ok = true;
-      for (IndexDefinition<?, ?, ?> def : indexDefs) {
-        ok &= reindex(def);
-      }
+      boolean ok = list ? list() : reindex();
       return ok ? 0 : 1;
     } catch (Exception e) {
       throw die(e.getMessage(), e);
@@ -101,6 +101,21 @@
     }
   }
 
+  private boolean list() {
+    for (IndexDefinition<?, ?, ?> def : indexDefs) {
+      System.out.format("%s\n", def.getName());
+    }
+    return true;
+  }
+
+  private boolean reindex() throws IOException {
+    boolean ok = true;
+    for (IndexDefinition<?, ?, ?> def : indexDefs) {
+      ok &= reindex(def);
+    }
+    return ok;
+  }
+
   private void checkNotSlaveMode() throws Die {
     if (globalConfig.getBoolean("container", "slave", false)) {
       throw die("Cannot run reindex in slave mode");