From dc8f96a06996f96fda7d0bfb18a6e1e29775ec98 Mon Sep 17 00:00:00 2001 From: Patrick Hiesel Date: Fri, 12 Jan 2018 10:09:05 +0100 Subject: [PATCH] Make project state check in 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: Ie50735695b0eaefc0ba3d6508504b05daefebc7e --- java/com/google/gerrit/server/git/receive/ReceiveCommits.java | 3 +++ java/com/google/gerrit/server/project/RefControl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java index 949e0a617a..ed89e49e41 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java @@ -1060,6 +1060,9 @@ class ReceiveCommits { } catch (AuthException err) { ok = false; } + if (!projectState.statePermitsWrite()) { + reject(cmd, "prohibited by Gerrit: project state does not permit write"); + } if (ok) { if (isHead(cmd) && !isCommit(cmd)) { return; diff --git a/java/com/google/gerrit/server/project/RefControl.java b/java/com/google/gerrit/server/project/RefControl.java index 0357757415..b75a9e2040 100644 --- a/java/com/google/gerrit/server/project/RefControl.java +++ b/java/com/google/gerrit/server/project/RefControl.java @@ -224,7 +224,7 @@ class RefControl { return false; } } - return canPerform(Permission.PUSH) && isProjectStatePermittingWrite(); + return canPerform(Permission.PUSH); } /** @return true if the user can rewind (force push) the reference. */