Update ReviewCommand to use new Abandon interface

The AbandonChange class is no longer used - the logic has been moved
to Abandon.  This change fixes the ssh command to abandon changes.

Change-Id: I96f36c30303c2c1a120c7c2531a47ec89538a3e8
This commit is contained in:
Brad Larson
2012-11-14 13:52:50 -06:00
parent ea6d0b5a27
commit 3d552cc081
2 changed files with 56 additions and 53 deletions

View File

@@ -17,19 +17,23 @@ package com.google.gerrit.sshd.commands;
import com.google.gerrit.common.data.ApprovalType;
import com.google.gerrit.common.data.ApprovalTypes;
import com.google.gerrit.common.data.ReviewResult;
import com.google.gerrit.common.data.ReviewResult.Error.Type;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.reviewdb.client.ApprovalCategory;
import com.google.gerrit.reviewdb.client.ApprovalCategoryValue;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.RevId;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.changedetail.AbandonChange;
import com.google.gerrit.server.change.Abandon;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.changedetail.DeleteDraftPatchSet;
import com.google.gerrit.server.changedetail.PublishDraft;
import com.google.gerrit.server.changedetail.RestoreChange;
import com.google.gerrit.server.changedetail.Submit;
import com.google.gerrit.server.mail.EmailException;
import com.google.gerrit.server.patch.PublishComments;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.InvalidChangeOperationException;
import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.project.ProjectControl;
@@ -40,7 +44,6 @@ import com.google.gwtorm.server.ResultSet;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
@@ -115,7 +118,10 @@ public class ReviewCommand extends SshCommand {
private DeleteDraftPatchSet.Factory deleteDraftPatchSetFactory;
@Inject
private Provider<AbandonChange> abandonChangeProvider;
private ChangeControl.Factory changeControlFactory;
@Inject
private Provider<Abandon> abandonProvider;
@Inject
private PublishComments.Factory publishCommentsFactory;
@@ -183,9 +189,7 @@ public class ReviewCommand extends SshCommand {
}
}
private void approveOne(final PatchSet.Id patchSetId)
throws NoSuchChangeException, OrmException, EmailException, Failure,
RepositoryNotFoundException, IOException {
private void approveOne(final PatchSet.Id patchSetId) throws Exception {
if (changeComment == null) {
changeComment = "";
@@ -203,11 +207,18 @@ public class ReviewCommand extends SshCommand {
publishCommentsFactory.create(patchSetId, changeComment, aps, forceMessage).call();
if (abandonChange) {
final AbandonChange abandonChange = abandonChangeProvider.get();
abandonChange.setChangeId(patchSetId.getParentKey());
abandonChange.setMessage(changeComment);
final ReviewResult result = abandonChange.call();
handleReviewResultErrors(result);
final Abandon abandon = abandonProvider.get();
final Abandon.Input input = new Abandon.Input();
input.message = changeComment;
ChangeControl ctl =
changeControlFactory.controlFor(patchSetId.getParentKey());
try {
abandon.apply(new ChangeResource(ctl), input);
} catch(AuthException e) {
writeError("error: " + parseError(Type.ABANDON_NOT_PERMITTED) + "\n");
} catch(ResourceConflictException e) {
writeError("error: " + parseError(Type.CHANGE_IS_CLOSED) + "\n");
}
} else if (restoreChange) {
final RestoreChange restoreChange = restoreChangeProvider.get();
restoreChange.setChangeId(patchSetId.getParentKey());
@@ -238,46 +249,7 @@ public class ReviewCommand extends SshCommand {
private void handleReviewResultErrors(final ReviewResult result) {
for (ReviewResult.Error resultError : result.getErrors()) {
String errMsg = "error: (change " + result.getChangeId() + ") ";
switch (resultError.getType()) {
case ABANDON_NOT_PERMITTED:
errMsg += "not permitted to abandon change";
break;
case RESTORE_NOT_PERMITTED:
errMsg += "not permitted to restore change";
break;
case SUBMIT_NOT_PERMITTED:
errMsg += "not permitted to submit change";
break;
case SUBMIT_NOT_READY:
errMsg += "approvals or dependencies lacking";
break;
case CHANGE_IS_CLOSED:
errMsg += "change is closed";
break;
case CHANGE_NOT_ABANDONED:
errMsg += "change is not abandoned";
break;
case PUBLISH_NOT_PERMITTED:
errMsg += "not permitted to publish change";
break;
case DELETE_NOT_PERMITTED:
errMsg += "not permitted to delete change/patch set";
break;
case RULE_ERROR:
errMsg += "rule error";
break;
case NOT_A_DRAFT:
errMsg += "change/patch set is not a draft";
break;
case GIT_ERROR:
errMsg += "error writing change to git repository";
break;
case DEST_BRANCH_NOT_FOUND:
errMsg += "destination branch not found";
break;
default:
errMsg += "failure in review";
}
errMsg += parseError(resultError.getType());
if (resultError.getMessage() != null) {
errMsg += ": " + resultError.getMessage();
}
@@ -285,6 +257,37 @@ public class ReviewCommand extends SshCommand {
}
}
private String parseError(Type type) {
switch (type) {
case ABANDON_NOT_PERMITTED:
return "not permitted to abandon change";
case RESTORE_NOT_PERMITTED:
return "not permitted to restore change";
case SUBMIT_NOT_PERMITTED:
return "not permitted to submit change";
case SUBMIT_NOT_READY:
return "approvals or dependencies lacking";
case CHANGE_IS_CLOSED:
return "change is closed";
case CHANGE_NOT_ABANDONED:
return "change is not abandoned";
case PUBLISH_NOT_PERMITTED:
return "not permitted to publish change";
case DELETE_NOT_PERMITTED:
return "not permitted to delete change/patch set";
case RULE_ERROR:
return "rule error";
case NOT_A_DRAFT:
return "change/patch set is not a draft";
case GIT_ERROR:
return "error writing change to git repository";
case DEST_BRANCH_NOT_FOUND:
return "destination branch not found";
default:
return "failure in review";
}
}
private Set<PatchSet.Id> parsePatchSetId(final String patchIdentity)
throws UnloggedFailure, OrmException {
// By commit?