Merge "PatchSet.isRef()-optimizations."
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java
index 3e4f4f6..54c556d 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java
@@ -25,7 +25,27 @@
 
   /** Is the reference name a change reference? */
   public static boolean isRef(final String name) {
-    return name.matches("^refs/changes/.*/[1-9][0-9]*/[1-9][0-9]*$");
+    if (name == null || !name.startsWith(REFS_CHANGES)) {
+      return false;
+    }
+    boolean accepted = false;
+    int numsFound = 0;
+    for (int i = name.length() - 1; i >= REFS_CHANGES.length() - 1; i--) {
+      char c = name.charAt(i);
+      if (c >= '0' && c <= '9') {
+        accepted = (c != '0');
+      } else if (c == '/') {
+        if (accepted) {
+          if (++numsFound == 2) {
+            return true;
+          }
+          accepted = false;
+        }
+      } else {
+        return false;
+      }
+    }
+    return false;
   }
 
   public static class Id extends IntKey<Change.Id> {