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:
@@ -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?
|
||||
|
Reference in New Issue
Block a user