Allow specifying which groups to subscribe to

JGit's RepoCommand defaults to tracking groups all,-notdefault.  Most
users of this plugin are likely to want to track all groups instead,
so provide a knob to allow requesting that.

If the value `all` proves overwhelmingly popular in practice, then it
can be made the default in JGit and this setting could be removed.

Change-Id: Ibddb5fdbaa9d57e6bce12affd39e14c73ee481e5
Reported-by: Jeff Gaston <jeffrygaston@google.com>
diff --git a/java/Documentation/about.md b/java/Documentation/about.md
index 4de2ad3..b392dbf 100644
--- a/java/Documentation/about.md
+++ b/java/Documentation/about.md
@@ -38,6 +38,9 @@
 
 The plugin supports the following options:
 
+*  `groups` (defaults to `default`). Sets the groups setting for JGit's
+   RepoCommand
+
 *  `recordSubmoduleLabels` (defaults to false). Sets recordSubmoduleLabels
    setting for JGit's RepoCommand
 
diff --git a/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java b/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
index ad5e90d..85862fb 100644
--- a/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
+++ b/java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java
@@ -14,9 +14,9 @@
 
 package com.googlesource.gerrit.plugins.supermanifest;
 
+import static com.google.common.base.Strings.nullToEmpty;
 import static com.google.gerrit.reviewdb.client.RefNames.REFS_HEADS;
 
-import com.google.common.base.Strings;
 import com.google.gerrit.reviewdb.client.Project;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -34,6 +34,7 @@
   ToolType toolType;
   String xmlPath;
   Project.NameKey destRepoKey;
+  String repoGroups;
   boolean recordSubmoduleLabels;
   boolean ignoreRemoteFailures;
 
@@ -68,7 +69,7 @@
     // TODO(hanwen): sanity check repo names.
     srcRepoKey = new Project.NameKey(srcRepo);
 
-    String toolType = Strings.nullToEmpty(cfg.getString(SECTION_NAME, name, "toolType"));
+    String toolType = nullToEmpty(cfg.getString(SECTION_NAME, name, "toolType"));
 
     switch (toolType) {
       case "":
@@ -110,6 +111,7 @@
     // The external format is chosen so we can support copying over tags as well.
     destBranch = destRef.substring(REFS_HEADS.length());
 
+    repoGroups = nullToEmpty(cfg.getString(SECTION_NAME, name, "groups"));
     recordSubmoduleLabels = cfg.getBoolean(SECTION_NAME, name, "recordSubmoduleLabels", false);
     ignoreRemoteFailures = cfg.getBoolean(SECTION_NAME, name, "ignoreRemoteFailures", false);
 
@@ -188,6 +190,11 @@
     return recordSubmoduleLabels;
   }
 
+  /** @return group restriction suitable for passing to {@code repo init -g} */
+  public String getGroupsParameter() {
+    return repoGroups;
+  }
+
   /** @return the destBranch */
   public String getDestBranch() {
     return destBranch;
diff --git a/java/com/googlesource/gerrit/plugins/supermanifest/RepoUpdater.java b/java/com/googlesource/gerrit/plugins/supermanifest/RepoUpdater.java
index 094afe5..8edc7ba 100644
--- a/java/com/googlesource/gerrit/plugins/supermanifest/RepoUpdater.java
+++ b/java/com/googlesource/gerrit/plugins/supermanifest/RepoUpdater.java
@@ -52,6 +52,7 @@
         new ByteArrayInputStream(Utils.readBlob(srcRepo, srcRef + ":" + c.getXmlPath()));
 
     cmd.setAuthor(serverIdent)
+        .setGroups(c.getGroupsParameter())
         .setRecordRemoteBranch(true)
         .setRecordSubmoduleLabels(c.isRecordSubmoduleLabels())
         .setIgnoreRemoteFailures(c.ignoreRemoteFailures)