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:
		| @@ -40,7 +40,7 @@ public class Abandon implements RestModifyView<ChangeResource, Input> { | |||||||
|   private final ChangeJson json; |   private final ChangeJson json; | ||||||
|  |  | ||||||
|   public static class Input { |   public static class Input { | ||||||
|     String message; |     public String message; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Inject |   @Inject | ||||||
|   | |||||||
| @@ -17,19 +17,23 @@ package com.google.gerrit.sshd.commands; | |||||||
| import com.google.gerrit.common.data.ApprovalType; | import com.google.gerrit.common.data.ApprovalType; | ||||||
| import com.google.gerrit.common.data.ApprovalTypes; | import com.google.gerrit.common.data.ApprovalTypes; | ||||||
| import com.google.gerrit.common.data.ReviewResult; | 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.ApprovalCategory; | ||||||
| import com.google.gerrit.reviewdb.client.ApprovalCategoryValue; | import com.google.gerrit.reviewdb.client.ApprovalCategoryValue; | ||||||
| import com.google.gerrit.reviewdb.client.Change; | import com.google.gerrit.reviewdb.client.Change; | ||||||
| import com.google.gerrit.reviewdb.client.PatchSet; | import com.google.gerrit.reviewdb.client.PatchSet; | ||||||
| import com.google.gerrit.reviewdb.client.RevId; | import com.google.gerrit.reviewdb.client.RevId; | ||||||
| import com.google.gerrit.reviewdb.server.ReviewDb; | 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.DeleteDraftPatchSet; | ||||||
| import com.google.gerrit.server.changedetail.PublishDraft; | import com.google.gerrit.server.changedetail.PublishDraft; | ||||||
| import com.google.gerrit.server.changedetail.RestoreChange; | import com.google.gerrit.server.changedetail.RestoreChange; | ||||||
| import com.google.gerrit.server.changedetail.Submit; | 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.patch.PublishComments; | ||||||
|  | import com.google.gerrit.server.project.ChangeControl; | ||||||
| import com.google.gerrit.server.project.InvalidChangeOperationException; | import com.google.gerrit.server.project.InvalidChangeOperationException; | ||||||
| import com.google.gerrit.server.project.NoSuchChangeException; | import com.google.gerrit.server.project.NoSuchChangeException; | ||||||
| import com.google.gerrit.server.project.ProjectControl; | 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.Inject; | ||||||
| import com.google.inject.Provider; | import com.google.inject.Provider; | ||||||
|  |  | ||||||
| import org.eclipse.jgit.errors.RepositoryNotFoundException; |  | ||||||
| import org.kohsuke.args4j.Argument; | import org.kohsuke.args4j.Argument; | ||||||
| import org.kohsuke.args4j.Option; | import org.kohsuke.args4j.Option; | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| @@ -115,7 +118,10 @@ public class ReviewCommand extends SshCommand { | |||||||
|   private DeleteDraftPatchSet.Factory deleteDraftPatchSetFactory; |   private DeleteDraftPatchSet.Factory deleteDraftPatchSetFactory; | ||||||
|  |  | ||||||
|   @Inject |   @Inject | ||||||
|   private Provider<AbandonChange> abandonChangeProvider; |   private ChangeControl.Factory changeControlFactory; | ||||||
|  |  | ||||||
|  |   @Inject | ||||||
|  |   private Provider<Abandon> abandonProvider; | ||||||
|  |  | ||||||
|   @Inject |   @Inject | ||||||
|   private PublishComments.Factory publishCommentsFactory; |   private PublishComments.Factory publishCommentsFactory; | ||||||
| @@ -183,9 +189,7 @@ public class ReviewCommand extends SshCommand { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private void approveOne(final PatchSet.Id patchSetId) |   private void approveOne(final PatchSet.Id patchSetId) throws Exception { | ||||||
|       throws NoSuchChangeException, OrmException, EmailException, Failure, |  | ||||||
|       RepositoryNotFoundException, IOException { |  | ||||||
|  |  | ||||||
|     if (changeComment == null) { |     if (changeComment == null) { | ||||||
|       changeComment = ""; |       changeComment = ""; | ||||||
| @@ -203,11 +207,18 @@ public class ReviewCommand extends SshCommand { | |||||||
|       publishCommentsFactory.create(patchSetId, changeComment, aps, forceMessage).call(); |       publishCommentsFactory.create(patchSetId, changeComment, aps, forceMessage).call(); | ||||||
|  |  | ||||||
|       if (abandonChange) { |       if (abandonChange) { | ||||||
|         final AbandonChange abandonChange = abandonChangeProvider.get(); |         final Abandon abandon = abandonProvider.get(); | ||||||
|         abandonChange.setChangeId(patchSetId.getParentKey()); |         final Abandon.Input input = new Abandon.Input(); | ||||||
|         abandonChange.setMessage(changeComment); |         input.message = changeComment; | ||||||
|         final ReviewResult result = abandonChange.call(); |         ChangeControl ctl = | ||||||
|         handleReviewResultErrors(result); |             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) { |       } else if (restoreChange) { | ||||||
|         final RestoreChange restoreChange = restoreChangeProvider.get(); |         final RestoreChange restoreChange = restoreChangeProvider.get(); | ||||||
|         restoreChange.setChangeId(patchSetId.getParentKey()); |         restoreChange.setChangeId(patchSetId.getParentKey()); | ||||||
| @@ -238,46 +249,7 @@ public class ReviewCommand extends SshCommand { | |||||||
|   private void handleReviewResultErrors(final ReviewResult result) { |   private void handleReviewResultErrors(final ReviewResult result) { | ||||||
|     for (ReviewResult.Error resultError : result.getErrors()) { |     for (ReviewResult.Error resultError : result.getErrors()) { | ||||||
|       String errMsg = "error: (change " + result.getChangeId() + ") "; |       String errMsg = "error: (change " + result.getChangeId() + ") "; | ||||||
|       switch (resultError.getType()) { |       errMsg += parseError(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"; |  | ||||||
|       } |  | ||||||
|       if (resultError.getMessage() != null) { |       if (resultError.getMessage() != null) { | ||||||
|         errMsg += ": " + resultError.getMessage(); |         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) |   private Set<PatchSet.Id> parsePatchSetId(final String patchIdentity) | ||||||
|       throws UnloggedFailure, OrmException { |       throws UnloggedFailure, OrmException { | ||||||
|     // By commit? |     // By commit? | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Brad Larson
					Brad Larson