Close the change request
Closes the open changeset without publishing it: every op is recorded as rejected, and nothing is served that was not served before.
POST /context/v1/changeset/close
Closes the open changeset without publishing it: every op is recorded as rejected, and nothing is served that was not served before. Set carry_over to keep the rejections you made and move the ops nobody decided to a new changeset on the same release, which is allowed only when nothing is approved and at least one op is rejected. A closed changeset stays in the history. Needs the review scope.
Requires the context:review scope.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
carry_over | boolean | no | Keep the rejections as decided and move every undecided op to a new changeset opened on the same release, instead of rejecting everything. Allowed only when nothing is approved and at least one op is rejected. |
expected_revision | integer or null | no | The changeset revision you looked at. When it has moved the call is a 409. |
provenance | object or null | no | Who closed it and why, for the revision journal. Omit to have it filled in from the key. |
Responses
| Status | Meaning |
|---|---|
200 | The request succeeded. |
401 | The token is missing, expired or invalid. |
403 | The token does not carry the scope this operation requires. |
404 | No such project, or the token belongs to a different project. |
The 200 response body:
| Field | Type | Required | Description |
|---|---|---|---|
base_release | integer | yes | The release the changeset was opened against. Send it back when staging. |
base_repository_revision | string | yes | A fingerprint of the repository state the changeset was opened against. |
changeset_id | string | yes | The changeset's id. |
decision_summary | DecisionSummary | yes | How many ops have been decided. |
invalidated_by_release | integer or null | no | The release that made this changeset impossible to merge, if one did. |
merge_claimed_at | string or null | no | When a publication claimed the changeset, while one is in progress. |
next_seq | integer | yes | The position the next staged op will take. |
opened_at | string | yes | When the changeset was opened. |
opened_by | object | yes | Who opened it and why. |
ops | array of ChangesetOp | yes | Every op staged so far, in order. |
project_id | string | yes | The project the changeset belongs to. |
published_release | integer or null | no | The release it produced, once published. |
revision | integer | yes | The changeset's revision. It changes every time the changeset does; send it back when staging. |
settled_at | string or null | no | When it was published or abandoned. |
settled_by | object or null | no | Who settled it. |
status | string | yes | Whether the changeset is open or how it was settled. |
superseded_op_ids | array of string | yes | Ops that a later op overwrote. |
Shapes
The named shapes used above.
DecisionSummary
How many ops review has decided.
| Field | Type | Required | Description |
|---|---|---|---|
approved | integer | yes | Ops approved. |
rejected | integer | yes | Ops rejected. |
undecided | integer | yes | Ops still waiting for a decision. |
ChangesetOp
One staged op and what has been decided about it.
| Field | Type | Required | Description |
|---|---|---|---|
carried_from | string or null | no | The changeset the op was carried over from, if it was. |
carried_to | string or null | no | The changeset the op was carried over to, if it was. |
cascaded_from | string or null | no | The op whose rejection caused this one to be rejected, if any. |
conflict | string or null | no | Why the op cannot merge as it stands, when something it depends on has moved; null otherwise. |
decided_at | string or null | no | When it was decided. |
decided_by | object or null | no | Who decided and why, once someone has; null while the op is undecided. |
decision | string | yes | Where review stands: undecided, approved or rejected. |
decision_history | array of object | yes | Every decision made about the op, oldest first. |
op | object | yes | The op as it was sent; its op field names the kind. GET changeset leaves out an upsert's content and the value of a patch's edit, which GET changeset/ops returns. |
op_id | string | yes | The id the service assigned when the op was staged. Use it to remove the op. |
reason | string or null | no | The reason given for a rejection. |
review_key | string | yes | Groups the ops a reviewer decides together. |
seq | integer | yes | The op's position in the changeset, in staging order. |
staged_at | string | yes | When the op was staged. |
staged_by | object | yes | Who staged it and why. |
status | string | yes | The op's state in the changeset. |
Example
A request body (ids and values are placeholders), saved as body.json:
{
"expected_revision": 3
}curl -sS -X POST "$API_URL/context/v1/changeset/close" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d @body.jsonGet the open changeset
Returns the project's open changeset without the bodies of its ops: its status, the ops staged in it (what each acts on, who staged it and how review has decided it), and the ops grouped into the uni…
Decide every undecided op
Approves or rejects every op that has no decision yet, in one call, and never touches one already decided.