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> {