diff options
author | Edwin Kempin <edwin.kempin@sap.com> | 2012-05-09 21:09:55 +0200 |
---|---|---|
committer | Sasa Zivkov <sasa.zivkov@sap.com> | 2012-05-23 13:00:07 +0200 |
commit | 94313bca2843539e9601cf53ddfdc76edef7d080 (patch) | |
tree | 31339dd61398524fdf9c3d2e8b18cd2f3c99b025 | |
parent | c4fd43d00f370aac5be4a9bd718baa8902717eaf (diff) |
Add a new permission to permit rebasing changes in the web UI
So far only the change owner and submitters are permitted to rebase a
change in the web UI by pushing the 'Rebase Change' button. This change
introduces a new access right that can be assigned to other users to
permit them to do the rebase in the web UI as well.
Change-Id: I21e9981bd685f1d69e792abbd7eeaf1a60d039b8
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
5 files changed, 27 insertions, 1 deletions
diff --git a/Documentation/access-control.txt b/Documentation/access-control.txt index d2078ab92e..8d89fa2fe2 100644 --- a/Documentation/access-control.txt +++ b/Documentation/access-control.txt @@ -697,6 +697,21 @@ be suitable in a corporate deployment if the HTTP access control is already restricted to the correct set of users. +[[category_rebase]] +Rebase +~~~~~~ + +This category permits users to rebase changes via the web UI by pushing +the `Rebase Change` button. + +The change owner and submitters can always rebase changes in the web UI +(even without having the `Rebase` access right assigned). + +Users without this access right who are able to upload new patch sets +can still do the rebase locally and upload the rebased commit as a new +patch set. + + [[category_submit]] Submit ~~~~~~ diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/Permission.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/Permission.java index f818d7b065..20261de496 100644 --- a/gerrit-common/src/main/java/com/google/gerrit/common/data/Permission.java +++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/Permission.java @@ -30,6 +30,7 @@ public class Permission implements Comparable<Permission> { public static final String PUSH_MERGE = "pushMerge"; public static final String PUSH_TAG = "pushTag"; public static final String READ = "read"; + public static final String REBASE = "rebase"; public static final String SUBMIT = "submit"; private static final List<String> NAMES_LC; @@ -47,6 +48,7 @@ public class Permission implements Comparable<Permission> { NAMES_LC.add(PUSH_MERGE.toLowerCase()); NAMES_LC.add(PUSH_TAG.toLowerCase()); NAMES_LC.add(LABEL.toLowerCase()); + NAMES_LC.add(REBASE.toLowerCase()); NAMES_LC.add(SUBMIT.toLowerCase()); labelIndex = NAMES_LC.indexOf(Permission.LABEL); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties index 389ed2c0c3..ef7b73dd9b 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties @@ -100,6 +100,7 @@ permissionNames = \ pushMerge, \ pushTag, \ read, \ + rebase, \ submit create = Create Reference forgeAuthor = Forge Author Identity @@ -110,6 +111,7 @@ push = Push pushMerge = Push Merge Commit pushTag = Push Annotated Tag read = Read +rebase = Rebase submit = Submit refErrorEmpty = Reference must be supplied diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java index 53301b9ca0..d17762ee15 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java @@ -201,7 +201,8 @@ public class ChangeControl { /** Can this user rebase this change? */ public boolean canRebase() { - return isOwner() || getRefControl().canSubmit(); + return isOwner() || getRefControl().canSubmit() + || getRefControl().canRebase(); } /** Can this user restore this change? */ diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java index a8656034c2..db370e0727 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java @@ -125,6 +125,12 @@ public class RefControl { && canWrite(); } + /** @return true if this user can rebase changes on this ref */ + public boolean canRebase() { + return canPerform(Permission.REBASE) + && canWrite(); + } + /** @return true if this user can submit patch sets to this ref */ public boolean canSubmit() { if (GitRepositoryManager.REF_CONFIG.equals(refName)) { |