Merge "Create "Revert" permission" into stable-3.2
This commit is contained in:
@@ -117,6 +117,12 @@ class ChangeControl {
|
||||
return canAbandon() && refControl.asForRef().testOrFalse(RefPermission.CREATE_CHANGE);
|
||||
}
|
||||
|
||||
/** Can this user revert this change? */
|
||||
private boolean canRevert() {
|
||||
return (refControl.canRevert())
|
||||
&& refControl.asForRef().testOrFalse(RefPermission.CREATE_CHANGE);
|
||||
}
|
||||
|
||||
/** The range of permitted values associated with a label permission. */
|
||||
private PermissionRange getRange(String permission) {
|
||||
return refControl.getRange(permission, isOwner());
|
||||
@@ -303,6 +309,8 @@ class ChangeControl {
|
||||
return canRebase();
|
||||
case RESTORE:
|
||||
return canRestore();
|
||||
case REVERT:
|
||||
return canRevert();
|
||||
case SUBMIT:
|
||||
return refControl.canSubmit(isOwner());
|
||||
case TOGGLE_WORK_IN_PROGRESS_STATE:
|
||||
|
@@ -54,6 +54,7 @@ public enum ChangePermission implements ChangePermissionOrLabel {
|
||||
* change is not locked by calling {@code PatchSetUtil.isPatchSetLocked}.
|
||||
*/
|
||||
REBASE,
|
||||
REVERT,
|
||||
SUBMIT,
|
||||
SUBMIT_AS("submit on behalf of other users"),
|
||||
TOGGLE_WORK_IN_PROGRESS_STATE;
|
||||
|
@@ -96,6 +96,7 @@ public class DefaultPermissionMappings {
|
||||
.put(ChangePermission.REMOVE_REVIEWER, Permission.REMOVE_REVIEWER)
|
||||
.put(ChangePermission.ADD_PATCH_SET, Permission.ADD_PATCH_SET)
|
||||
.put(ChangePermission.REBASE, Permission.REBASE)
|
||||
.put(ChangePermission.REVERT, Permission.REVERT)
|
||||
.put(ChangePermission.SUBMIT, Permission.SUBMIT)
|
||||
.put(ChangePermission.SUBMIT_AS, Permission.SUBMIT_AS)
|
||||
.put(
|
||||
|
@@ -162,6 +162,10 @@ class RefControl {
|
||||
return projectControl.controlForRef("refs/for/" + refName).canPerform(Permission.PUSH);
|
||||
}
|
||||
|
||||
boolean canRevert() {
|
||||
return canPerform(Permission.REVERT);
|
||||
}
|
||||
|
||||
/** @return true if this user can submit merge patch sets to this ref */
|
||||
private boolean canUploadMerges() {
|
||||
return projectControl.controlForRef("refs/for/" + refName).canPerform(Permission.PUSH_MERGE);
|
||||
|
@@ -15,6 +15,7 @@
|
||||
package com.google.gerrit.server.restapi.change;
|
||||
|
||||
import static com.google.gerrit.extensions.conditions.BooleanCondition.and;
|
||||
import static com.google.gerrit.server.permissions.ChangePermission.REVERT;
|
||||
import static com.google.gerrit.server.permissions.RefPermission.CREATE_CHANGE;
|
||||
import static com.google.gerrit.server.project.ProjectCache.illegalState;
|
||||
|
||||
@@ -94,6 +95,7 @@ public class Revert
|
||||
.get(rsrc.getProject())
|
||||
.orElseThrow(illegalState(rsrc.getProject()))
|
||||
.checkStatePermitsWrite();
|
||||
rsrc.permissions().check(REVERT);
|
||||
ChangeNotes notes = rsrc.getNotes();
|
||||
Change.Id changeIdToRevert = notes.getChangeId();
|
||||
PatchSet.Id patchSetId = notes.getChange().currentPatchSetId();
|
||||
@@ -125,10 +127,12 @@ public class Revert
|
||||
.setTitle("Revert the change")
|
||||
.setVisible(
|
||||
and(
|
||||
change.isMerged() && projectStatePermitsWrite,
|
||||
permissionBackend
|
||||
.user(rsrc.getUser())
|
||||
.ref(change.getDest())
|
||||
.testCond(CREATE_CHANGE)));
|
||||
and(
|
||||
change.isMerged() && projectStatePermitsWrite,
|
||||
permissionBackend
|
||||
.user(rsrc.getUser())
|
||||
.ref(change.getDest())
|
||||
.testCond(CREATE_CHANGE)),
|
||||
permissionBackend.user(rsrc.getUser()).change(rsrc.getNotes()).testCond(REVERT)));
|
||||
}
|
||||
}
|
||||
|
@@ -16,6 +16,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.ChangePermission.REVERT;
|
||||
import static com.google.gerrit.server.permissions.RefPermission.CREATE_CHANGE;
|
||||
import static com.google.gerrit.server.project.ProjectCache.illegalState;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
@@ -224,6 +225,7 @@ public class RevertSubmission
|
||||
|
||||
contributorAgreements.check(change.getProject(), changeResource.getUser());
|
||||
permissionBackend.currentUser().ref(change.getDest()).check(CREATE_CHANGE);
|
||||
permissionBackend.currentUser().change(changeData).check(REVERT);
|
||||
permissionBackend.currentUser().change(changeData).check(ChangePermission.READ);
|
||||
projectCache
|
||||
.get(change.getProject())
|
||||
@@ -518,14 +520,16 @@ public class RevertSubmission
|
||||
"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)));
|
||||
and(
|
||||
change.isMerged()
|
||||
&& change.getSubmissionId() != null
|
||||
&& isChangePartOfSubmission(change.getSubmissionId())
|
||||
&& projectStatePermitsWrite,
|
||||
permissionBackend
|
||||
.user(rsrc.getUser())
|
||||
.ref(change.getDest())
|
||||
.testCond(CREATE_CHANGE)),
|
||||
permissionBackend.user(rsrc.getUser()).change(rsrc.getNotes()).testCond(REVERT)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -178,6 +178,7 @@ public class AllProjectsCreator {
|
||||
grant(config, refsFor, Permission.ADD_PATCH_SET, registered);
|
||||
grant(config, heads, codeReviewLabel, -1, 1, registered);
|
||||
grant(config, heads, Permission.FORGE_AUTHOR, registered);
|
||||
grant(config, heads, Permission.REVERT, registered);
|
||||
grant(config, magic, Permission.PUSH, registered);
|
||||
grant(config, magic, Permission.PUSH_MERGE, registered);
|
||||
}
|
||||
|
@@ -75,6 +75,7 @@ public class AllProjectsCreatorTestUtil {
|
||||
" push = group Project Owners",
|
||||
" submit = group Administrators",
|
||||
" submit = group Project Owners",
|
||||
" revert = group Registered Users",
|
||||
"[access \"refs/meta/config\"]",
|
||||
" exclusiveGroupPermissions = read",
|
||||
" create = group Administrators",
|
||||
|
Reference in New Issue
Block a user