Add ready property to ReviewResult
This is particularly needed for transitioning PolyGerrit to use this new
API. We can use this property to determine immediately upon receiving a
response to posting a review whether we need to fall back to a second
API call to start review.
Bug: Issue 6760
Change-Id: Ib0ef5f5a0d454de4cd4b9496ab1cf81dba729a99
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 8e9d498..8b4e529 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -6737,6 +6737,9 @@
link:rest-api-changes.html#add-reviewer-result[AddReviewerResult]
representing the outcome of adding as a reviewer.
Absent if no reviewer additions were requested.
+|`ready` |optional|
+If true, the change was moved from WIP to ready for review as a result of this
+action. Not set if false.
|============================
[[reviewer-info]]
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
index ee23586..4dc8e51 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -510,7 +510,8 @@
assertThat(r.getChange().change().isWorkInProgress()).isTrue();
ReviewInput in = ReviewInput.noScore().setWorkInProgress(false);
- gApi.changes().id(r.getChangeId()).revision("current").review(in);
+ ReviewResult result = gApi.changes().id(r.getChangeId()).revision("current").review(in);
+ assertThat(result.ready).isTrue();
ChangeInfo info = gApi.changes().id(r.getChangeId()).get();
assertThat(info.workInProgress).isNull();
@@ -523,7 +524,8 @@
assertThat(r.getChange().change().isWorkInProgress()).isFalse();
ReviewInput in = ReviewInput.noScore().setWorkInProgress(true);
- gApi.changes().id(r.getChangeId()).revision("current").review(in);
+ ReviewResult result = gApi.changes().id(r.getChangeId()).revision("current").review(in);
+ assertThat(result.ready).isNull();
ChangeInfo info = gApi.changes().id(r.getChangeId()).get();
assertThat(info.workInProgress).isTrue();
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewResult.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewResult.java
index 761f260..ff88bbe 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewResult.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewResult.java
@@ -31,6 +31,11 @@
*/
@Nullable public Map<String, AddReviewerResult> reviewers;
+ /**
+ * Boolean indicating whether the change was moved out of WIP by this review. Either true or null.
+ */
+ @Nullable public Boolean ready;
+
/** Error message for non-200 responses. */
@Nullable public String error;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
index 147654d..4efede5 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
@@ -330,6 +330,10 @@
output.error = ERROR_ONLY_OWNER_CAN_MODIFY_WORK_IN_PROGRESS;
return Response.withStatusCode(SC_BAD_REQUEST, output);
}
+ if (input.ready) {
+ output.ready = true;
+ }
+
// Suppress notifications in WorkInProgressOp, we'll take care of
// them in this endpoint.
WorkInProgressOp.Input wipIn = new WorkInProgressOp.Input();