Revert "Remove Revert Submission button"

This reverts commit fb0c7312fc.

Reason for revert: Frontend expects this information. This should be
reverted until frontend uses an alternative way of getting this information.

Change-Id: Iacbf8db9aec7eb54e555f889ee388fcaead5dd27
This commit is contained in:
Gal Paikin
2020-02-06 10:26:57 +00:00
parent 1a39a22a52
commit 2ac9da1716
2 changed files with 54 additions and 1 deletions

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.server.restapi.change;
import static com.google.common.base.MoreObjects.firstNonNull;
import static com.google.gerrit.extensions.conditions.BooleanCondition.and;
import static com.google.gerrit.server.permissions.RefPermission.CREATE_CHANGE;
import static java.util.Objects.requireNonNull;
@@ -38,6 +39,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.CurrentUser;
@@ -96,7 +98,8 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
public class RevertSubmission implements RestModifyView<ChangeResource, RevertInput> {
public class RevertSubmission
implements RestModifyView<ChangeResource, RevertInput>, UiAction<ChangeResource> {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private final Provider<InternalChangeQuery> queryProvider;
@@ -527,6 +530,40 @@ public class RevertSubmission implements RestModifyView<ChangeResource, RevertIn
potentialCommitToReturn.getName(), changeNotes.getChange().getChangeId()));
}
@Override
public Description getDescription(ChangeResource rsrc) {
Change change = rsrc.getChange();
boolean projectStatePermitsWrite = false;
try {
projectStatePermitsWrite = projectCache.checkedGet(rsrc.getProject()).statePermitsWrite();
} catch (IOException e) {
logger.atSevere().withCause(e).log(
"Failed to check if project state permits write: %s", rsrc.getProject());
}
return new UiAction.Description()
.setLabel("Revert submission")
.setTitle(
"Revert this change and all changes that have been submitted together with this change")
.setVisible(
and(
change.isMerged()
&& change.getSubmissionId() != null
&& isChangePartOfSubmission(change.getSubmissionId())
&& projectStatePermitsWrite,
permissionBackend
.user(rsrc.getUser())
.ref(change.getDest())
.testCond(CREATE_CHANGE)));
}
/**
* @param submissionId the submission id of the change.
* @return True if the submission has more than one change, false otherwise.
*/
private Boolean isChangePartOfSubmission(String submissionId) {
return (queryProvider.get().setLimit(2).bySubmissionId(submissionId).size() > 1);
}
private class CreateCherryPickOp implements BatchUpdateOp {
private final ObjectId revCommitId;
private final String topic;

View File

@@ -78,6 +78,22 @@ public class ActionsIT extends AbstractDaemonTest {
gApi.changes().id(changeId).current().submit();
Map<String, ActionInfo> actions = getChangeActions(changeId);
assertThat(actions).containsKey("revert");
assertThat(actions).doesNotContainKey("revert_submission");
}
@Test
public void changeActionTwoMergedChangesHaveReverts() throws Exception {
String changeId1 = createChangeWithTopic().getChangeId();
String changeId2 = createChangeWithTopic().getChangeId();
gApi.changes().id(changeId1).current().review(ReviewInput.approve());
gApi.changes().id(changeId2).current().review(ReviewInput.approve());
gApi.changes().id(changeId2).current().submit();
Map<String, ActionInfo> actions1 = getChangeActions(changeId1);
assertThat(actions1).containsKey("revert");
assertThat(actions1).containsKey("revert_submission");
Map<String, ActionInfo> actions2 = getChangeActions(changeId2);
assertThat(actions2).containsKey("revert");
assertThat(actions2).containsKey("revert_submission");
}
@Test