From 94313bca2843539e9601cf53ddfdc76edef7d080 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Wed, 9 May 2012 21:09:55 +0200 Subject: 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 --- Documentation/access-control.txt | 15 +++++++++++++++ .../java/com/google/gerrit/common/data/Permission.java | 2 ++ .../google/gerrit/client/admin/AdminConstants.properties | 2 ++ .../com/google/gerrit/server/project/ChangeControl.java | 3 ++- .../java/com/google/gerrit/server/project/RefControl.java | 6 ++++++ 5 files changed, 27 insertions(+), 1 deletion(-) 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 { 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 NAMES_LC; @@ -47,6 +48,7 @@ public class Permission implements Comparable { 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)) { -- cgit v1.2.3