summaryrefslogtreecommitdiffstats
path: root/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google')
-rw-r--r--java/com/google/gerrit/common/PageLinks.java9
-rw-r--r--java/com/google/gerrit/entities/Change.java28
-rw-r--r--java/com/google/gerrit/entities/Permission.java2
-rw-r--r--java/com/google/gerrit/extensions/client/ChangeStatus.java34
-rw-r--r--java/com/google/gerrit/server/notedb/ChangeUpdate.java3
-rw-r--r--java/com/google/gerrit/server/permissions/ChangeControl.java2
-rw-r--r--java/com/google/gerrit/server/permissions/ChangePermission.java3
-rw-r--r--java/com/google/gerrit/server/permissions/DefaultPermissionMappings.java1
-rw-r--r--java/com/google/gerrit/server/query/change/InternalChangeQuery.java4
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(