Merge "Update review command documentation for json option"
diff --git a/Documentation/BUCK b/Documentation/BUCK
index f070d7e..5ea58fd 100644
--- a/Documentation/BUCK
+++ b/Documentation/BUCK
@@ -19,7 +19,7 @@
   srcs = glob([
       'images/*.jpg',
       'images/*.png',
-    ]) + ['doc.css'],
+    ]) + [':doc.css'],
   out = 'html.zip',
   visibility = ['PUBLIC'],
 )
@@ -39,6 +39,13 @@
   out = 'licenses.txt',
 )
 
+genrule(
+  name = 'doc.css',
+  srcs = ['doc.css.in'],
+  cmd = 'cp $SRCS $OUT',
+  out = 'doc.css',
+)
+
 python_binary(
   name = 'gen_licenses',
   main = 'gen_licenses.py',
diff --git a/Documentation/asciidoc.defs b/Documentation/asciidoc.defs
index 4d00c50..6581dd7 100644
--- a/Documentation/asciidoc.defs
+++ b/Documentation/asciidoc.defs
@@ -34,7 +34,7 @@
   for attribute in attributes:
     asciidoc.extend(['-a', attribute])
   asciidoc.append('$SRCS')
-  newsrcs = ["doc.css"]
+  newsrcs = [":doc.css"]
   for src in srcs:
     fn = src
     # We have two cases: regular source files and generated files.
diff --git a/Documentation/doc.css b/Documentation/doc.css.in
similarity index 100%
rename from Documentation/doc.css
rename to Documentation/doc.css.in
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
index 441e31c..5a1e50d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
@@ -102,7 +102,7 @@
       @Assisted final Map<Change.Id, CodeReviewCommit> commits,
       @GerritPersonIdent final PersonIdent myIdent,
       GitRepositoryManager repoManager, GitReferenceUpdated gitRefUpdated,
-      @Assisted Account account, ChangeHooks changeHooks) {
+      @Nullable @Assisted Account account, ChangeHooks changeHooks) {
     this.destBranch = destBranch;
     this.mergeTip = mergeTip;
     this.rw = rw;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
index 15f8f92..cad5174 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
@@ -18,11 +18,9 @@
 import com.google.gerrit.common.Nullable;
 import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.account.Realm;
 import com.google.gerrit.server.config.CanonicalWebUrl;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.events.CommitReceivedEvent;
@@ -75,7 +73,6 @@
   private final SshInfo sshInfo;
   private final Repository repo;
   private final DynamicSet<CommitValidationListener> commitValidationListeners;
-  private final Realm realm;
 
   @Inject
   CommitValidators(@GerritPersonIdent final PersonIdent gerritIdent,
@@ -83,8 +80,7 @@
       @GerritServerConfig final Config config,
       final DynamicSet<CommitValidationListener> commitValidationListeners,
       @Assisted final SshInfo sshInfo,
-      @Assisted final Repository repo, @Assisted final RefControl refControl,
-      Realm realm) {
+      @Assisted final Repository repo, @Assisted final RefControl refControl) {
     this.gerritIdent = gerritIdent;
     this.refControl = refControl;
     this.canonicalWebUrl = canonicalWebUrl;
@@ -93,7 +89,6 @@
     this.sshInfo = sshInfo;
     this.repo = repo;
     this.commitValidationListeners = commitValidationListeners;
-    this.realm = realm;
   }
 
   public List<CommitValidationMessage> validateForReceiveCommits(
@@ -105,10 +100,8 @@
     validators.add(new UploadMergesPermissionValidator(refControl));
     validators.add(new AmendedGerritMergeCommitValidationListener(
         refControl, gerritIdent));
-    validators.add(new AuthorUploaderValidator(refControl, canonicalWebUrl,
-        realm));
-    validators.add(new CommitterUploaderValidator(refControl, canonicalWebUrl,
-        realm));
+    validators.add(new AuthorUploaderValidator(refControl, canonicalWebUrl));
+    validators.add(new CommitterUploaderValidator(refControl, canonicalWebUrl));
     validators.add(new SignedOffByValidator(refControl, canonicalWebUrl));
     if (MagicBranch.isMagicBranch(receiveEvent.command.getRefName())
         || ReceiveCommits.NEW_PATCHSET.matcher(
@@ -142,8 +135,7 @@
     validators.add(new UploadMergesPermissionValidator(refControl));
     validators.add(new AmendedGerritMergeCommitValidationListener(
         refControl, gerritIdent));
-    validators.add(new AuthorUploaderValidator(refControl, canonicalWebUrl,
-        realm));
+    validators.add(new AuthorUploaderValidator(refControl, canonicalWebUrl));
     validators.add(new SignedOffByValidator(refControl, canonicalWebUrl));
     if (MagicBranch.isMagicBranch(receiveEvent.command.getRefName())
         || ReceiveCommits.NEW_PATCHSET.matcher(
@@ -443,13 +435,10 @@
       CommitValidationListener {
     private final RefControl refControl;
     private final String canonicalWebUrl;
-    private final Realm realm;
 
-    public AuthorUploaderValidator(RefControl refControl,
-        String canonicalWebUrl, Realm realm) {
+    public AuthorUploaderValidator(RefControl refControl, String canonicalWebUrl) {
       this.refControl = refControl;
       this.canonicalWebUrl = canonicalWebUrl;
-      this.realm = realm;
     }
 
     @Override
@@ -463,7 +452,7 @@
         List<CommitValidationMessage> messages = new LinkedList<>();
 
         messages.add(getInvalidEmailError(receiveEvent.commit, "author", author,
-            currentUser, canonicalWebUrl, realm));
+            currentUser, canonicalWebUrl));
         throw new CommitValidationException("invalid author", messages);
       }
       return Collections.emptyList();
@@ -475,13 +464,11 @@
       CommitValidationListener {
     private final RefControl refControl;
     private final String canonicalWebUrl;
-    private final Realm realm;
 
     public CommitterUploaderValidator(RefControl refControl,
-        String canonicalWebUrl, Realm realm) {
+        String canonicalWebUrl) {
       this.refControl = refControl;
       this.canonicalWebUrl = canonicalWebUrl;
-      this.realm = realm;
     }
 
     @Override
@@ -493,8 +480,8 @@
           .contains(committer.getEmailAddress())
           && !refControl.canForgeCommitter()) {
         List<CommitValidationMessage> messages = new LinkedList<>();
-        messages.add(getInvalidEmailError(receiveEvent.commit, "committer",
-            committer, currentUser, canonicalWebUrl, realm));
+        messages.add(getInvalidEmailError(receiveEvent.commit, "committer", committer,
+            currentUser, canonicalWebUrl));
         throw new CommitValidationException("invalid committer", messages);
       }
       return Collections.emptyList();
@@ -558,9 +545,8 @@
     }
   }
 
-  private static CommitValidationMessage getInvalidEmailError(RevCommit c,
-      String type, PersonIdent who, IdentifiedUser currentUser,
-      String canonicalWebUrl, Realm realm) {
+  private static CommitValidationMessage getInvalidEmailError(RevCommit c, String type,
+      PersonIdent who, IdentifiedUser currentUser, String canonicalWebUrl) {
     StringBuilder sb = new StringBuilder();
     sb.append("\n");
     sb.append("ERROR:  In commit ").append(c.name()).append("\n");
@@ -571,31 +557,21 @@
     if (currentUser.getEmailAddresses().isEmpty()) {
       sb.append("ERROR:  You have not registered any email addresses.\n");
     } else {
-      if (currentUser.getEmailAddresses().size() == 1) {
-        sb.append("ERROR:  The following address is currently "
-            + "registered for you:\n");
-      } else {
-        sb.append("ERROR:  The following addresses are currently "
-            + "registered for you:\n");
-      }
+      sb.append("ERROR:  The following addresses are currently registered:\n");
       for (String address : currentUser.getEmailAddresses()) {
         sb.append("ERROR:    ").append(address).append("\n");
       }
     }
-    if (canonicalWebUrl != null && canRegisterNewEmail(realm)) {
-      sb.append("ERROR:\n");
+    sb.append("ERROR:\n");
+    if (canonicalWebUrl != null) {
       sb.append("ERROR:  To register an email address, please visit:\n");
       sb.append("ERROR:  ").append(canonicalWebUrl).append("#")
-          .append(PageLinks.SETTINGS_CONTACT).append("\n");
+        .append(PageLinks.SETTINGS_CONTACT).append("\n");
     }
     sb.append("\n");
     return new CommitValidationMessage(sb.toString(), false);
   }
 
-  private static boolean canRegisterNewEmail(Realm realm) {
-    return realm.allowsEdit(Account.FieldName.REGISTER_NEW_EMAIL);
-  }
-
   /**
    * Get the Gerrit URL.
    *