diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/project/ChangeControl.java | 18 |
1 files changed, 17 insertions, 1 deletions
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 c9652fef87..ce9023df04 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 @@ -166,9 +166,25 @@ public class ChangeControl { && (change.getStatus() != Change.Status.INTEGRATING); } + /** Can this user defer this change? */ + public boolean canDefer() { + if (change.getTopicId() != null) return false; + boolean userCan = isOwner() // owner (aka creator) of the change can defer + || getRefControl().isOwner() // branch owner can defer + || getProjectControl().isOwner() // project owner can defer + || getCurrentUser().isAdministrator() // site administers are god + ; + + // Cannot defer changes that are already processed by the continuous + // integration system. + return userCan + && (change.getStatus() != Change.Status.INTEGRATING); + } + /** Can this user restore this change? */ public boolean canRestore() { - return canAbandon(); // Anyone who can abandon the change can restore it back + // Anyone who can abandon or defer the change can restore it back + return canAbandon() || canDefer(); } /** All value ranges of any allowed label permission. */ |