PatchSetInserter: Improve error message when change is closed

Say "Cannot create new patch set" because if we just say "Change is
closed" then it doesn't communicate why this is a problem and what the
server is trying to do.

Throw ResourceConflictException so the message is propagated through
BatchUpdate to the user.

Change-Id: I647e3038e1989537528f3a7c47e5eb93a9305a6b
This commit is contained in:
Dave Borowitz
2016-01-27 11:40:09 -05:00
parent 12d6212986
commit b40590166c
3 changed files with 8 additions and 7 deletions

View File

@@ -46,7 +46,6 @@ import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.notedb.ReviewerStateInternal;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.InvalidChangeOperationException;
import com.google.gerrit.server.project.RefControl;
import com.google.gerrit.server.ssh.NoSshInfo;
import com.google.gerrit.server.ssh.SshInfo;
@@ -204,8 +203,8 @@ public class PatchSetInserter extends BatchUpdate.Op {
}
@Override
public boolean updateChange(ChangeContext ctx) throws OrmException,
InvalidChangeOperationException, IOException {
public boolean updateChange(ChangeContext ctx)
throws ResourceConflictException, OrmException, IOException {
ChangeControl ctl = ctx.getControl();
change = ctx.getChange();
@@ -213,8 +212,9 @@ public class PatchSetInserter extends BatchUpdate.Op {
update.setSubjectForCommit("Create patch set " + psId.get());
if (!change.getStatus().isOpen() && !allowClosed) {
throw new InvalidChangeOperationException(String.format(
"Change %s is closed", change.getId()));
throw new ResourceConflictException(String.format(
"Cannot create new patch set of change %s because it is %s",
change.getId(), change.getStatus().name().toLowerCase()));
}
Iterable<String> newGroups = groups;

View File

@@ -152,7 +152,7 @@ public class RebaseChangeOp extends BatchUpdate.Op {
@Override
public boolean updateChange(ChangeContext ctx)
throws OrmException, InvalidChangeOperationException, IOException {
throws ResourceConflictException, OrmException, IOException {
boolean ret = patchSetInserter.updateChange(ctx);
rebasedPatchSet = patchSetInserter.getPatchSet();
return ret;

View File

@@ -16,6 +16,7 @@ package com.google.gerrit.server.git.strategy;
import com.google.common.collect.Lists;
import com.google.gerrit.extensions.restapi.MergeConflictException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetApproval;
@@ -146,7 +147,7 @@ public class RebaseIfNecessary extends SubmitStrategy {
@Override
public PatchSet updateChangeImpl(ChangeContext ctx)
throws NoSuchChangeException, InvalidChangeOperationException,
throws NoSuchChangeException, ResourceConflictException,
OrmException, IOException {
if (rebaseOp == null) {
// Took the fast-forward option, nothing to do.