blob: 8c1fa16e9c696a9725840a7197ec1a6a6d59d51c [file] [log] [blame]
Gerrit Code Review - /changes/ REST API
=======================================
This page describes the change related REST endpoints.
Please also take note of the general information on the
link:rest-api.html[REST API].
[[change-endpoints]]
Change Endpoints
----------------
[[list-changes]]
Query Changes
~~~~~~~~~~~~~
[verse]
'GET /changes/'
Queries changes visible to the caller. The query string must be
provided by the `q` parameter. The `n` parameter can be used to limit
the returned results.
As result a list of link:#change-info[ChangeInfo] entries is returned.
The change output is sorted by the last update time, most recently
updated to oldest updated.
Query for open changes of watched projects:
.Request
----
GET /changes/?q=status:open+is:watched&n=2 HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
{
"kind": "gerritcodereview#change",
"id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
"project": "demo",
"branch": "master",
"change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
"subject": "One change",
"status": "NEW",
"created": "2012-07-17 07:18:30.854000000",
"updated": "2012-07-17 07:19:27.766000000",
"mergeable": true,
"_sortkey": "001e7057000006dc",
"_number": 1756,
"owner": {
"name": "John Doe"
},
},
{
"kind": "gerritcodereview#change",
"id": "demo~master~I09c8041b5867d5b33170316e2abc34b79bbb8501",
"project": "demo",
"branch": "master",
"change_id": "I09c8041b5867d5b33170316e2abc34b79bbb8501",
"subject": "Another change",
"status": "NEW",
"created": "2012-07-17 07:18:30.884000000",
"updated": "2012-07-17 07:18:30.885000000",
"mergeable": true,
"_sortkey": "001e7056000006dd",
"_number": 1757,
"owner": {
"name": "John Doe"
},
"_more_changes": true
}
]
----
If the `n` query parameter is supplied and additional changes exist
that match the query beyond the end, the last change object has a
`_more_changes: true` JSON field set. Callers can resume a query with
the `N` query parameter, supplying the last change's `_sortkey` field
as the value. When going in the reverse direction with the `P` query
parameter a `_more_changes: true` is put in the first change object if
there are results *before* the first change returned.
Clients are allowed to specify more than one query by setting the `q`
parameter multiple times. In this case the result is an array of
arrays, one per query in the same order the queries were given in.
.Query for the 25 most recent open changes of the projects that you watch
****
get::/changes/?q=status:open+is:watched&n=25
****
Query that retrieves changes for a user's dashboard:
.Request
----
GET /changes/?q=is:open+owner:self&q=is:open+reviewer:self+-owner:self&q=is:closed+owner:self+limit:5&o=LABELS HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
[
{
"kind": "gerritcodereview#change",
"id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
"project": "demo",
"branch": "master",
"change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
"subject": "One change",
"status": "NEW",
"created": "2012-07-17 07:18:30.854000000",
"updated": "2012-07-17 07:19:27.766000000",
"mergeable": true,
"_sortkey": "001e7057000006dc",
"_number": 1756,
"owner": {
"name": "John Doe"
},
"labels": {
"Verified": {},
"Code-Review": {}
}
}
],
[],
[]
]
----
.Query the changes for your user dashboard
****
get::/changes/?q=is:open+owner:self&q=is:open+reviewer:self+-owner:self&q=is:closed+owner:self+limit:5&o=LABELS
****
Additional fields can be obtained by adding `o` parameters, each
option requires more database lookups and slows down the query
response time to the client so they are generally disabled by
default. Optional fields are:
[[labels]]
--
* `LABELS`: a summary of each label required for submit, and
approvers that have granted (or rejected) with that label.
--
[[detailed-labels]]
--
* `DETAILED_LABELS`: detailed label information, including numeric
values of all existing approvals, recognized label values, values
permitted to be set by the current user, and reviewers that may be
removed by the current user.
--
[[current-revision]]
--
* `CURRENT_REVISION`: describe the current revision (patch set)
of the change, including the commit SHA-1 and URLs to fetch from.
--
[[all-revisions]]
--
* `ALL_REVISIONS`: describe all revisions, not just current.
--
[[draft_comments]]
--
* `DRAFT_COMMENTS`: include the `has_draft_comments` field for
revisions. Only valid when the `CURRENT_REVISION` or `ALL_REVISIONS`
option is selected.
--
[[current-commit]]
--
* `CURRENT_COMMIT`: parse and output all header fields from the
commit object, including message. Only valid when the
`CURRENT_REVISION` or `ALL_REVISIONS` option is selected.
--
[[all-commits]]
--
* `ALL_COMMITS`: parse and output all header fields from the
output revisions. If only `CURRENT_REVISION` was requested
then only the current revision's commit data will be output.
--
[[current-files]]
--
* `CURRENT_FILES`: list files modified by the commit, including
basic line counts inserted/deleted per file. Only valid when
the `CURRENT_REVISION` or `ALL_REVISIONS` option is selected.
--
[[all-files]]
--
* `ALL_FILES`: list files modified by the commit, including
basic line counts inserted/deleted per file. If only the
`CURRENT_REVISION` was requested then only that commit's
modified files will be output.
--
[[detailed-accounts]]
--
* `DETAILED_ACCOUNTS`: include `_account_id`, `email` and `username`
fields when referencing accounts.
--
[[messages]]
--
* `MESSAGES`: include messages associated with the change.
--
[[actions]]
--
* `CURRENT_ACTIONS`: include information on available actions
for the change and its current revision. The caller must be
authenticated to obtain the available actions.
--
[[reviewed]]
--
* `REVIEWED`: include the `reviewed` field if the caller is
authenticated and has commented on the current revision.
--
.Request
----
GET /changes/?q=97&o=CURRENT_REVISION&o=CURRENT_COMMIT&o=CURRENT_FILES HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
{
"kind": "gerritcodereview#change",
"id": "demo~master~I7ea46d2e2ee5c64c0d807677859cfb7d90b8966a",
"project": "gerrit",
"branch": "master",
"change_id": "I7ea46d2e2ee5c64c0d807677859cfb7d90b8966a",
"subject": "Use an EventBus to manage star icons",
"status": "NEW",
"created": "2012-04-25 00:52:25.580000000",
"updated": "2012-04-25 00:52:25.586000000",
"mergeable": true,
"_sortkey": "001c9bf400000061",
"_number": 97,
"owner": {
"name": "Shawn Pearce"
},
"current_revision": "184ebe53805e102605d11f6b143486d15c23a09c",
"revisions": {
"184ebe53805e102605d11f6b143486d15c23a09c": {
"_number": 1,
"fetch": {
"git": {
"url": "git://localhost/gerrit",
"ref": "refs/changes/97/97/1"
},
"http": {
"url": "http://127.0.0.1:8080/gerrit",
"ref": "refs/changes/97/97/1"
}
},
"commit": {
"parents": [
{
"commit": "1eee2c9d8f352483781e772f35dc586a69ff5646",
"subject": "Migrate contributor agreements to All-Projects."
}
],
"author": {
"name": "Shawn O. Pearce",
"email": "sop@google.com",
"date": "2012-04-24 18:08:08.000000000",
"tz": -420
},
"committer": {
"name": "Shawn O. Pearce",
"email": "sop@google.com",
"date": "2012-04-24 18:08:08.000000000",
"tz": -420
},
"subject": "Use an EventBus to manage star icons",
"message": "Use an EventBus to manage star icons\n\nImage widgets that need to ..."
},
"files": {
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeCache.java": {
"lines_deleted": 8
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDetailCache.java": {
"lines_inserted": 1
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java": {
"lines_inserted": 11,
"lines_deleted": 19
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeTable.java": {
"lines_inserted": 23,
"lines_deleted": 20
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/StarCache.java": {
"status": "D",
"lines_deleted": 139
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/StarredChanges.java": {
"status": "A",
"lines_inserted": 204
},
"gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/Screen.java": {
"lines_deleted": 9
}
}
}
}
}
]
----
[[get-change]]
Get Change
~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]'
Retrieves a change.
Additional fields can be obtained by adding `o` parameters, each
option requires more database lookups and slows down the query
response time to the client so they are generally disabled by
default. Fields are described in link:#list-changes[Query Changes].
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940 HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
[[get-change-detail]]
Get Change Detail
~~~~~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/detail'
Retrieves a change with link:#labels[labels], link:#detailed-labels[
detailed labels], link:#detailed-accounts[detailed accounts], and
link:#messages[messages].
Additional fields can be obtained by adding `o` parameters, each
option requires more database lookups and slows down the query
response time to the client so they are generally disabled by
default. Fields are described in link:#list-changes[Query Changes].
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/detail HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
"labels": {
"Verified": {
"all": [
{
"value": 0,
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
{
"value": 0,
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com",
"username": "jroe"
}
],
"values": {
"-1": "Fails",
" 0": "No score",
"+1": "Verified"
}
},
"Code-Review": {
"recommended": {
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com",
"username": "jroe"
},
"disliked": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
"all": [
{
"value": -1,
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
{
"value": 1,
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com",
"username": "jroe"
}
]
"values": {
"-2": "Do not submit",
"-1": "I would prefer that you didn\u0027t submit this",
" 0": "No score",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
}
}
},
"permitted_labels": {
"Verified": [
"-1",
" 0",
"+1"
],
"Code-Review": [
"-2",
"-1",
" 0",
"+1",
"+2"
]
},
"removable_reviewers": [
{
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
{
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com",
"username": "jroe"
}
],
"messages": [
{
"id": "YH-egE",
"author": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com",
"username": "jdoe"
},
"updated": "2013-03-23 21:34:02.419000000",
"message": "Patch Set 1:\n\nThis is the first message.",
"revision_number": 1
},
{
"id": "WEEdhU",
"author": {
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com",
"username": "jroe"
},
"updated": "2013-03-23 21:36:52.332000000",
"message": "Patch Set 1:\n\nThis is the second message.\n\nWith a line break.",
"revision_number": 1
}
]
}
----
[[get-topic]]
Get Topic
~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/topic'
Retrieves the topic of a change.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
"Documentation"
----
If the change does not have a topic an empty string is returned.
[[set-topic]]
Set Topic
~~~~~~~~~
[verse]
'PUT /changes/link:#change-id[\{change-id\}]/topic'
Sets the topic of a change.
The new topic must be provided in the request body inside a
link:#topic-input[TopicInput] entity.
.Request
----
PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"topic": "Documentation"
}
----
As response the new topic is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
"Documentation"
----
If the topic was deleted the response is "`204 No Content`".
[[delete-topic]]
Delete Topic
~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]/topic'
Deletes the topic of a change.
The request body does not need to include a link:#topic-input[
TopicInput] entity if no review comment is added.
Please note that some proxies prohibit request bodies for DELETE
requests. In this case, if you want to specify a commit message, use
link:#set-topic[PUT] to delete the topic.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[abandon-change]]
Abandon Change
~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/abandon'
Abandons a change.
The request body does not need to include a link:#abandon-input[
AbandonInput] entity if no review comment is added.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/abandon HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the abandoned change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "ABANDONED",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
If the change cannot be abandoned because the change state doesn't
allow abandoning of the change, the response is "`409 Conflict`" and
the error message is contained in the response body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
change is merged
----
[[restore-change]]
Restore Change
~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/restore'
Restores a change.
The request body does not need to include a link:#restore-input[
RestoreInput] entity if no review comment is added.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/restore HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the restored change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
If the change cannot be restored because the change state doesn't
allow restoring the change, the response is "`409 Conflict`" and
the error message is contained in the response body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
change is new
----
[[rebase-change]]
Rebase Change
~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/rebase'
Rebases a change.
.Request
----
POST /changes/myProject~master~I3ea943139cb62e86071996f2480e58bf3eeb9dd2/rebase HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the rebased change. Information about the current patch set
is included.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I3ea943139cb62e86071996f2480e58bf3eeb9dd2",
"project": "myProject",
"branch": "master",
"change_id": "I3ea943139cb62e86071996f2480e58bf3eeb9dd2",
"subject": "Implement Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": false,
"_sortkey": "0024cf9a000012bf",
"_number": 4799,
"owner": {
"name": "John Doe"
},
"current_revision": "27cc4558b5a3d3387dd11ee2df7a117e7e581822",
"revisions": {
"27cc4558b5a3d3387dd11ee2df7a117e7e581822": {
"_number": 2,
"fetch": {
"http": {
"url": "http://gerrit:8080/myProject",
"ref": "refs/changes/99/4799/2"
}
},
"commit": {
"parents": [
{
"commit": "b4003890dadd406d80222bf1ad8aca09a4876b70",
"subject": "Implement Feature A"
}
],
"author": {
"name": "John Doe",
"email": "john.doe@example.com",
"date": "2013-05-07 15:21:27.000000000",
"tz": 120
},
"committer": {
"name": "Gerrit Code Review",
"email": "gerrit-server@example.com",
"date": "2013-05-07 15:35:43.000000000",
"tz": 120
},
"subject": "Implement Feature X",
"message": "Implement Feature X\n\nAdded feature X."
}
}
}
----
If the change cannot be rebased, e.g. due to conflicts, the response is
"`409 Conflict`" and the error message is contained in the response
body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
The change could not be rebased due to a path conflict during merge.
----
[[revert-change]]
Revert Change
~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revert'
Reverts a change.
The request body does not need to include a link:#revert-input[
RevertInput] entity if no review comment is added.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revert HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the reverting change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Revert \"Implementing Feature X\"",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
If the change cannot be reverted because the change state doesn't
allow reverting the change, the response is "`409 Conflict`" and
the error message is contained in the response body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
change is new
----
[[submit-change]]
Submit Change
~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/submit'
Submits a change.
The request body only needs to include a link:#submit-input[
SubmitInput] entity if the request should wait for the merge to
complete.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/submit HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"wait_for_merge": true
}
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the submitted/merged change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "MERGED",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
If the change cannot be submitted because the submit rule doesn't allow
submitting the change, the response is "`409 Conflict`" and the error
message is contained in the response body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
blocked by Verified
----
[[publish-draft-change]]
Publish Draft Change
~~~~~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/publish'
Publishes a draft change.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/publish HTTP/1.0
Content-Type: application/json;charset=UTF-8
----
.Response
----
HTTP/1.1 204 No Content
----
[[delete-draft-change]]
Delete Draft Change
~~~~~~~~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]'
Deletes a draft change.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940 HTTP/1.0
Content-Type: application/json;charset=UTF-8
----
.Response
----
HTTP/1.1 204 No Content
----
[[get-included-in]]
Get Included In
~~~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/in'
Retrieves the branches and tags in which a change is included. As result
an link:#included-in-info[IncludedInInfo] entity is returned.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/in HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#includedininfo",
"branches": [
"master"
],
"tags": []
}
----
[[reviewer-endpoints]]
Reviewer Endpoints
------------------
[[list-reviewers]]
List Reviewers
~~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/reviewers/'
Lists the reviewers of a change.
As result a list of link:#reviewer-info[ReviewerInfo] entries is returned.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
{
"kind": "gerritcodereview#reviewer",
"approvals": {
"Verified": "+1",
"Code-Review": "+2"
},
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
},
{
"kind": "gerritcodereview#reviewer",
"approvals": {
"Verified": " 0",
"Code-Review": "-1"
},
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
]
----
[[suggest-reviewers]]
Suggest Reviewers
~~~~~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/suggest_reviewers?q=J&n=5'
Suggest the reviewers for a given query `q` and result limit `n`. If result
limit is not passed, then the default 10 is used.
As result a list of link:#suggested-reviewer-info[SuggestedReviewerInfo] entries is returned.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/suggest_reviewers?q=J HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
{
"kind": "gerritcodereview#suggestedreviewer",
"account": {
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
},
{
"kind": "gerritcodereview#suggestedreviewer",
"group": {
"id": "4fd581c0657268f2bdcc26699fbf9ddb76e3a279",
"name": "Joiner"
}
}
]
----
[[get-reviewer]]
Get Reviewer
~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/reviewers/link:rest-api-accounts.html#account-id[\{account-id\}]'
Retrieves a reviewer of a change.
As response a link:#reviewer-info[ReviewerInfo] entity is returned that
describes the reviewer.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/john.doe@example.com HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#reviewer",
"approvals": {
"Verified": "+1",
"Code-Review": "+2"
},
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
}
----
[[add-reviewer]]
Add Reviewer
~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/reviewers'
Adds one user or all members of one group as reviewer to the change.
The reviewer to be added to the change must be provided in the request
body as a link:#reviewer-input[ReviewerInput] entity.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"reviewer": "john.doe@example.com"
}
----
As response an link:#add-reviewer-result[AddReviewerResult] entity is
returned that describes the newly added reviewers.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"reviewers": [
{
"kind": "gerritcodereview#reviewer",
"approvals": {
"Verified": " 0",
"Code-Review": " 0"
},
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
}
]
}
----
If a group is specified, adding the group members as reviewers is an
atomic operation. This means if an error is returned, none of the
members are added as reviewer.
If a group with many members is added as reviewer a confirmation may be
required.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"reviewer": "MyProjectVerifiers"
}
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"error": "The group My Group has 15 members. Do you want to add them all as reviewers?",
"confirm": true
}
----
To confirm the addition of the reviewers, resend the request with the
`confirmed` flag being set.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"reviewer": "MyProjectVerifiers",
"confirmed": true
}
----
[[delete-reviewer]]
Delete Reviewer
~~~~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]/reviewers/link:rest-api-accounts.html#account-id[\{account-id\}]'
Deletes a reviewer from a change.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/John%20Doe HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[revision-endpoints]]
Revision Endpoints
------------------
[[get-commit]]
Get Commit
~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/commit'
Retrieves a parsed commit of a revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/commit HTTP/1.0
----
As response a link:#commit-info[CommitInfo] entity is returned that
describes the revision.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#commit",
"parents": [
{
"commit": "1eee2c9d8f352483781e772f35dc586a69ff5646",
"subject": "Migrate contributor agreements to All-Projects."
}
],
"author": {
"name": "Shawn O. Pearce",
"email": "sop@google.com",
"date": "2012-04-24 18:08:08.000000000",
"tz": -420
},
"committer": {
"name": "Shawn O. Pearce",
"email": "sop@google.com",
"date": "2012-04-24 18:08:08.000000000",
"tz": -420
},
"subject": "Use an EventBus to manage star icons",
"message": "Use an EventBus to manage star icons\n\nImage widgets that need to ..."
}
----
[[get-review]]
Get Review
~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/review'
Retrieves a review of a revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/review HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity with
link:#detailed-labels[detailed labels] and link:#detailed-accounts[
detailed accounts] is returned that describes the review of the
revision. The revision for which the review is retrieved is contained
in the `revisions` field. In addition the `current_revision` field is
set if the revision for which the review is retrieved is the current
revision of the change. Please note that the returned labels are always
for the current patch set.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
"project": "myProject",
"branch": "master",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
"subject": "Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
},
"labels": {
"Verified": {
"all": [
{
"value": 0,
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
},
{
"value": 0,
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
],
"values": {
"-1": "Fails",
" 0": "No score",
"+1": "Verified"
}
},
"Code-Review": {
"all": [
{
"value": -1,
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
},
{
"value": 1,
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
]
"values": {
"-2": "Do not submit",
"-1": "I would prefer that you didn\u0027t submit this",
" 0": "No score",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
}
}
},
"permitted_labels": {
"Verified": [
"-1",
" 0",
"+1"
],
"Code-Review": [
"-2",
"-1",
" 0",
"+1",
"+2"
]
},
"removable_reviewers": [
{
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
},
{
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
],
"current_revision": "674ac754f91e64a0efb8087e59a176484bd534d1",
"revisions": {
"674ac754f91e64a0efb8087e59a176484bd534d1": {
"_number": 2,
"fetch": {
"http": {
"url": "http://gerrit/myProject",
"ref": "refs/changes/65/3965/2"
}
}
}
}
----
[[set-review]]
Set Review
~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/review'
Sets a review on a revision.
The review must be provided in the request body as a
link:#review-input[ReviewInput] entity.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/review HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"message": "Some nits need to be fixed.",
"labels": {
"Code-Review": -1
},
"comments": {
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
{
"line": 23,
"message": "[nit] trailing whitespace"
},
{
"line": 49,
"message": "[nit] s/conrtol/control"
}
]
}
}
----
As response a link:#review-info[ReviewInfo] entity is returned that
describes the applied labels.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"labels": {
"Code-Review": -1
}
}
----
[[rebase-revision]]
Rebase Revision
~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/rebase'
Rebases a revision.
.Request
----
POST /changes/myProject~master~I3ea943139cb62e86071996f2480e58bf3eeb9dd2/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/rebase HTTP/1.0
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the rebased change. Information about the current patch set
is included.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I3ea943139cb62e86071996f2480e58bf3eeb9dd2",
"project": "myProject",
"branch": "master",
"change_id": "I3ea943139cb62e86071996f2480e58bf3eeb9dd2",
"subject": "Implement Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": false,
"_sortkey": "0024cf9a000012bf",
"_number": 4799,
"owner": {
"name": "John Doe"
},
"current_revision": "27cc4558b5a3d3387dd11ee2df7a117e7e581822",
"revisions": {
"27cc4558b5a3d3387dd11ee2df7a117e7e581822": {
"_number": 2,
"fetch": {
"http": {
"url": "http://gerrit:8080/myProject",
"ref": "refs/changes/99/4799/2"
}
},
"commit": {
"parents": [
{
"commit": "b4003890dadd406d80222bf1ad8aca09a4876b70",
"subject": "Implement Feature A"
}
],
"author": {
"name": "John Doe",
"email": "john.doe@example.com",
"date": "2013-05-07 15:21:27.000000000",
"tz": 120
},
"committer": {
"name": "Gerrit Code Review",
"email": "gerrit-server@example.com",
"date": "2013-05-07 15:35:43.000000000",
"tz": 120
},
"subject": "Implement Feature X",
"message": "Implement Feature X\n\nAdded feature X."
}
}
}
----
If the revision cannot be rebased, e.g. due to conflicts, the response is
"`409 Conflict`" and the error message is contained in the response
body.
.Response
----
HTTP/1.1 409 Conflict
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
The change could not be rebased due to a path conflict during merge.
----
[[submit-revision]]
Submit Revision
~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/submit'
Submits a revision.
The request body only needs to include a link:#submit-input[
SubmitInput] entity if the request should wait for the merge to
complete.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/submit HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"wait_for_merge": true
}
----
As response a link:#submit-info[SubmitInfo] entity is returned that
describes the status of the submitted change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"status": "MERGED"
}
----
If the revision cannot be submitted, e.g. because the submit rule
doesn't allow submitting the revision or the revision is not the
current revision, the response is "`409 Conflict`" and the error
message is contained in the response body.
.Response
----
HTTP/1.1 409 Conflict
Content-Type: text/plain;charset=UTF-8
"revision 674ac754f91e64a0efb8087e59a176484bd534d1 is not current revision"
----
[[publish-draft-revision]]
Publish Draft Revision
~~~~~~~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/publish'
Publishes a draft revision.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/publish HTTP/1.0
Content-Type: application/json;charset=UTF-8
----
.Response
----
HTTP/1.1 204 No Content
----
[[delete-draft-revision]]
Delete Draft Revision
~~~~~~~~~~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]'
Deletes a draft revision.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1 HTTP/1.0
Content-Type: application/json;charset=UTF-8
----
.Response
----
HTTP/1.1 204 No Content
----
[[get-patch]]
Get Patch
~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/patch'
Gets the formatted patch for one revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/patch HTTP/1.0
----
The formatted patch is returned as text encoded inside base64:
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: text/plain;charset=ISO-8859-1
X-FYI-Content-Encoding: base64
X-FYI-Content-Type: application/mbox
RnJvbSA3ZGFkY2MxNTNmZGVhMTdhYTg0ZmYzMmE2ZTI0NWRiYjY...
----
Adding query parameter `zip` (for example `/changes/.../patch?zip`)
returns the patch as a single file inside of a ZIP archive. Clients
can expand the ZIP to obtain the plain text patch, avoiding the
need for a base64 decoding step. This option implies `download`.
Query parameter `download` (e.g. `/changes/.../patch?download`)
will suggest the browser save the patch as `commitsha1.diff.base64`,
for later processing by command line tools.
[[get-mergeable]]
Get Mergeable
~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/mergeable'
Gets the method the server will use to submit (merge) the change and
an indicator if the change is currently mergeable.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/mergeable HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
submit_type: "MERGE_IF_NECESSARY",
mergeable: true,
}
----
[[get-submit-type]]
Get Submit Type
~~~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/submit_type'
Gets the method the server will use to submit (merge) the change.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/submit_type HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
"MERGE_IF_NECESSARY"
----
[[test-submit-type]]
Test Submit Type
~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/test.submit_type'
Tests the submit_type Prolog rule in the project, or the one given.
Request body may be either the Prolog code as `text/plain` or a
link:#rule-input[RuleInput] object. The query parameter `filters`
may be set to `SKIP` to bypass parent project filters while testing
a project-specific rule.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/test.submit_type HTTP/1.0
Content-Type: text/plain;charset-UTF-8
submit_type(cherry_pick).
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
"CHERRY_PICK"
----
[[test-submit-rule]]
Test Submit Rule
~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/test.submit_rule'
Tests the submit_rule Prolog rule in the project, or the one given.
Request body may be either the Prolog code as `text/plain` or a
link:#rule-input[RuleInput] object. The query parameter `filters`
may be set to `SKIP` to bypass parent project filters while testing
a project-specific rule.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/test.submit_type?filters=SKIP HTTP/1.0
Content-Type: text/plain;charset-UTF-8
submit_rule(submit(R)) :-
R = label('Any-Label-Name', reject(_)).
----
The response is a list of link:#submit-record[SubmitRecord] entries
describing the permutations that satisfy the tested submit rule.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
{
"status": "NOT_READY",
"reject": {
"Any-Label-Name": {}
}
}
]
----
[[list-drafts]]
List Drafts
~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/'
Lists the draft comments of a revision that belong to the calling
user.
As result a map is returned that maps the file path to a list of
link:#comment-info[CommentInfo] entries. The entries in the map are
sorted by file path.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000"
},
{
"kind": "gerritcodereview#comment",
"id": "TveXwFiA",
"line": 49,
"in_reply_to": "TfYX-Iuo",
"message": "Done",
"updated": "2013-02-26 15:40:45.328000000"
}
]
}
----
[[create-draft]]
Create Draft
~~~~~~~~~~~~
[verse]
'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts'
Creates a draft comment on a revision.
The new draft comment must be provided in the request body inside a
link:#comment-input[CommentInput] entity.
.Request
----
PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace"
}
----
As response a link:#comment-info[CommentInfo] entity is returned that
describes the draft comment.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000"
}
----
[[get-draft]]
Get Draft
~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
Retrieves a draft comment of a revision that belongs to the calling
user.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
----
As response a link:#comment-info[CommentInfo] entity is returned that
describes the draft comment.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000"
}
----
[[update-draft]]
Update Draft
~~~~~~~~~~~~
[verse]
'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
Updates a draft comment on a revision.
The new draft comment must be provided in the request body inside a
link:#comment-input[CommentInput] entity.
.Request
----
PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace"
}
----
As response a link:#comment-info[CommentInfo] entity is returned that
describes the draft comment.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000"
}
----
[[delete-draft]]
Delete Draft
~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
Deletes a draft comment from a revision.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[list-comments]]
List Comments
~~~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/comments/'
Lists the published comments of a revision.
As result a map is returned that maps the file path to a list of
link:#comment-info[CommentInfo] entries. The entries in the map are
sorted by file path.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/comments/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000",
"author": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
}
},
{
"kind": "gerritcodereview#comment",
"id": "TveXwFiA",
"line": 49,
"in_reply_to": "TfYX-Iuo",
"message": "Done",
"updated": "2013-02-26 15:40:45.328000000",
"author": {
"_account_id": 1000097,
"name": "Jane Roe",
"email": "jane.roe@example.com"
}
}
]
}
----
[[get-comment]]
Get Comment
~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/comments/link:#comment-id[\{comment-id\}]'
Retrieves a published comment of a revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/comments/TvcXrmjM HTTP/1.0
----
As response a link:#comment-info[CommentInfo] entity is returned that
describes the published comment.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#comment",
"id": "TvcXrmjM",
"path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"line": 23,
"message": "[nit] trailing whitespace",
"updated": "2013-02-26 15:40:43.986000000",
"author": {
"_account_id": 1000096,
"name": "John Doe",
"email": "john.doe@example.com"
}
}
----
[[list-files]]
List Files
~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/'
Lists the files that were modified, added or deleted in a revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/ HTTP/1.0
----
As result a map is returned that maps the file path to a list of
link:#file-info[FileInfo] entries. The entries in the map are
sorted by file path.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"/COMMIT_MSG": {
"status": "A",
"lines_inserted": 7
},
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": {
"lines_inserted": 5,
"lines_deleted": 3
}
}
----
The request parameter `reviewed` changes the response to return a list
of the paths the caller has marked as reviewed. Clients that also
need the FileInfo should make two requests.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/?reviewed HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
[
"/COMMIT_MSG",
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
]
----
[[get-content]]
Get Content
~~~~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#file-id[\{file-id\}]/content'
Gets the content of a file from a certain revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/content HTTP/1.0
----
The content is returned as base64 encoded string.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: text/plain;charset=UTF-8
Ly8gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY...
----
[[get-diff]]
Get Diff
~~~~~~~~
[verse]
'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#file-id[\{file-id\}]/diff'
Gets the diff of a file from a certain revision.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/diff HTTP/1.0
----
As response a link:#diff-info[DiffInfo] entity is returned that describes the diff.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]
{
"meta_a": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"meta_b": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"change_type": "MODIFIED",
"diff_header": [
"diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"index 59b7670..9faf81c 100644",
"--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java"
],
"content": [
{
"ab": [
"// Copyright (C) 2010 The Android Open Source Project",
"//",
"// Licensed under the Apache License, Version 2.0 (the \"License\");",
"// you may not use this file except in compliance with the License.",
"// You may obtain a copy of the License at",
"//",
"// http://www.apache.org/licenses/LICENSE-2.0",
"//",
"// Unless required by applicable law or agreed to in writing, software",
"// distributed under the License is distributed on an \"AS IS\" BASIS,",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
"// See the License for the specific language governing permissions and",
"// limitations under the License."
]
},
{
"b": [
"//",
"// Add some more lines in the header."
]
},
{
"ab": [
"",
"package com.google.gerrit.server.project;",
"",
"import com.google.common.collect.Maps;",
...
]
}
...
]
}
----
If the `intraline` parameter is specified, intraline differences are included in the diff.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/b6b9c10649b9041884046119ab794374470a1b45/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/diff?intraline HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]
{
"meta_a": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"meta_b": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"change_type": "MODIFIED",
"diff_header": [
"diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"index 59b7670..9faf81c 100644",
"--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java"
],
"content": [
...
{
"a": [
"/** Manages access control for Git references (aka branches, tags). */"
],
"b": [
"/** Manages access control for the Git references (aka branches, tags). */"
],
"edit_a": [],
"edit_b": [
[
31,
4
]
]
}
]
}
----
The `base` parameter can be specified to control the base patch set from which the diff should
be generated.
.Request
----
GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/b6b9c10649b9041884046119ab794374470a1b45/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/diff?base=2 HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]
{
"meta_a": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"meta_b": {
"name": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
"content_type": "text/x-java-source"
},
"change_type": "MODIFIED",
"content": [
{
"skip": 578
}
]
}
----
The `ignore-whitespace` parameter can be specified to control how whitespace differences are
reported in the result. Valid values are `NONE`, `TRAILING`, `CHANGED` or `ALL`.
The `context` parameter can be specified to control the number of lines of surrounding context
in the diff. Valid values are `ALL` or number of lines.
[[set-reviewed]]
Set Reviewed
~~~~~~~~~~~~
[verse]
'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#file-id[\{file-id\}]/reviewed'
Marks a file of a revision as reviewed by the calling user.
.Request
----
PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/reviewed HTTP/1.0
----
.Response
----
HTTP/1.1 201 Created
----
If the file was already marked as reviewed by the calling user the
response is "`200 OK`".
[[delete-reviewed]]
Delete Reviewed
~~~~~~~~~~~~~~~
[verse]
'DELETE /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#file-id[\{file-id\}]/reviewed'
Deletes the reviewed flag of the calling user from a file of a revision.
.Request
----
DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/reviewed HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[cherry-pick]]
Cherry Pick Revision
~~~~~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/cherrypick'
Cherry picks a revision to a destination branch.
The commit message and destination branch must be provided in the request body inside a
link:#cherrypick-input[CherryPickInput] entity.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/cherrypick HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"message" : "Implementing Feature X",
"destination" : "release-branch"
}
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the resulting cherry picked change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9941",
"project": "myProject",
"branch": "release-branch",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9941",
"subject": "Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
[[message]]
Edit Commit Message
~~~~~~~~~~~~~~~~~~~
[verse]
'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/message'
Edit commit message.
The commit message must be provided in the request body inside a
link:#cherrypick-input[CherryPickInput] entity.
.Request
----
POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/message HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"message" : "Reword Implementing Feature X",
}
----
As response a link:#change-info[ChangeInfo] entity is returned that
describes the change.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"kind": "gerritcodereview#change",
"id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9941",
"project": "myProject",
"branch": "release-branch",
"change_id": "I8473b95934b5732ac55d26311a706c9c2bde9941",
"subject": "Reword Implementing Feature X",
"status": "NEW",
"created": "2013-02-01 09:59:32.126000000",
"updated": "2013-02-21 11:16:36.775000000",
"mergeable": true,
"_sortkey": "0023412400000f7d",
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
[[ids]]
IDs
---
[[account-id]]
link:rest-api-accounts.html#account-id[\{account-id\}]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
--
[[change-id]]
\{change-id\}
~~~~~~~~~~~~~
Identifier that uniquely identifies one change.
This can be:
* an ID of the change in the format "'$$<project>~<branch>~<Change-Id>$$'",
where for the branch the `refs/heads/` prefix can be omitted
("$$myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940$$")
* a Change-Id if it uniquely identifies one change
("I8473b95934b5732ac55d26311a706c9c2bde9940")
* a legacy numeric change ID ("4247")
[[comment-id]]
\{comment-id\}
~~~~~~~~~~~~~~
UUID of a published comment.
[[draft-id]]
\{draft-id\}
~~~~~~~~~~~~
UUID of a draft comment.
[[file-id]]
\{file-id\}
~~~~~~~~~~~~
The path of the file.
[[revision-id]]
\{revision-id\}
~~~~~~~~~~~~~~~
Identifier that uniquely identifies one revision of a change.
This can be:
* the literal `current` to name the current patch set/revision
* a commit ID ("674ac754f91e64a0efb8087e59a176484bd534d1")
* an abbreviated commit ID that uniquely identifies one revision of the
change ("674ac754"), at least 4 digits are required
* a legacy numeric patch number ("1" for first patch set of the change)
[[json-entities]]
JSON Entities
-------------
[[abandon-input]]
AbandonInput
~~~~~~~~~~~~
The `AbandonInput` entity contains information for abandoning a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`message` |optional|
Message to be added as review comment to the change when abandoning the
change.
|===========================
[[action-info]]
ActionInfo
~~~~~~~~~~
The `ActionInfo` entity describes a REST API call the client can
make to manipulate a resource. These are frequently implemented by
plugins and may be discovered at runtime.
[options="header",width="50%",cols="1,^1,5"]
|====================================
|Field Name ||Description
|`method` |optional|
HTTP method to use with the action. Most actions use `POST`, `PUT`
or `DELETE` to cause state changes.
|`label` |optional|
Short title to display to a user describing the action. In the
Gerrit web interface the label is used as the text on the button
presented in the UI.
|`title` |optional|
Longer text to display describing the action. In a web UI this
should be the title attribute of the element, displaying when
the user hovers the mouse.
|`enabled` |optional|
If true the action is permitted at this time and the caller is
likely allowed to execute it. This may change if state is updated
at the server or permissions are modified. Not present if false.
|====================================
[[add-reviewer-result]]
AddReviewerResult
~~~~~~~~~~~~~~~~~
The `AddReviewerResult` entity describes the result of adding a
reviewer to a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`reviewers` |optional|
The newly added reviewers as a list of link:#reviewer-info[
ReviewerInfo] entities.
|`error` |optional|
Error message explaining why the reviewer could not be added. +
If a group was specified in the input and an error is returned, it
means that none of the members were added as reviewer.
|`confirm` |`false` if not set|
Whether adding the reviewer requires confirmation.
|===========================
[[approval-info]]
ApprovalInfo
~~~~~~~~~~~~
The `ApprovalInfo` entity contains information about an approval from a
user for a label on a change.
`ApprovalInfo` has the same fields as
link:rest-api-accounts.html#account-info[AccountInfo].
In addition `ApprovalInfo` has the following fields:
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`value` |optional|
The vote that the user has given for the label. If present and zero, the
user is permitted to vote on the label. If absent, the user is not
permitted to vote on that label.
|`date` |optional|
The time and date describing when the approval was made.
|===========================
[[group-base-info]]
GroupBaseInfo
~~~~~~~~~~~~~
The `GroupBaseInfo` entity contains base information about the group.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`id` |The id of the group.
|`name` |The name of the group.
|==========================
[[change-info]]
ChangeInfo
~~~~~~~~~~
The `ChangeInfo` entity contains information about a change.
[options="header",width="50%",cols="1,^1,5"]
|==================================
|Field Name ||Description
|`kind` ||`gerritcodereview#change`
|`id` ||
The ID of the change in the format "'<project>\~<branch>~<Change-Id>'",
where 'project', 'branch' and 'Change-Id' are URL encoded. For 'branch' the
`refs/heads/` prefix is omitted.
|`project` ||The name of the project.
|`branch` ||
The name of the target branch. +
The `refs/heads/` prefix is omitted.
|`topic` |optional|The topic to which this change belongs.
|`change_id` ||The Change-Id of the change.
|`subject` ||
The subject of the change (header line of the commit message).
|`status` ||
The status of the change (`NEW`, `SUBMITTED`, `MERGED`, `ABANDONED`,
`DRAFT`).
|`created` ||
The link:rest-api.html#timestamp[timestamp] of when the change was
created.
|`updated` ||
The link:rest-api.html#timestamp[timestamp] of when the change was last
updated.
|`starred` |not set if `false`|
Whether the calling user has starred this change.
|`reviewed` |not set if `false`|
Whether the change was reviewed by the calling user.
Only set if link:#reviewed[reviewed] is requested.
|`mergeable` |optional|
Whether the change is mergeable. +
Not set for merged changes.
|`_sortkey` ||The sortkey of the change.
|`_number` ||The legacy numeric ID of the change.
|`owner` ||
The owner of the change as an link:rest-api-accounts.html#account-info[
AccountInfo] entity.
|`actions` |optional|
Actions the caller might be able to perform on this revision. The
information is a map of view name to link:#action-info[ActionInfo]
entities.
|`labels` |optional|
The labels of the change as a map that maps the label names to
link:#label-info[LabelInfo] entries. +
Only set if link:#labels[labels] or link:#detailed-labels[detailed
labels] are requested.
|`permitted_labels` |optional|
A map of the permitted labels that maps a label name to the list of
values that are allowed for that label. +
Only set if link:#detailed-labels[detailed labels] are requested.
|`removable_reviewers`|optional|
The reviewers that can be removed by the calling user as a list of
link:rest-api-accounts.html#account-info[AccountInfo] entities. +
Only set if link:#detailed-labels[detailed labels] are requested.
|`messages`|optional|
Messages associated with the change as a list of
link:#change-message-info[ChangeMessageInfo] entities. +
Only set if link:#messages[messages] are requested.
|`current_revision` |optional|
The commit ID of the current patch set of this change. +
Only set if link:#current-revision[the current revision] is requested
or if link:#all-revisions[all revisions] are requested.
|`revisions` |optional|
All patch sets of this change as a map that maps the commit ID of the
patch set to a link:#revision-info[RevisionInfo] entity. +
Only set if link:#all-revisions[all revisions] are requested.
|`_more_changes` |optional, not set if `false`|
Whether the query would deliver more results if not limited. +
Only set on either the last or the first change that is returned.
|==================================
[[change-message-info]]
ChangeMessageInfo
~~~~~~~~~~~~~~~~~
The `ChangeMessageInfo` entity contains information about a message
attached to a change.
[options="header",width="50%",cols="1,^1,5"]
|==================================
|Field Name ||Description
|`id` ||The ID of the message.
|`author` |optional|
Author of the message as an
link:rest-api-accounts.html#account-info[AccountInfo] entity. +
Unset if written by the Gerrit system.
|`date` ||
The link:rest-api.html#timestamp[timestamp] this message was posted.
|`message` ||The text left by the user.
|`_revision_number` |optional|
Which patchset (if any) generated this message.
|==================================
[[cherrypick-input]]
CherryPickInput
~~~~~~~~~~~~~~~
The `CherryPickInput` entity contains information for cherry-picking a change to a new branch.
[options="header",width="50%",cols="1,6"]
|===========================
|Field Name |Description
|`message` |Commit message for the cherry-picked change
|`destination` |Destination Branch
|===========================
[[comment-info]]
CommentInfo
~~~~~~~~~~~
The `CommentInfo` entity contains information about an inline comment.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`kind` ||`gerritcodereview#comment`
|`id` ||The URL encoded UUID of the comment.
|`path` |optional|
The path of the file for which the inline comment was done. +
Not set if returned in a map where the key is the file path.
|`side` |optional|
The side on which the comment was added. +
Allowed values are `REVISION` and `PARENT`. +
If not set, the default is `REVISION`.
|`line` |optional|
The number of the line for which the comment was done. +
If range is set, this equals the end line of the range. +
If neither line nor range is set, it's a file comment.
|`range` |optional|
The range of the comment as a link:rest-api.html#comment-range[CommentRange]
entity.
|`in_reply_to` |optional|
The URL encoded UUID of the comment to which this comment is a reply.
|`message` |optional|The comment message.
|`updated` ||
The link:rest-api.html#timestamp[timestamp] of when this comment was
written.
|`author` |optional|
The author of the message as an
link:rest-api-accounts.html#account-info[AccountInfo] entity. +
Unset for draft comments, assumed to be the calling user.
|===========================
[[comment-input]]
CommentInput
~~~~~~~~~~~~
The `CommitInput` entity contains information for creating an inline
comment.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`kind` |optional|
Must be `gerritcodereview#comment` if provided.
|`id` |optional|
The URL encoded UUID of the comment if an existing draft comment should
be updated.
|`path` |optional|
The path of the file for which the inline comment should be added. +
Doesn't need to be set if contained in a map where the key is the file
path.
|`side` |optional|
The side on which the comment should be added. +
Allowed values are `REVISION` and `PARENT`. +
If not set, the default is `REVISION`.
|`line` |optional|
The number of the line for which the comment should be added. +
`0` if it is a file comment. +
If neither line nor range is set, a file comment is added. +
If range is set, this should equal the end line of the range.
|`range` |optional|
The range of the comment as a link:rest-api.html#comment-range[CommentRange]
entity.
|`in_reply_to` |optional|
The URL encoded UUID of the comment to which this comment is a reply.
|`updated` |optional|
The link:rest-api.html#timestamp[timestamp] of this comment. +
Accepted but ignored.
|`message` |optional|
The comment message. +
If not set and an existing draft comment is updated, the existing draft
comment is deleted.
|===========================
[[comment-range]]
CommentRange
~~~~~~~~~~~~
The `CommentRange` entity describes the range of an inline comment.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`start_line` ||The start line number of the range.
|`start_character` ||The character position in the start line.
|`end_line` ||The end line number of the range.
|`end_character` ||The character position in the end line.
|===========================
[[commit-info]]
CommitInfo
~~~~~~~~~~
The `CommitInfo` entity contains information about a commit.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`commit` |The commit ID.
|`parent` |
The parent commits of this commit as a list of
link:#commit-info[CommitInfo] entities. In parent
only `commit` and `subject` fields are populated.
|`author` |The author of the commit as a
link:#git-person-info[GitPersonInfo] entity.
|`committer` |The committer of the commit as a
link:#git-person-info[GitPersonInfo] entity.
|`subject` |
The subject of the commit (header line of the commit message).
|`message` |The commit message.
|==========================
[[diff-content]]
DiffContent
~~~~~~~~~~~
The `DiffContent` entity contains information about the content differences
in a file.
[options="header",width="50%",cols="1,^1,5"]
|==========================
|Field Name ||Description
|`a` |optional|Content only in the file on side A (deleted in B).
|`b` |optional|Content only in the file on side B (added in B).
|`ab` |optional|Content in the file on both sides (unchanged).
|`edit_a` |only present during a replace, i.e. both `a` and `b` are present|
Text sections deleted from side A as a
link:#diff-intraline-info[DiffIntralineInfo] entity.
|`edit_b` |only present during a replace, i.e. both `a` and `b` are present|
Text sections inserted in side B as a
link:#diff-intraline-info[DiffIntralineInfo] entity.
|`skip` |optional|count of lines skipped on both sides when the file is
too large to include all common lines.
|==========================
[[diff-file-meta-info]]
DiffFileMetaInfo
~~~~~~~~~~~~~~~~
The `DiffFileMetaInfo` entity contains meta information about a file diff.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`name` |The name of the file.
|`content_type`|The content type of the file.
|==========================
[[diff-info]]
DiffInfo
~~~~~~~~
The `DiffInfo` entity contains information about the diff of a file
in a revision.
[options="header",width="50%",cols="1,^1,5"]
|==========================
|Field Name ||Description
|`meta_a` |not present when the file is added|
Meta information about the file on side A as a
link:#diff-file-meta-info[DiffFileMetaInfo] entity.
|`meta_b` |not present when the file is deleted|
Meta information about the file on side B as a
link:#diff-file-meta-info[DiffFileMetaInfo] entity.
|`change_type` ||The type of change (`ADDED`, `MODIFIED`, `DELETED`, `RENAMED`
`COPIED`, `REWRITE`).
|`intraline_status`|only set when the `intraline` parameter was specified in the request|
Intraline status (`OK`, `ERROR`, `TIMEOUT`).
|`diff_header` ||A list of strings representing the patch set diff header.
|`content` ||The content differences in the file as a list of
link:#diff-content[DiffContent] entities.
|==========================
[[diff-intraline-info]]
DiffIntralineInfo
~~~~~~~~~~~~~~~~~
The `DiffIntralineInfo` entity contains information about intraline edits in a
file.
The information consists of a list of `<skip length, mark length>` pairs, where
the skip length is the number of characters between the end of the previous edit
and the start of this edit, and the mark length is the number of edited characters
following the skip. The start of the edits is from the beginning of the related
diff content lines.
Note that the implied newline character at the end of each line is included in
the length calculation, and thus it is possible for the edits to span newlines.
[[fetch-info]]
FetchInfo
~~~~~~~~~
The `FetchInfo` entity contains information about how to fetch a patch
set via a certain protocol.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`url` |The URL of the project.
|`ref` |The ref of the patch set.
|==========================
[[file-info]]
FileInfo
~~~~~~~~
The `FileInfo` entity contains information about a file in a patch set.
[options="header",width="50%",cols="1,^1,5"]
|=============================
|Field Name ||Description
|`status` |optional|
The status of the file ("`A`"=Added, "`D`"=Deleted, "`R`"=Renamed,
"`C`"=Copied, "`W`"=Rewritten). +
Not set if the file was Modified ("`M`").
|`binary` |not set if `false`|Whether the file is binary.
|`old_path` |optional|
The old file path. +
Only set if the file was renamed or copied.
|`lines_inserted`|optional|
Number of inserted lines. +
Not set for binary files or if no lines were inserted.
|`lines_deleted` |optional|
Number of deleted lines. +
Not set for binary files or if no lines were deleted.
|=============================
[[git-person-info]]
GitPersonInfo
~~~~~~~~~~~~~
The `GitPersonInfo` entity contains information about the
author/committer of a commit.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`name` |The name of the author/committer.
|`email` |The email address of the author/committer.
|`date` |The link:rest-api.html#timestamp[timestamp] of when
this identity was constructed.
|`tz` |The timezone offset from UTC of when this identity was
constructed.
|==========================
[[label-info]]
LabelInfo
~~~~~~~~~
The `LabelInfo` entity contains information about a label on a change, always
corresponding to the current patch set.
There are two options that control the contents of `LabelInfo`:
link:#labels[`LABELS`] and link:#detailed-labels[`DETAILED_LABELS`].
* For a quick summary of the state of labels, use `LABELS`.
* For detailed information about labels, including exact numeric votes for all
users and the allowed range of votes for the current user, use `DETAILED_LABELS`.
Common fields
^^^^^^^^^^^^^
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`optional` |not set if `false`|
Whether the label is optional. Optional means the label may be set, but
it's neither necessary for submission nor does it block submission if
set.
|===========================
Fields set by `LABELS`
^^^^^^^^^^^^^^^^^^^^^^
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`approved` |optional|One user who approved this label on the change
(voted the maximum value) as an
link:rest-api-accounts.html#account-info[AccountInfo] entity.
|`rejected` |optional|One user who rejected this label on the change
(voted the minimum value) as an
link:rest-api-accounts.html#account-info[AccountInfo] entity.
|`recommended` |optional|One user who recommended this label on the
change (voted positively, but not the maximum value) as an
link:rest-api-accounts.html#account-info[AccountInfo] entity.
|`disliked` |optional|One user who disliked this label on the change
(voted negatively, but not the minimum value) as an
link:rest-api-accounts.html#account-info[AccountInfo] entity.
|`value` |optional|The voting value of the user who
recommended/disliked this label on the change if it is not
"`+1`"/"`-1`".
|===========================
Fields set by `DETAILED_LABELS`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`all` |optional|List of all approvals for this label as a list
of link:#approval-info[ApprovalInfo] entities.
|`values` |optional|A map of all values that are allowed for this
label. The map maps the values ("`-2`", "`-1`", " `0`", "`+1`", "`+2`")
to the value descriptions.
|===========================
[[restore-input]]
RestoreInput
~~~~~~~~~~~~
The `RestoreInput` entity contains information for restoring a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`message` |optional|
Message to be added as review comment to the change when restoring the
change.
|===========================
[[revert-input]]
RevertInput
~~~~~~~~~~~
The `RevertInput` entity contains information for reverting a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`message` |optional|
Message to be added as review comment to the change when reverting the
change.
|===========================
[[review-info]]
ReviewInfo
~~~~~~~~~~
The `ReviewInfo` entity contains information about a review.
[options="header",width="50%",cols="1,6"]
|===========================
|Field Name |Description
|`labels` |
The labels of the review as a map that maps the label names to the
voting values.
|===========================
[[review-input]]
ReviewInput
~~~~~~~~~~~
The `ReviewInput` entity contains information for adding a review to a
revision.
[options="header",width="50%",cols="1,^1,5"]
|============================
|Field Name ||Description
|`message` |optional|
The message to be added as review comment.
|`labels` |optional|
The votes that should be added to the revision as a map that maps the
label names to the voting values.
|`comments` |optional|
The comments that should be added as a map that maps a file path to a
list of link:#comment-input[CommentInput] entities.
|`strict_labels`|`true` if not set|
Whether all labels are required to be within the user's permitted ranges
based on access controls. +
If `true`, attempting to use a label not granted to the user will fail
the entire modify operation early. +
If `false`, the operation will execute anyway, but the proposed labels
will be modified to be the "best" value allowed by the access controls.
|`drafts` |optional|
Draft handling that defines how draft comments are handled that are
already in the database but that were not also described in this
input. +
Allowed values are `DELETE`, `PUBLISH` and `KEEP`. +
If not set, the default is `DELETE`.
|`notify` |optional|
Notify handling that defines to whom email notifications should be sent
after the review is stored. +
Allowed values are `NONE`, `OWNER`, `OWNER_REVIEWERS` and `ALL`. +
If not set, the default is `ALL`.
|`on_behalf_of`|optional|
link:rest-api-accounts.html#account-id[\{account-id\}] the review
should be posted on behalf of. To use this option the caller must
have been granted `labelAs-NAME` permission for all keys of labels.
|============================
[[reviewer-info]]
ReviewerInfo
~~~~~~~~~~~~
The `ReviewerInfo` entity contains information about a reviewer and its
votes on a change.
`ReviewerInfo` has the same fields as
link:rest-api-accounts.html#account-info[AccountInfo] and includes
link:#detailed-accounts[detailed account information].
In addition `ReviewerInfo` has the following fields:
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`kind` |`gerritcodereview#reviewer`
|`approvals` |
The approvals of the reviewer as a map that maps the label names to the
approval values ("`-2`", "`-1`", " `0`", "`+1`", "`+2`").
|==========================
[[reviewer-input]]
ReviewerInput
~~~~~~~~~~~~~
The `ReviewerInput` entity contains information for adding a reviewer
to a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`reviewer` ||
The link:rest-api-accounts.html#account-id[ID] of one account that
should be added as reviewer or the link:rest-api-groups.html#group-id[
ID] of one group for which all members should be added as reviewers. +
If an ID identifies both an account and a group, only the account is
added as reviewer to the change.
|`confirmed` |optional|
Whether adding the reviewer is confirmed. +
The Gerrit server may be configured to
link:config-gerrit.html#addreviewer.maxWithoutConfirmation[require a
confirmation] when adding a group as reviewer that has many members.
|===========================
[[revision-info]]
RevisionInfo
~~~~~~~~~~~~
The `RevisionInfo` entity contains information about a patch set.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`draft` |not set if `false`|Whether the patch set is a draft.
|`has_draft_comments` |not set if `false`|Whether the patch
set has one or more draft comments by the calling user. Only set if
link:#draft_comments[draft comments] is requested.
|`_number` ||The patch set number.
|`fetch` ||
Information about how to fetch this patch set. The fetch information is
provided as a map that maps the protocol name ("`git`", "`http`",
"`ssh`") to link:#fetch-info[FetchInfo] entities.
|`commit` |optional|The commit of the patch set as
link:#commit-info[CommitInfo] entity.
|`files` |optional|
The files of the patch set as a map that maps the file names to
link:#file-info[FileInfo] entities.
|`actions` |optional|
Actions the caller might be able to perform on this revision. The
information is a map of view name to link:#action-info[ActionInfo]
entities.
|===========================
[[rule-input]]
RuleInput
~~~~~~~~~
The `RuleInput` entity contains information to test a Prolog rule.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`rule`||
Prolog code to execute instead of the code in `refs/meta/config`.
|`filters`|`RUN` if not set|
When `RUN` filter rules in the parent projects are called to
post-process the results of the project specific rule. This
behavior matches how the rule will execute if installed. +
If `SKIP` the parent filters are not called, allowing the test
to return results from the input rule.
|===========================
[[suggested-reviewer-info]]
SuggestedReviewerInfo
~~~~~~~~~~~~~~~~~~~~~
The `SuggestedReviewerInfo` entity contains information about a reviewer
that can be added to a change (an account or a group).
`SuggestedReviewerInfo` has either the `account` field that contains
the link:rest-api-accounts.html#account-info[AccountInfo] entity, or
the `group` field that contains the
link:rest-api-changes.html#group-base-info[GroupBaseInfo] entity.
[[submit-info]]
SubmitInfo
~~~~~~~~~~
The `SubmitInfo` entity contains information about the change status
after submitting.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`status` |
The status of the change after submitting, can be `MERGED` or
`SUBMITTED`. +
If `wait_for_merge` in the link:#submit-input[SubmitInput] was set to
`false` the returned status is `SUBMITTED` and the caller can't know
whether the change could be merged successfully.
|==========================
[[submit-input]]
SubmitInput
~~~~~~~~~~~
The `SubmitInput` entity contains information for submitting a change.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`wait_for_merge`|`false` if not set|
Whether the request should wait for the merge to complete. +
If `false` the request returns immediately after the change has been
added to the merge queue and the caller can't know whether the change
could be merged successfully.
|===========================
[[submit-record]]
SubmitRecord
~~~~~~~~~~~~
The `SubmitRecord` entity describes results from a submit_rule.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`status`||
`OK`, the change can be submitted. +
`NOT_READY`, additional labels are required before submit. +
`CLOSED`, closed changes cannot be submitted. +
`RULE_ERROR`, rule code failed with an error.
|`ok`|optional|
Map of labels that are approved; an
link:rest-api-accounts.html#account-info[AccountInfo] identifies the
voter chosen by the rule.
|`reject`|optional|
Map of labels that are preventing submit;
link:rest-api-accounts.html#account-info[AccountInfo] identifies voter.
|`need`|optional|
Map of labels that need to be given to submit. The value is
currently an empty object.
|`may`|optional|
Map of labels that can be used, but do not affect submit.
link:rest-api-accounts.html#account-info[AccountInfo] identifies voter,
if the label has been applied.
|`impossible`|optional|
Map of labels that should have been in `need` but cannot be
used by any user because of access restrictions. The value
is currently an empty object.
|`error_message`|optional|
When status is RULE_ERROR this message provides some text describing
the failure of the rule predicate.
|===========================
[[topic-input]]
TopicInput
~~~~~~~~~~
The `TopicInput` entity contains information for setting a topic.
[options="header",width="50%",cols="1,^1,5"]
|===========================
|Field Name ||Description
|`topic` |optional|The topic. +
The topic will be deleted if not set.
|`message` |optional|
Message to be added as review comment to the change when setting the
topic.
|===========================
[[included-in-info]]
IncludedInInfo
~~~~~~~~~~~~~~
The `IncludedInInfo` entity contains information about the branches a
change was merged into and tags it was tagged with.
[options="header",width="50%",cols="1,6"]
|==========================
|Field Name |Description
|`kind` |`gerritcodereview#includedininfo`
|`branches` | The list of branches this change was merged into.
Each branch is listed without the 'refs/head/' prefix.
|`tags` | The list of tags this change was tagged with.
Each tag is listed without the 'refs/tags/' prefix.
|==========================
GERRIT
------
Part of link:index.html[Gerrit Code Review]