canReadCommit: move check for READ on refs/* on top

This should improve performance for those users who have READ access
on refs/*. Since this check is much cheaper than walking potentially
large commit graphs, move it to the top of the method. Only when user
doesn't have READ on refs/* do the usual reachability check from
all readable branches and tags.

Change-Id: I48341112347c1c4708c4b6b94c3326da6de8d8fb
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
index c111c02..ddfe752 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java
@@ -490,6 +490,10 @@
   }
 
   public boolean canReadCommit(RevWalk rw, RevCommit commit) {
+    if (controlForRef("refs/*").canPerform(Permission.READ)) {
+      return true;
+    }
+
     Project.NameKey projName = state.getProject().getNameKey();
     try {
       Repository repo = repoManager.openRepository(projName);
@@ -521,6 +525,6 @@
               commit.name(), projName.get());
       log.error(msg, e);
     }
-    return controlForRef("refs/*").canPerform(Permission.READ);
+    return false;
   }
 }