Merge "ApprovalsUtil: Throw RestApiExceptions from check* methods"

This commit is contained in:
David Pursehouse 2017-02-21 23:26:35 +00:00 committed by Gerrit Code Review
commit db30d31e13
4 changed files with 20 additions and 10 deletions
gerrit-server/src/main/java/com/google/gerrit/server

@ -32,6 +32,9 @@ import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.common.data.LabelTypes;
import com.google.gerrit.common.data.Permission;
import com.google.gerrit.common.data.PermissionRange;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.LabelId;
@ -301,6 +304,7 @@ public class ApprovalsUtil {
* @param ps patch set being approved.
* @param changeCtl change control for user adding approvals.
* @param approvals approvals to add.
* @throws RestApiException
* @throws OrmException
*/
public Iterable<PatchSetApproval> addApprovalsForNewPatchSet(
@ -310,7 +314,7 @@ public class ApprovalsUtil {
PatchSet ps,
ChangeControl changeCtl,
Map<String, Short> approvals)
throws OrmException {
throws RestApiException, OrmException {
Account.Id accountId = changeCtl.getUser().getAccountId();
checkArgument(
accountId.equals(ps.getUploader()),
@ -334,25 +338,26 @@ public class ApprovalsUtil {
return cells;
}
public static void checkLabel(LabelTypes labelTypes, String name, Short value) {
public static void checkLabel(LabelTypes labelTypes, String name, Short value)
throws BadRequestException {
LabelType label = labelTypes.byLabel(name);
if (label == null) {
throw new IllegalArgumentException(
String.format("label \"%s\" is not a configured label", name));
throw new BadRequestException(String.format("label \"%s\" is not a configured label", name));
}
if (label.getValue(value) == null) {
throw new IllegalArgumentException(
throw new BadRequestException(
String.format("label \"%s\": %d is not a valid value", name, value));
}
}
private static void checkApprovals(Map<String, Short> approvals, ChangeControl changeCtl) {
private static void checkApprovals(Map<String, Short> approvals, ChangeControl changeCtl)
throws AuthException {
for (Map.Entry<String, Short> vote : approvals.entrySet()) {
String name = vote.getKey();
Short value = vote.getValue();
PermissionRange range = changeCtl.getRange(Permission.forLabel(name));
if (range == null || !range.contains(value)) {
throw new IllegalArgumentException(
throw new AuthException(
String.format("applying label \"%s\": %d is restricted", name, value));
}
}

@ -28,6 +28,7 @@ import com.google.gerrit.common.data.LabelTypes;
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.api.changes.RecipientType;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
@ -335,7 +336,8 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp {
}
@Override
public boolean updateChange(ChangeContext ctx) throws OrmException, IOException {
public boolean updateChange(ChangeContext ctx)
throws RestApiException, OrmException, IOException {
change = ctx.getChange(); // Use defensive copy created by ChangeControl.
ReviewDb db = ctx.getDb();
ChangeControl ctl = ctx.getControl();

@ -63,6 +63,7 @@ import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.registration.DynamicMap.Entry;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
@ -1327,7 +1328,7 @@ public class ReceiveCommits {
try {
LabelType.checkName(v.label());
ApprovalsUtil.checkLabel(labelTypes, v.label(), v.value());
} catch (IllegalArgumentException e) {
} catch (BadRequestException e) {
throw clp.reject(e.getMessage());
}
labels.put(v.label(), v.value());

@ -24,6 +24,7 @@ import com.google.gerrit.common.Nullable;
import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.client.ChangeKind;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
@ -207,7 +208,8 @@ public class ReplaceOp extends BatchUpdate.Op {
}
@Override
public boolean updateChange(ChangeContext ctx) throws OrmException, IOException {
public boolean updateChange(ChangeContext ctx)
throws RestApiException, OrmException, IOException {
change = ctx.getChange();
if (change == null || change.getStatus().isClosed()) {
rejectMessage = CHANGE_IS_CLOSED;