Merge "Merge Lucene core and backward-codecs jars"
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index b856c73..14523ec 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -2863,28 +2863,16 @@
 [[receive]]
 === Section receive
 
-This section is used to set who can execute the 'receive-pack' and
-to limit the maximum Git object size that 'receive-pack' will accept.
-'receive-pack' is what runs on the server during a user's push or
-repo upload command. It also contains some advanced options for tuning the
-behavior of Gerrit's 'receive-pack' mechanism.
+This section is used to configure behavior of the 'receive-pack'
+handler, which responds to 'git push' requests.
 
-----
-[receive]
-  allowGroup = GROUP_ALLOWED_TO_EXECUTE
-  allowGroup = YET_ANOTHER_GROUP_ALLOWED_TO_EXECUTE
-  maxObjectSizeLimit = 40 m
-----
-
-[[receive.enableSignedPush]]receive.enableSignedPush::
+[[receive.allowGroup]]receive.allowGroup::
 +
-If true, server-side signed push validation is enabled.
+Name of the groups of users that are allowed to execute
+'receive-pack' on the server. One or more groups can be set.
 +
-When a client pushes with `git push --signed`, this ensures that the
-push certificate is valid and signed with a valid public key stored in
-the `refs/gpg-keys` branch of `All-Users`.
-+
-Defaults to false.
+If no groups are added, any user will be allowed to execute
+'receive-pack' on the server.
 
 [[receive.certNonceSeed]]receive.certNonceSeed::
 +
@@ -2910,6 +2898,18 @@
 +
 Default is 5 minutes.
 
+[[receive.changeUpdateThreads]]receive.changeUpdateThreads::
++
+Number of threads to perform change creation or patch set updates
+concurrently. Each thread uses its own database connection from
+the database connection pool, and if all threads are busy then
+main receive thread will also perform a change creation or patch
+set update.
++
+Defaults to 1, using only the main receive thread. This feature is for
+databases with very high latency that can benefit from concurrent
+operations when multiple changes are impacted at once.
+
 [[receive.checkMagicRefs]]receive.checkMagicRefs::
 +
 If true, Gerrit will verify the destination repository has
@@ -2938,13 +2938,30 @@
 +
 Default is true.
 
-[[receive.allowGroup]]receive.allowGroup::
+[[receive.enableSignedPush]]receive.enableSignedPush::
 +
-Name of the groups of users that are allowed to execute
-'receive-pack' on the server. One or more groups can be set.
+If true, server-side signed push validation is enabled.
 +
-If no groups are added, any user will be allowed to execute
-'receive-pack' on the server.
+When a client pushes with `git push --signed`, this ensures that the
+push certificate is valid and signed with a valid public key stored in
+the `refs/gpg-keys` branch of `All-Users`.
++
+Defaults to false.
+
+[[receive.maxBatchChanges]]receive.maxBatchChanges::
++
+The maximum number of changes that Gerrit allows to be pushed
+in a batch for review. When this number is exceeded Gerrit rejects
+the push with an error message.
++
+May be overridden for certain groups by specifying a limit in the
+link:access-control.html#capability_batchChangesLimit['Batch Changes Limit']
+global capability.
++
+This setting can be used to prevent users from uploading large
+number of changes for review by mistake.
++
+Default is zero, no limit.
 
 [[receive.maxObjectSizeLimit]]receive.maxObjectSizeLimit::
 +
@@ -2965,21 +2982,6 @@
 +
 Common unit suffixes of 'k', 'm', or 'g' are supported.
 
-[[receive.maxBatchChanges]]receive.maxBatchChanges::
-+
-The maximum number of changes that Gerrit allows to be pushed
-in a batch for review. When this number is exceeded Gerrit rejects
-the push with an error message.
-+
-May be overridden for certain groups by specifying a limit in the
-link:access-control.html#capability_batchChangesLimit['Batch Changes Limit']
-global capability.
-+
-This setting can be used to prevent users from uploading large
-number of changes for review by mistake.
-+
-Default is zero, no limit.
-
 [[receive.threadPoolSize]]receive.threadPoolSize::
 +
 Maximum size of the thread pool in which the change data in received packs is
@@ -2987,18 +2989,6 @@
 +
 Defaults to the number of available CPUs according to the Java runtime.
 
-[[receive.changeUpdateThreads]]receive.changeUpdateThreads::
-+
-Number of threads to perform change creation or patch set updates
-concurrently. Each thread uses its own database connection from
-the database connection pool, and if all threads are busy then
-main receive thread will also perform a change creation or patch
-set update.
-+
-Defaults to 1, using only the main receive thread. This feature is for
-databases with very high latency that can benefit from concurrent
-operations when multiple changes are impacted at once.
-
 [[receive.timeout]]receive.timeout::
 +
 Overall timeout on the time taken to process the change data in
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
index c6482a9..5baaa18 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
@@ -17,6 +17,7 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assert_;
+import static com.google.gerrit.gpg.PublicKeyStore.REFS_GPG_KEYS;
 import static com.google.gerrit.gpg.PublicKeyStore.keyToString;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -39,7 +40,6 @@
 import com.google.gerrit.gpg.testutil.TestKey;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.AccountExternalId;
-import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.config.AllUsersName;
 import com.google.gerrit.testutil.ConfigSuite;
@@ -99,9 +99,9 @@
   @After
   public void clearPublicKeyStore() throws Exception {
     try (Repository repo = repoManager.openRepository(allUsers)) {
-      Ref ref = repo.getRef(RefNames.REFS_GPG_KEYS);
+      Ref ref = repo.getRef(REFS_GPG_KEYS);
       if (ref != null) {
-        RefUpdate ru = repo.updateRef(RefNames.REFS_GPG_KEYS);
+        RefUpdate ru = repo.updateRef(REFS_GPG_KEYS);
         ru.setForceUpdate(true);
         assertThat(ru.delete()).isEqualTo(RefUpdate.Result.FORCED);
       }
@@ -115,7 +115,7 @@
 
   @After
   public void deleteGpgKeys() throws Exception {
-    String ref = RefNames.REFS_GPG_KEYS;
+    String ref = REFS_GPG_KEYS;
     try (Repository repo = repoManager.openRepository(allUsers)) {
       if (repo.getRefDatabase().exactRef(ref) != null) {
         RefUpdate ru = repo.updateRef(ref);
diff --git a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PublicKeyStore.java b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PublicKeyStore.java
index 3736a7c..a36052e 100644
--- a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PublicKeyStore.java
+++ b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PublicKeyStore.java
@@ -17,8 +17,6 @@
 import static com.google.common.base.Preconditions.checkState;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 
-import com.google.gerrit.reviewdb.client.RefNames;
-
 import org.bouncycastle.bcpg.ArmoredInputStream;
 import org.bouncycastle.bcpg.ArmoredOutputStream;
 import org.bouncycastle.openpgp.PGPException;
@@ -73,6 +71,9 @@
   private static final ObjectId EMPTY_TREE =
       ObjectId.fromString("4b825dc642cb6eb9a060e54bf8d69288fbee4904");
 
+  /** Ref where GPG public keys are stored. */
+  public static final String REFS_GPG_KEYS = "refs/meta/gpg-keys";
+
   private final Repository repo;
   private ObjectReader reader;
   private RevCommit tip;
@@ -104,7 +105,7 @@
     reset();
     reader = repo.newObjectReader();
 
-    Ref ref = repo.getRefDatabase().exactRef(RefNames.REFS_GPG_KEYS);
+    Ref ref = repo.getRefDatabase().exactRef(REFS_GPG_KEYS);
     if (ref == null) {
       return;
     }
@@ -249,7 +250,7 @@
       ins.flush();
     }
 
-    RefUpdate ru = repo.updateRef(RefNames.REFS_GPG_KEYS);
+    RefUpdate ru = repo.updateRef(PublicKeyStore.REFS_GPG_KEYS);
     ru.setExpectedOldObjectId(tip);
     ru.setNewObjectId(newTip);
     ru.setRefLogIdent(cb.getCommitter());
diff --git a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PushCertificateChecker.java b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PushCertificateChecker.java
index 80b87f7..86a33ab 100644
--- a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PushCertificateChecker.java
+++ b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/PushCertificateChecker.java
@@ -31,6 +31,8 @@
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.PushCertificate;
 import org.eclipse.jgit.transport.PushCertificate.NonceStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -39,6 +41,9 @@
 
 /** Checker for push certificates. */
 public abstract class PushCertificateChecker {
+  private static final Logger log =
+      LoggerFactory.getLogger(PushCertificateChecker.class);
+
   private final PublicKeyChecker publicKeyChecker;
 
   protected PushCertificateChecker(PublicKeyChecker publicKeyChecker) {
@@ -49,28 +54,34 @@
    * Check a push certificate.
    *
    * @return result of the check.
-   * @throws PGPException if an error occurred during GPG checks.
-   * @throws IOException if an error occurred reading from the repository.
    */
-  public final CheckResult check(PushCertificate cert) throws PGPException, IOException {
+  public final CheckResult check(PushCertificate cert) {
     if (cert.getNonceStatus() != NonceStatus.OK) {
       return new CheckResult("Invalid nonce");
     }
-    PGPSignature sig = readSignature(cert);
-    if (sig == null) {
-      return new CheckResult("Invalid signature format");
-    }
-    Repository repo = getRepository();
     List<String> problems = new ArrayList<>();
-    try (PublicKeyStore store = new PublicKeyStore(repo)) {
-      checkSignature(sig, cert, store.get(sig.getKeyID()), problems);
-      checkCustom(repo, problems);
-      return new CheckResult(problems);
-    } finally {
-      if (shouldClose(repo)) {
-        repo.close();
+    try {
+      PGPSignature sig = readSignature(cert);
+      if (sig != null) {
+        @SuppressWarnings("resource")
+        Repository repo = getRepository();
+        try (PublicKeyStore store = new PublicKeyStore(repo)) {
+          checkSignature(sig, cert, store.get(sig.getKeyID()), problems);
+          checkCustom(repo, problems);
+        } finally {
+          if (shouldClose(repo)) {
+            repo.close();
+          }
+        }
+      } else {
+        problems.add("Invalid signature format");
       }
+    } catch (PGPException | IOException e) {
+      String msg = "Internal error checking push certificate";
+      log.error(msg, e);
+      problems.add(msg);
     }
+    return new CheckResult(problems);
   }
 
   /**
@@ -140,9 +151,9 @@
         if (result.isOk()) {
           return;
         }
-        StringBuilder err = new StringBuilder("Invalid public key (")
+        StringBuilder err = new StringBuilder("Invalid public key ")
             .append(keyToString(k))
-            .append("):");
+            .append(":");
         for (int i = 0; i < result.getProblems().size(); i++) {
           err.append('\n').append("  ").append(result.getProblems().get(i));
         }
@@ -150,13 +161,13 @@
         return;
       } catch (PGPException e) {
         deferredProblems.add(
-            "Error checking signature with public key (" + keyToString(k)
+            "Error checking signature with public key " + keyToString(k)
             + ": " + e.getMessage());
       }
     }
     if (!anyKeys) {
       problems.add(
-          "No public keys found for Key ID " + keyIdToString(sig.getKeyID()));
+          "No public keys found for key ID " + keyIdToString(sig.getKeyID()));
     } else {
       problems.addAll(deferredProblems);
     }
diff --git a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/SignedPushPreReceiveHook.java b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/SignedPushPreReceiveHook.java
index 8618f20..b2dca8b 100644
--- a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/SignedPushPreReceiveHook.java
+++ b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/SignedPushPreReceiveHook.java
@@ -19,14 +19,11 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import org.bouncycastle.openpgp.PGPException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.PreReceiveHook;
 import org.eclipse.jgit.transport.PushCertificate;
 import org.eclipse.jgit.transport.ReceiveCommand;
 import org.eclipse.jgit.transport.ReceivePack;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -40,9 +37,6 @@
  */
 @Singleton
 public class SignedPushPreReceiveHook implements PreReceiveHook {
-  private static final Logger log =
-      LoggerFactory.getLogger(SignedPushPreReceiveHook.class);
-
   private final GitRepositoryManager repoManager;
   private final AllUsersName allUsers;
   private final PublicKeyChecker keyChecker;
@@ -60,32 +54,27 @@
   @Override
   public void onPreReceive(ReceivePack rp,
       Collection<ReceiveCommand> commands) {
-    try {
-      PushCertificate cert = rp.getPushCertificate();
-      if (cert == null) {
-        return;
+    PushCertificate cert = rp.getPushCertificate();
+    if (cert == null) {
+      return;
+    }
+    PushCertificateChecker checker = new PushCertificateChecker(keyChecker) {
+      @Override
+      protected Repository getRepository() throws IOException {
+        return repoManager.openRepository(allUsers);
       }
-      PushCertificateChecker checker = new PushCertificateChecker(keyChecker) {
-        @Override
-        protected Repository getRepository() throws IOException {
-          return repoManager.openRepository(allUsers);
-        }
 
-        @Override
-        protected boolean shouldClose(Repository repo) {
-          return true;
-        }
-      };
-      CheckResult result = checker.check(cert);
-      if (!result.isOk()) {
-        for (String problem : result.getProblems()) {
-          rp.sendMessage(problem);
-        }
-        reject(commands, "invalid push cert");
+      @Override
+      protected boolean shouldClose(Repository repo) {
+        return true;
       }
-    } catch (PGPException | IOException e) {
-      log.error("Error checking push certificate", e);
-      reject(commands, "push cert error");
+    };
+    CheckResult result = checker.check(cert);
+    if (!result.isOk()) {
+      for (String problem : result.getProblems()) {
+        rp.sendMessage(problem);
+      }
+      reject(commands, "invalid push cert");
     }
   }
 
diff --git a/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PublicKeyStoreTest.java b/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PublicKeyStoreTest.java
index f48f9d8..d936a31 100644
--- a/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PublicKeyStoreTest.java
+++ b/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PublicKeyStoreTest.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.gpg;
 
+import static com.google.gerrit.gpg.PublicKeyStore.REFS_GPG_KEYS;
 import static com.google.gerrit.gpg.PublicKeyStore.keyIdToString;
 import static com.google.gerrit.gpg.PublicKeyStore.keyObjectId;
 import static com.google.gerrit.gpg.PublicKeyStore.keyToString;
@@ -23,7 +24,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.google.gerrit.gpg.testutil.TestKey;
-import com.google.gerrit.reviewdb.client.RefNames;
 
 import org.bouncycastle.openpgp.PGPPublicKey;
 import org.bouncycastle.openpgp.PGPPublicKeyRing;
@@ -84,13 +84,13 @@
   @Test
   public void testGet() throws Exception {
     TestKey key1 = TestKey.key1();
-    tr.branch(RefNames.REFS_GPG_KEYS)
+    tr.branch(REFS_GPG_KEYS)
         .commit()
         .add(keyObjectId(key1.getKeyId()).name(),
           key1.getPublicKeyArmored())
         .create();
     TestKey key2 = TestKey.key2();
-    tr.branch(RefNames.REFS_GPG_KEYS)
+    tr.branch(REFS_GPG_KEYS)
         .commit()
         .add(keyObjectId(key2.getKeyId()).name(),
           key2.getPublicKeyArmored())
@@ -104,7 +104,7 @@
   public void testGetMultiple() throws Exception {
     TestKey key1 = TestKey.key1();
     TestKey key2 = TestKey.key2();
-    tr.branch(RefNames.REFS_GPG_KEYS)
+    tr.branch(REFS_GPG_KEYS)
         .commit()
         .add(keyObjectId(key1.getKeyId()).name(),
             key1.getPublicKeyArmored()
@@ -131,7 +131,7 @@
   public void saveAppendsToExistingList() throws Exception {
     TestKey key1 = TestKey.key1();
     TestKey key2 = TestKey.key2();
-    tr.branch(RefNames.REFS_GPG_KEYS)
+    tr.branch(REFS_GPG_KEYS)
         .commit()
         // Mismatched for this key ID, but we can still read it out.
         .add(keyObjectId(key1.getKeyId()).name(), key2.getPublicKeyArmored())
@@ -146,7 +146,7 @@
         RevWalk rw = new RevWalk(reader)) {
       NoteMap notes = NoteMap.read(
           reader, tr.getRevWalk().parseCommit(
-            tr.getRepository().getRef(RefNames.REFS_GPG_KEYS).getObjectId()));
+            tr.getRepository().getRef(REFS_GPG_KEYS).getObjectId()));
       String contents = new String(
           reader.open(notes.get(keyObjectId(key1.getKeyId()))).getBytes(),
           UTF_8);
diff --git a/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PushCertificateCheckerTest.java b/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PushCertificateCheckerTest.java
index 238156c..8a633ae 100644
--- a/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PushCertificateCheckerTest.java
+++ b/gerrit-gpg/src/test/java/com/google/gerrit/gpg/PushCertificateCheckerTest.java
@@ -14,13 +14,13 @@
 
 package com.google.gerrit.gpg;
 
+import static com.google.gerrit.gpg.PublicKeyStore.REFS_GPG_KEYS;
 import static com.google.gerrit.gpg.PublicKeyStore.keyIdToString;
 import static com.google.gerrit.gpg.PublicKeyStore.keyToString;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.Assert.assertEquals;
 
 import com.google.gerrit.gpg.testutil.TestKey;
-import com.google.gerrit.reviewdb.client.RefNames;
 
 import org.bouncycastle.bcpg.ArmoredOutputStream;
 import org.bouncycastle.bcpg.BCPGOutputStream;
@@ -56,7 +56,7 @@
     TestKey key3 = TestKey.key3();
     tr = new TestRepository<>(new InMemoryRepository(
         new DfsRepositoryDescription("repo")));
-    tr.branch(RefNames.REFS_GPG_KEYS).commit()
+    tr.branch(REFS_GPG_KEYS).commit()
         .add(PublicKeyStore.keyObjectId(key1.getPublicKey().getKeyID()).name(),
             key1.getPublicKeyArmored())
         .add(PublicKeyStore.keyObjectId(key3.getPublicKey().getKeyID()).name(),
@@ -96,7 +96,7 @@
     TestKey key2 = TestKey.key2();
     PushCertificate cert = newSignedCert(validNonce(), key2);
     assertProblems(cert,
-        "No public keys found for Key ID " + keyIdToString(key2.getKeyId()));
+        "No public keys found for key ID " + keyIdToString(key2.getKeyId()));
   }
 
   @Test
@@ -104,8 +104,8 @@
     TestKey key3 = TestKey.key3();
     PushCertificate cert = newSignedCert(validNonce(), key3);
     assertProblems(cert,
-        "Invalid public key (" + keyToString(key3.getPublicKey())
-          + "):\n  Key is expired");
+        "Invalid public key " + keyToString(key3.getPublicKey())
+          + ":\n  Key is expired");
   }
 
   private String validNonce() {
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java
index d6c0dc9..aea438c 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java
@@ -18,7 +18,6 @@
 import com.google.gerrit.server.config.SitePaths;
 import com.google.gerrit.server.git.GroupList;
 import com.google.gerrit.server.git.ProjectConfig;
-import com.google.gerrit.server.git.ValidationError;
 import com.google.gerrit.server.git.VersionedMetaData;
 import com.google.inject.Inject;
 
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/RefNames.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/RefNames.java
index 9468d2d..da66929 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/RefNames.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/RefNames.java
@@ -57,12 +57,6 @@
 
   public static final String EDIT_PREFIX = "edit-";
 
-  /**
-   * Special ref for GPG public keys used by {@link
-   * com.google.gerrit.gpg.SignedPushPreReceiveHook}.
-   */
-  public static final String REFS_GPG_KEYS = "refs/meta/gpg-keys";
-
   public static String fullName(String ref) {
     return ref.startsWith(REFS) ? ref : REFS_HEADS + ref;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/VersionedAccountQueries.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/VersionedAccountQueries.java
index 18e1310..2ea6c53 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/VersionedAccountQueries.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/VersionedAccountQueries.java
@@ -17,7 +17,6 @@
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.git.QueryList;
-import com.google.gerrit.server.git.ValidationError;
 import com.google.gerrit.server.git.VersionedMetaData;
 
 import org.eclipse.jgit.errors.ConfigInvalidException;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java
index a63f80c..983e8ef 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/CommitPredicate.java
@@ -14,25 +14,24 @@
 
 package com.google.gerrit.server.query.change;
 
+import static com.google.gerrit.server.index.ChangeField.COMMIT;
 import static com.google.gerrit.server.index.ChangeField.EXACT_COMMIT;
+import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH;
 
 import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.server.index.ChangeField;
 import com.google.gerrit.server.index.FieldDef;
 import com.google.gerrit.server.index.IndexPredicate;
 import com.google.gerrit.server.index.Schema;
 import com.google.gwtorm.server.OrmException;
 
-import org.eclipse.jgit.lib.Constants;
-
 class CommitPredicate extends IndexPredicate<ChangeData> {
   static FieldDef<ChangeData, ?> commitField(Schema<ChangeData> schema,
       String id) {
-    if (id.length() == Constants.OBJECT_ID_STRING_LENGTH
+    if (id.length() == OBJECT_ID_STRING_LENGTH
         && schema.hasField(EXACT_COMMIT)) {
       return EXACT_COMMIT;
     }
-    return ChangeField.COMMIT;
+    return COMMIT;
   }
 
   CommitPredicate(Schema<ChangeData> schema, String id) {