diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt index 59c63cdc01..e28332c017 100644 --- a/Documentation/rest-api-changes.txt +++ b/Documentation/rest-api-changes.txt @@ -4474,6 +4474,9 @@ Not set for merged changes. |`mergeable` |optional| Whether the change is mergeable. + Not set for merged changes, or if the change has not yet been tested. +|`submittable` |optional| +Whether the change has been approved by the project submit rules. + +Provided only by link:#submitted-together[submitted_together]. |`insertions` || Number of inserted lines. |`deletions` || diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index 49c248ff1e..a8e33ba68e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -481,9 +481,6 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { } protected void assertSubmittable(String changeId) throws Exception { - assertThat(gApi.changes().id(changeId).info().submittable) - .named("submit bit on ChangeInfo") - .isEqualTo(true); RevisionResource rsrc = parseCurrentRevisionResource(changeId); UiAction.Description desc = submitHandler.getDescription(rsrc); assertThat(desc.isVisible()).named("visible bit on submit action").isTrue(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java index e3a56b6870..92965f8fb0 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeJson.java @@ -169,6 +169,7 @@ public class ChangeJson { private final ChangeKindCache changeKindCache; private AccountLoader accountLoader; + private boolean includeSubmittable; private Map> submitRecords; private FixInput fix; @@ -222,6 +223,11 @@ public class ChangeJson { : EnumSet.copyOf(options); } + public ChangeJson includeSubmittable(boolean include) { + includeSubmittable = include; + return this; + } + public ChangeJson fix(FixInput fix) { this.fix = fix; return this; @@ -421,14 +427,16 @@ public class ChangeJson { out.topic = in.getTopic(); out.hashtags = cd.hashtags(); out.changeId = in.getKey().get(); - if (in.getStatus() != Change.Status.MERGED) { + if (in.getStatus().isOpen()) { SubmitTypeRecord str = cd.submitTypeRecord(); if (str.isOk()) { out.submitType = str.type; } out.mergeable = cd.isMergeable(); + if (includeSubmittable) { + out.submittable = Submit.submittable(cd); + } } - out.submittable = Submit.submittable(cd); Optional changedLines = cd.changedLines(); if (changedLines.isPresent()) { out.insertions = changedLines.get().insertions; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java index 1afe9602dc..351ebf974d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SubmittedTogether.java @@ -126,6 +126,7 @@ public class SubmittedTogether implements RestReadView { info.changes = json.create(EnumSet.of( ListChangesOption.CURRENT_REVISION, ListChangesOption.CURRENT_COMMIT)) + .includeSubmittable(true) .formatChangeDatas(cds); info.nonVisibleChanges = hidden; return info;