Check if project state permits write before evaluating Git commands
All of the supported Git commands required the project to be writable. We have seen HTTP 500s at Google because not all code paths would check if the project state permits writes. This commit moves the check in ReceiveCommits to a more central to mitigate the problem. Change-Id: Icdea3349583f676580991cd688ae7e9d95564a21
This commit is contained in:
@@ -838,6 +838,11 @@ class ReceiveCommits {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!projectState.getProject().getState().permitsWrite()) {
|
||||
reject(cmd, "prohibited by Gerrit: project state does not permit write");
|
||||
return;
|
||||
}
|
||||
|
||||
if (MagicBranch.isMagicBranch(cmd.getRefName())) {
|
||||
parseMagicBranch(cmd);
|
||||
continue;
|
||||
@@ -1070,9 +1075,6 @@ 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;
|
||||
@@ -1169,9 +1171,6 @@ class ReceiveCommits {
|
||||
if (!validRefOperation(cmd)) {
|
||||
return;
|
||||
}
|
||||
if (!projectState.statePermitsWrite()) {
|
||||
cmd.setResult(REJECTED_NONFASTFORWARD, " project state does not permit write.");
|
||||
}
|
||||
actualCommands.add(cmd);
|
||||
} else {
|
||||
cmd.setResult(
|
||||
@@ -1519,10 +1518,6 @@ class ReceiveCommits {
|
||||
|
||||
magicBranch.dest = new Branch.NameKey(project.getNameKey(), ref);
|
||||
magicBranch.perm = permissions.ref(ref);
|
||||
if (!projectState.getProject().getState().permitsWrite()) {
|
||||
reject(cmd, "project state does not permit write");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
magicBranch.perm.check(RefPermission.CREATE_CHANGE);
|
||||
@@ -1570,10 +1565,6 @@ class ReceiveCommits {
|
||||
reject(cmd, e.getMessage());
|
||||
return;
|
||||
}
|
||||
if (!projectState.statePermitsWrite()) {
|
||||
reject(cmd, "project state does not permit write");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RevWalk walk = rp.getRevWalk();
|
||||
|
Reference in New Issue
Block a user