diff options
Diffstat (limited to 'java')
9 files changed, 82 insertions, 4 deletions
diff --git a/java/com/google/gerrit/common/PageLinks.java b/java/com/google/gerrit/common/PageLinks.java index 38de5b15a1..98dd697374 100644 --- a/java/com/google/gerrit/common/PageLinks.java +++ b/java/com/google/gerrit/common/PageLinks.java @@ -141,6 +141,9 @@ public class PageLinks { public static String topicQuery(Status status, String topic) { switch (status) { case ABANDONED: + case DEFERRED: + case INTEGRATING: + case STAGED: return toChangeQuery(status(status) + " " + op("topic", topic)); case MERGED: case NEW: @@ -168,6 +171,12 @@ public class PageLinks { return "status:abandoned"; case MERGED: return "status:merged"; + case INTEGRATING: + return "status:integrating"; + case DEFERRED: + return "status:deferred"; + case STAGED: + return "status:staged"; case NEW: default: return "status:open"; diff --git a/java/com/google/gerrit/entities/Change.java b/java/com/google/gerrit/entities/Change.java index d1826bc6df..9157b5906a 100644 --- a/java/com/google/gerrit/entities/Change.java +++ b/java/com/google/gerrit/entities/Change.java @@ -322,9 +322,16 @@ public final class Change { private static final char MIN_OPEN = 'a'; /** Database constant for {@link Status#NEW}. */ public static final char STATUS_NEW = 'n'; + /** Maximum database status constant for an open change. */ private static final char MAX_OPEN = 'z'; + /** Database constant for {@link Status#STAGED}. */ + public static final char STATUS_STAGED = 'R'; + + /** Database constant for {@link Status#INTEGRATING}. */ + public static final char STATUS_INTEGRATING = 'I'; + /** Database constant for {@link Status#MERGED}. */ public static final char STATUS_MERGED = 'M'; @@ -358,6 +365,9 @@ public final class Change { */ NEW(STATUS_NEW, ChangeStatus.NEW), + STAGED(STATUS_STAGED, ChangeStatus.STAGED), + INTEGRATING(STATUS_INTEGRATING, ChangeStatus.INTEGRATING), + /** * Change is closed, and submitted to its destination branch. * @@ -372,7 +382,9 @@ public final class Change { * patch set, and it cannot be merged. Draft comments however may be published, permitting * reviewers to send constructive feedback. */ - ABANDONED('A', ChangeStatus.ABANDONED); + ABANDONED('A', ChangeStatus.ABANDONED), + + DEFERRED('D', ChangeStatus.DEFERRED); static { boolean ok = true; @@ -683,8 +695,20 @@ public final class Change { return getStatus().equals(Status.ABANDONED); } + public boolean isIntegrating() { + return getStatus().equals(Status.INTEGRATING); + } + + public boolean isStaged() { + return getStatus().equals(Status.STAGED); + } + + public boolean isDeferred() { + return getStatus().equals(Status.DEFERRED); + } + public boolean isClosed() { - return isAbandoned() || isMerged(); + return isAbandoned() || isMerged() || isStaged() || isIntegrating() || isDeferred(); } public String getTopic() { diff --git a/java/com/google/gerrit/entities/Permission.java b/java/com/google/gerrit/entities/Permission.java index 95164bdee5..ab583422b0 100644 --- a/java/com/google/gerrit/entities/Permission.java +++ b/java/com/google/gerrit/entities/Permission.java @@ -54,6 +54,7 @@ public abstract class Permission implements Comparable<Permission> { public static final String SUBMIT_AS = "submitAs"; public static final String TOGGLE_WORK_IN_PROGRESS_STATE = "toggleWipState"; public static final String VIEW_PRIVATE_CHANGES = "viewPrivateChanges"; + public static final String QT_STAGE = "stage"; public static final boolean DEF_EXCLUSIVE_GROUP = false; @@ -90,6 +91,7 @@ public abstract class Permission implements Comparable<Permission> { NAMES_LC.add(SUBMIT_AS.toLowerCase()); NAMES_LC.add(TOGGLE_WORK_IN_PROGRESS_STATE.toLowerCase()); NAMES_LC.add(VIEW_PRIVATE_CHANGES.toLowerCase()); + NAMES_LC.add(QT_STAGE.toLowerCase()); LABEL_INDEX = NAMES_LC.indexOf(Permission.LABEL); LABEL_AS_INDEX = NAMES_LC.indexOf(Permission.LABEL_AS.toLowerCase()); diff --git a/java/com/google/gerrit/extensions/client/ChangeStatus.java b/java/com/google/gerrit/extensions/client/ChangeStatus.java index 83d5bd2cc7..89cdf5d468 100644 --- a/java/com/google/gerrit/extensions/client/ChangeStatus.java +++ b/java/com/google/gerrit/extensions/client/ChangeStatus.java @@ -34,6 +34,22 @@ public enum ChangeStatus { NEW, /** + * Change is staged and waiting for CI to start a build of it. + * + * <p> While a change is staged, it cannot be further modified by adding a replacement patch + * set. + */ + STAGED, + + /** + * Change is integrating in a build on a CI system. + * + * <p> While a change is integrating, it cannot be further modified by adding a replacement patch + * set. + */ + INTEGRATING, + + /** * Change is closed, and submitted to its destination branch. * * <p>Once a change has been merged, it cannot be further modified by adding a replacement patch @@ -54,5 +70,21 @@ public enum ChangeStatus { * <li>{@link #NEW} - when the Restore action is used. * </ul> */ - ABANDONED + ABANDONED, + + /** + * Change is closed, but was not submitted to its destination branch. Deferred is similar + * to abandoned, the difference is that the change is expected to be reopened later. + * + * <p>Once a change has been deferred, it cannot be further modified by adding a replacement + * patch set, and it cannot be merged. Draft comments however may be published, permitting + * reviewers to send constructive feedback. + * + * <p>Changes in the DEFERRED state can be moved to: + * + * <ul> + * <li>{@link #NEW} - when the Reopen action is used. + * </ul> + */ + DEFERRED } diff --git a/java/com/google/gerrit/server/notedb/ChangeUpdate.java b/java/com/google/gerrit/server/notedb/ChangeUpdate.java index cc9b1934c4..8a9fba1c74 100644 --- a/java/com/google/gerrit/server/notedb/ChangeUpdate.java +++ b/java/com/google/gerrit/server/notedb/ChangeUpdate.java @@ -675,6 +675,9 @@ public class ChangeUpdate extends AbstractChangeUpdate { if (status.equals(Change.Status.ABANDONED)) { clearAttentionSet("Change was abandoned"); } + if (status.equals(Change.Status.DEFERRED)) { + clearAttentionSet("Change was deferred"); + } if (status.equals(Change.Status.MERGED)) { clearAttentionSet("Change was submitted"); } diff --git a/java/com/google/gerrit/server/permissions/ChangeControl.java b/java/com/google/gerrit/server/permissions/ChangeControl.java index 37c773ac31..0987b8d9a2 100644 --- a/java/com/google/gerrit/server/permissions/ChangeControl.java +++ b/java/com/google/gerrit/server/permissions/ChangeControl.java @@ -282,6 +282,8 @@ class ChangeControl { case REMOVE_REVIEWER: case SUBMIT_AS: return refControl.canPerform(changePermissionName(perm)); + case QT_STAGE: + return refControl.canPerform(Permission.QT_STAGE); } } catch (StorageException e) { throw new PermissionBackendException("unavailable", e); diff --git a/java/com/google/gerrit/server/permissions/ChangePermission.java b/java/com/google/gerrit/server/permissions/ChangePermission.java index 63b03787b2..0241e38679 100644 --- a/java/com/google/gerrit/server/permissions/ChangePermission.java +++ b/java/com/google/gerrit/server/permissions/ChangePermission.java @@ -57,7 +57,8 @@ public enum ChangePermission implements ChangePermissionOrLabel { REVERT, SUBMIT, SUBMIT_AS("submit on behalf of other users"), - TOGGLE_WORK_IN_PROGRESS_STATE; + TOGGLE_WORK_IN_PROGRESS_STATE, + QT_STAGE("stage change for CI"); private final String description; diff --git a/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java b/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java index 9d69d9bad6..3ab68d73fd 100644 --- a/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java +++ b/java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java @@ -102,6 +102,7 @@ public class DefaultPermissionMappings { .put( ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE, Permission.TOGGLE_WORK_IN_PROGRESS_STATE) + .put(ChangePermission.QT_STAGE, Permission.QT_STAGE) .build(); private static <T extends Enum<T>> void checkMapContainsAllEnumValues( diff --git a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java index c8e9f662a1..4d47884a90 100644 --- a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java +++ b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java @@ -152,6 +152,10 @@ public class InternalChangeQuery extends InternalQuery<ChangeData, InternalChang return query(and(ref(branch), project(branch.project()), status(Change.Status.NEW))); } + public List<ChangeData> byBranchStatus(BranchNameKey branch, Change.Status status) { + return query(and(ref(branch), project(branch.project()), status(status))); + } + public Iterable<ChangeData> byCommitsOnBranchNotMerged( Repository repo, BranchNameKey branch, Collection<String> hashes) throws IOException { return byCommitsOnBranchNotMerged( |