Add REST API for /restore

Changes can be restored via REST api.  The web UI now uses this API,
and the ssh command line uses the same backend.

Change-Id: I7a7e8706a52289f87ace5a60ef3bcd6dd2a2dbde
This commit is contained in:
Brad Larson
2012-11-14 18:54:12 -06:00
committed by Shawn O. Pearce
parent aab01c4701
commit 117a39b316
13 changed files with 159 additions and 258 deletions

View File

@@ -33,9 +33,9 @@ import com.google.gerrit.server.change.Abandon;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.change.PostReview;
import com.google.gerrit.server.change.RevisionResource;
import com.google.gerrit.server.change.Restore;
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.project.ChangeControl;
import com.google.gerrit.server.project.InvalidChangeOperationException;
@@ -134,7 +134,7 @@ public class ReviewCommand extends SshCommand {
private PublishDraft.Factory publishDraftFactory;
@Inject
private Provider<RestoreChange> restoreChangeProvider;
private Provider<Restore> restoreProvider;
@Inject
private Submit.Factory submitFactory;
@@ -230,11 +230,16 @@ public class ReviewCommand extends SshCommand {
writeError("error: " + parseError(Type.CHANGE_IS_CLOSED) + "\n");
}
} else if (restoreChange) {
final RestoreChange restoreChange = restoreChangeProvider.get();
restoreChange.setChangeId(patchSetId.getParentKey());
restoreChange.setMessage(changeComment);
final ReviewResult result = restoreChange.call();
handleReviewResultErrors(result);
final Restore restore = restoreProvider.get();
final Restore.Input input = new Restore.Input();
input.message = changeComment;
try {
restore.apply(new ChangeResource(ctl), input);
} catch(AuthException e) {
writeError("error: " + parseError(Type.RESTORE_NOT_PERMITTED) + "\n");
} catch(ResourceConflictException e) {
writeError("error: " + parseError(Type.CHANGE_NOT_ABANDONED) + "\n");
}
}
if (submitChange) {
final ReviewResult result = submitFactory.create(patchSetId).call();