summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Kempin <edwin.kempin@sap.com>2012-05-09 21:09:55 +0200
committerSasa Zivkov <sasa.zivkov@sap.com>2012-05-23 13:00:07 +0200
commit94313bca2843539e9601cf53ddfdc76edef7d080 (patch)
tree31339dd61398524fdf9c3d2e8b18cd2f3c99b025
parentc4fd43d00f370aac5be4a9bd718baa8902717eaf (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>
-rw-r--r--Documentation/access-control.txt15
-rw-r--r--gerrit-common/src/main/java/com/google/gerrit/common/data/Permission.java2
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties2
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java3
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java6
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)) {