Make project state check in FORCE_UPDATE explicit

The majority of code in {Project,Ref,Change}Control is now about
permissions, but not all. Exceptions include checks for a project's
state. This is confusing, because users are presented with an exception
telling them that they lack some kind of permission while the real
reason for the failed operation is that the project's current state
doesn't permit the operation.

This is part of a series of commits to remove all project state checks
from *Control classes and make explicit checks instead.

Change-Id: Ic497f0bbd6c0c128d3df81be34c382bba1a0d1b0
diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
index 7199ff7..74bf116 100644
--- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
@@ -1159,6 +1159,9 @@
       if (!validRefOperation(cmd)) {
         return;
       }
+      if (!projectState.statePermitsWrite()) {
+        cmd.setResult(REJECTED_NONFASTFORWARD, " project state does not permit write.");
+      }
       actualCommands.add(cmd);
     } else {
       cmd.setResult(
diff --git a/java/com/google/gerrit/server/project/RefControl.java b/java/com/google/gerrit/server/project/RefControl.java
index 6bbb475..329b3a9 100644
--- a/java/com/google/gerrit/server/project/RefControl.java
+++ b/java/com/google/gerrit/server/project/RefControl.java
@@ -228,10 +228,6 @@
 
   /** @return true if the user can rewind (force push) the reference. */
   private boolean canForceUpdate() {
-    if (!isProjectStatePermittingWrite()) {
-      return false;
-    }
-
     if (canPushWithForce()) {
       return true;
     }