blob: c373b96ff194b598e947e01debc5f556b32d7b5f [file] [log] [blame]
= Gerrit Code Review - /projects/ REST API
This page describes the project related REST endpoints.
Please also take note of the general information on the
link:rest-api.html[REST API].
[[project-endpoints]]
== Project Endpoints
[[list-projects]]
=== List Projects
--
'GET /projects/'
--
Lists the projects accessible by the caller. This is the same as
using the link:cmd-ls-projects.html[ls-projects] command over SSH,
and accepts the same options as query parameters.
As result a map is returned that maps the project names to
link:#project-info[ProjectInfo] entries. The entries in the map are sorted
by project name.
.Request
----
GET /projects/?d HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"external/bison": {
"id": "external%2Fbison",
"description": "GNU parser generator"
},
"external/gcc": {
"id": "external%2Fgcc"
},
"external/openssl": {
"id": "external%2Fopenssl",
"description": "encryption\ncrypto routines"
},
"test": {
"id": "test",
"description": "\u003chtml\u003e is escaped"
}
}
----
[[project-options]]
==== Project Options
Branch(b)::
Limit the results to the projects having the specified branch and
include the sha1 of the branch in the results.
+
Get projects that have a 'master' branch:
+
.Request
----
GET /projects/?b=master HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"some-project": {
"id": "some-project",
"branches": {
"master": "c5ed9dfcbf002ca0e432d788dab6ca2387829ca7"
}
},
"some-other-project": {
"id": "some-other-project",
"branches": {
"master": "ef1c270142f9581ecf768f4193fc8f8a81102ec2"
}
},
}
----
Description(d)::
Include project description in the results.
+
Get all the projects with their description:
+
.Request
----
GET /projects/?d HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"some-project": {
"id": "some-project",
"description": "Description of some project."
},
"some-other-project": {
"id": "some-other-project",
"description": "Description of some other project."
}
},
}
----
Limit(n)::
Limit the number of projects to be included in the results.
+
Query the first project in the project list:
+
.Request
----
GET /projects/?n=1 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"some-project": {
"id": "some-project"
}
}
----
[[suggest-projects]]
Prefix(p)::
Limit the results to those projects that start with the specified
prefix.
+
The match is case sensitive. May not be used together with `m` or `r`.
+
List all projects that start with `platform/`:
+
.Request
----
GET /projects/?p=platform%2F HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"platform/drivers": {
"id": "platform%2Fdrivers"
},
"platform/tools": {
"id": "platform%2Ftools"
}
}
----
+
E.g. this feature can be used by suggestion client UI's to limit results.
Regex(r)::
Limit the results to those projects that match the specified regex.
+
Boundary matchers '^' and '$' are implicit. For example: the regex 'test.*' will
match any projects that start with 'test' and regex '.*test' will match any
project that end with 'test'.
+
The match is case sensitive. May not be used together with `m` or `p`.
+
List all projects that match regex `test.*project`:
+
.Request
----
GET /projects/?r=test.*project HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"test/some-project": {
"id": "test%2Fsome-project"
},
"test/some-other-project": {
"id": "test%2Fsome-other-project"
}
}
----
Skip(S)::
Skip the given number of projects from the beginning of the list.
+
Query the second project in the project list:
+
.Request
----
GET /projects/?n=1&S=1 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"some-other-project": {
"id": "some-other-project"
}
}
----
Substring(m)::
Limit the results to those projects that match the specified substring.
+
The match is case insensitive. May not be used together with `r` or `p`.
+
List all projects that match substring `test/`:
+
.Request
----
GET /projects/?m=test%2F HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"test/some-project": {
"id": "test%2Fsome-project"
},
"some-path/test/some-other-project": {
"id": "some-path%2Ftest%2Fsome-other-project"
}
}
----
Tree(t)::
Get projects inheritance in a tree-like format. This option does
not work together with the branch option.
+
Get all the projects with tree option:
+
.Request
----
GET /projects/?t HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"All-Projects" {
"id": "All-Projects"
},
"child-project": {
"id": "child-project",
"parent": "parent-project"
},
"parent-project": {
"id": "parent-project",
"parent": "All-Projects"
}
}
----
Type(type)::
Get projects with specified type: ALL, CODE, PERMISSIONS.
+
Get all the projects of type 'PERMISSIONS':
+
.Request
----
GET /projects/?type=PERMISSIONS HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"All-Projects" {
"id": "All-Projects"
},
"some-parent-project": {
"id": "some-parent-project"
}
}
----
All::
Get all projects, including those whose state is "HIDDEN". May not be used
together with the `state` option.
+
.Request
----
GET /projects/?all HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"All-Projects" {
"id": "All-Projects",
"state": "ACTIVE"
},
"some-other-project": {
"id": "some-other-project",
"state": "HIDDEN"
}
}
----
State(s)::
Get all projects with the given state. May not be used together with the
`all` option.
+
.Request
----
GET /projects/?state=HIDDEN HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"some-other-project": {
"id": "some-other-project",
"state": "HIDDEN"
}
}
----
[[query-projects]]
=== Query Projects
--
'GET /projects/?query=<query>'
--
Queries projects visible to the caller. The
link:user-search-projects.html#_search_operators[query string] must be
provided by the `query` parameter. The `start` and `limit` parameters
can be used to skip/limit results.
As result a list of link:#project-info[ProjectInfo] entities is returned.
.Request
----
GET /projects/?query=name:test HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"test": {
"id": "test",
"description": "\u003chtml\u003e is escaped"
}
}
----
[[project-query-limit]]
==== Project Limit
The `/projects/?query=<query>` URL also accepts a limit integer in the
`limit` parameter. This limits the results to `limit` projects.
Query the first 25 projects in project list.
----
GET /projects/?query=<query>&limit=25 HTTP/1.0
----
The `/projects/` URL also accepts a start integer in the `start`
parameter. The results will skip `start` groups from project list.
Query 25 projects starting from index 50.
----
GET /groups/?query=<query>&limit=25&start=50 HTTP/1.0
----
[[project-query-options]]
==== Project Options
Additional fields can be obtained by adding `o` parameters. Each option
requires more lookups and slows down the query response time to the
client so they are generally disabled by default. The supported fields
are described in the context of the link:#project-options[List Projects]
REST endpoint.
[[get-project]]
=== Get Project
--
'GET /projects/link:#project-name[\{project-name\}]'
--
Retrieves a project.
.Request
----
GET /projects/plugins%2Freplication HTTP/1.0
----
As response a link:#project-info[ProjectInfo] entity is returned that
describes the project.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "plugins%2Freplication",
"name": "plugins/replication",
"parent": "Public-Plugins",
"description": "Copies to other servers using the Git protocol",
"state": "ACTIVE",
"labels": {
"Code-Review": {
"values": {
" 0": "No score",
"+1": "Approved"
},
"default_value": 0
}
}
}
----
[[create-project]]
=== Create Project
--
'PUT /projects/link:#project-name[\{project-name\}]'
--
Creates a new project.
In the request body additional data for the project can be provided as
link:#project-input[ProjectInput].
.Request
----
PUT /projects/MyProject HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"description": "This is a demo project.",
"submit_type": "INHERIT",
"owners": [
"MyProject-Owners"
]
}
----
As response the link:#project-info[ProjectInfo] entity is returned that
describes the created project.
.Response
----
HTTP/1.1 201 Created
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "MyProject",
"name": "MyProject",
"parent": "All-Projects",
"description": "This is a demo project.",
"labels": {
"Code-Review": {
"values": {
" 0": "No score",
"+1": "Approved"
},
"default_value": 0
}
}
}
----
[[get-project-description]]
=== Get Project Description
--
'GET /projects/link:#project-name[\{project-name\}]/description'
--
Retrieves the description of a project.
.Request
----
GET /projects/plugins%2Freplication/description HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"Copies to other servers using the Git protocol"
----
If the project does not have a description an empty string is returned.
[[set-project-description]]
=== Set Project Description
--
'PUT /projects/link:#project-name[\{project-name\}]/description'
--
Sets the description of a project.
The new project description must be provided in the request body inside
a link:#project-description-input[ProjectDescriptionInput] entity.
.Request
----
PUT /projects/plugins%2Freplication/description HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"description": "Plugin for Gerrit that handles the replication.",
"commit_message": "Update the project description"
}
----
As response the new project description is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"Plugin for Gerrit that handles the replication."
----
If the description was deleted the response is "`204 No Content`".
[[delete-project-description]]
=== Delete Project Description
--
'DELETE /projects/link:#project-name[\{project-name\}]/description'
--
Deletes the description of a project.
.Request
----
DELETE /projects/plugins%2Freplication/description HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
A commit message can be provided in the request body as a
link:#project-description-input[ProjectDescriptionInput] entity.
Historically, this method allowed a body in the DELETE, but that behavior is
link:https://www.gerritcodereview.com/releases/2.16.md[deprecated].
In this case, use link:#set-project-description[PUT] instead.
.Request
----
PUT /projects/plugins%2Freplication/description HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commit_message": "Update the project description"
}
----
.Response
----
HTTP/1.1 204 No Content
----
[[get-project-parent]]
=== Get Project Parent
--
'GET /projects/link:#project-name[\{project-name\}]/parent'
--
Retrieves the name of a project's parent project. For the
`All-Projects` root project an empty string is returned.
.Request
----
GET /projects/plugins%2Freplication/parent HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"All-Projects"
----
[[set-project-parent]]
=== Set Project Parent
--
'PUT /projects/link:#project-name[\{project-name\}]/parent'
--
Sets the parent project for a project.
The new name of the parent project must be provided in the request body
inside a link:#project-parent-input[ProjectParentInput] entity.
.Request
----
PUT /projects/plugins%2Freplication/parent HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"parent": "Public-Plugins",
"commit_message": "Update the project parent"
}
----
As response the new parent project name is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"Public-Plugins"
----
[[get-head]]
=== Get HEAD
--
'GET /projects/link:#project-name[\{project-name\}]/HEAD'
--
Retrieves for a project the name of the branch to which `HEAD` points.
.Request
----
GET /projects/plugins%2Freplication/HEAD HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"refs/heads/master"
----
[[set-head]]
=== Set HEAD
--
'PUT /projects/link:#project-name[\{project-name\}]/HEAD'
--
Sets `HEAD` for a project.
The new ref to which `HEAD` should point must be provided in the
request body inside a link:#head-input[HeadInput] entity.
.Request
----
PUT /projects/plugins%2Freplication/HEAD HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"ref": "refs/heads/stable"
}
----
As response the new ref to which `HEAD` points is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"refs/heads/stable"
----
[[get-repository-statistics]]
=== Get Repository Statistics
--
'GET /projects/link:#project-name[\{project-name\}]/statistics.git'
--
Return statistics for the repository of a project.
.Request
----
GET /projects/plugins%2Freplication/statistics.git HTTP/1.0
----
The repository statistics are returned as a
link:#repository-statistics-info[RepositoryStatisticsInfo] entity.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"number_of_loose_objects": 127,
"number_of_loose_refs": 15,
"number_of_pack_files": 15,
"number_of_packed_objects": 67,
"number_of_packed_refs": 0,
"size_of_loose_objects": 29466,
"size_of_packed_objects": 9646
}
----
[[get-config]]
=== Get Config
--
'GET /projects/link:#project-name[\{project-name\}]/config'
--
Gets some configuration information about a project. Note that this
config info is not simply the contents of `project.config`; it generally
contains fields that may have been inherited from parent projects.
.Request
----
GET /projects/myproject/config
----
A link:#config-info[ConfigInfo] entity is returned that describes the
project configuration. Some fields are only visible to users that have
read access to `refs/meta/config`.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"description": "demo project",
"use_contributor_agreements": {
"value": true,
"configured_value": "TRUE",
"inherited_value": false
},
"use_content_merge": {
"value": true,
"configured_value": "INHERIT",
"inherited_value": true
},
"use_signed_off_by": {
"value": false,
"configured_value": "INHERIT",
"inherited_value": false
},
"create_new_change_for_all_not_in_target": {
"value": false,
"configured_value": "INHERIT",
"inherited_value": false
},
"require_change_id": {
"value": false,
"configured_value": "FALSE",
"inherited_value": true
},
"max_object_size_limit": {
"value": "15m",
"configured_value": "15m",
"inherited_value": "20m"
},
"submit_type": "INHERIT",
"default_submit_type": {
"value": "MERGE_IF_NECESSARY",
"configured_value": "INHERIT",
"inherited_value": "MERGE_IF_NECESSARY"
},
"state": "ACTIVE",
"commentlinks": {},
"plugin_config": {
"helloworld": {
"language": {
"display_name": "Preferred Language",
"type": "STRING",
"value": "en"
}
}
},
"actions": {
"cookbook~hello-project": {
"method": "POST",
"label": "Say hello",
"title": "Say hello in different languages",
"enabled": true
}
}
}
----
[[set-config]]
=== Set Config
--
'PUT /projects/link:#project-name[\{project-name\}]/config'
--
Sets the configuration of a project.
The new configuration must be provided in the request body as a
link:#config-input[ConfigInput] entity.
.Request
----
PUT /projects/myproject/config HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"description": "demo project",
"use_contributor_agreements": "FALSE",
"use_content_merge": "INHERIT",
"use_signed_off_by": "INHERIT",
"create_new_change_for_all_not_in_target": "INHERIT",
"enable_signed_push": "INHERIT",
"require_signed_push": "INHERIT",
"reject_implicit_merges": "INHERIT",
"require_change_id": "TRUE",
"max_object_size_limit": "10m",
"submit_type": "REBASE_IF_NECESSARY",
"state": "ACTIVE"
}
----
As response the new configuration is returned as a link:#config-info[
ConfigInfo] entity.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"use_contributor_agreements": {
"value": false,
"configured_value": "FALSE",
"inherited_value": false
},
"use_content_merge": {
"value": true,
"configured_value": "INHERIT",
"inherited_value": true
},
"use_signed_off_by": {
"value": false,
"configured_value": "INHERIT",
"inherited_value": false
},
"create_new_change_for_all_not_in_target": {
"value": true,
"configured_value": "INHERIT",
"inherited_value": false
},
"require_change_id": {
"value": true,
"configured_value": "TRUE",
"inherited_value": true
},
"enable_signed_push": {
"value": true,
"configured_value": "INHERIT",
"inherited_value": false
},
"require_signed_push": {
"value": false,
"configured_value": "INHERIT",
"inherited_value": false
},
"reject_implicit_merges": {
"value": false,
"configured_value": "INHERIT",
"inherited_value": false
},
"max_object_size_limit": {
"value": "10m",
"configured_value": "10m",
"inherited_value": "20m"
},
"submit_type": "REBASE_IF_NECESSARY",
"default_submit_type": {
"value": "REBASE_IF_NECESSARY",
"configured_value": "INHERIT",
"inherited_value": "REBASE_IF_NECESSARY"
},
"state": "ACTIVE",
"commentlinks": {}
}
----
[[run-gc]]
=== Run GC
--
'POST /projects/link:#project-name[\{project-name\}]/gc'
--
Run the Git garbage collection for the repository of a project.
Options for the Git garbage collection can be specified in the
request body as a link:#gc-input[GCInput] entity.
.Request
----
POST /projects/plugins%2Freplication/gc HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"show_progress": true
}
----
The response is the streamed output of the garbage collection.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: text/plain; charset=UTF-8
collecting garbage for "plugins/replication":
Pack refs: 100% (21/21)
Counting objects: 20
Finding sources: 100% (20/20)
Getting sizes: 100% (13/13)
Compressing objects: 83% (5/6)
Writing objects: 100% (20/20)
Selecting commits: 100% (7/7)
Building bitmaps: 100% (7/7)
Finding sources: 100% (41/41)
Getting sizes: 100% (25/25)
Compressing objects: 52% (12/23)
Writing objects: 100% (41/41)
Prune loose objects also found in pack files: 100% (36/36)
Prune loose, unreferenced objects: 100% (36/36)
done.
----
==== Asynchronous Execution
The option `async` allows to schedule a background task that asynchronously
executes a Git garbage collection.
The `Location` header of the response refers to the link:rest-api-config.html#get-task[background task]
which allows to inspect the progress of its execution. In case of asynchronous
execution the `show_progress` option is ignored.
.Request
----
POST /projects/plugins%2Freplication/gc HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"async": true
}
----
The response is empty.
.Response
----
HTTP/1.1 202 Accepted
Content-Disposition: attachment
Location: https:<host>/a/config/server/tasks/383a0602
----
[[ban-commit]]
=== Ban Commit
--
'PUT /projects/link:#project-name[\{project-name\}]/ban'
--
Marks commits as banned for the project. If a commit is banned Gerrit
rejects every push that includes this commit with
link:error-contains-banned-commit.html[contains banned commit ...].
[NOTE]
This REST endpoint only marks the commits as banned, but it does not
remove the commits from the history of any central branch. This needs
to be done manually.
The commits to be banned must be specified in the request body as a
link:#ban-input[BanInput] entity.
The caller must be project owner.
.Request
----
PUT /projects/plugins%2Freplication/ban HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commits": [
"a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96",
"cf5b56541f84b8b57e16810b18daca9c3adc377b"
],
"reason": "Violates IP"
}
----
As response a link:#ban-result-info[BanResultInfo] entity is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"newly_banned": [
"a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96",
"cf5b56541f84b8b57e16810b18daca9c3adc377b"
]
}
----
[[get-access]]
=== List Access Rights for Project
--
'GET /projects/link:rest-api-projects.html#project-name[\{project-name\}]/access'
--
Lists the access rights for a single project.
As result a
link:rest-api-access.html#project-access-info[ProjectAccessInfo]
entity is returned.
.Request
----
GET /projects/MyProject/access HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
)]}'
{
"revision": "61157ed63e14d261b6dca40650472a9b0bd88474",
"inherits_from": {
"id": "All-Projects",
"name": "All-Projects",
"description": "Access inherited by all other projects."
},
"local": {
"refs/*": {
"permissions": {
"read": {
"rules": {
"c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
"action": "ALLOW",
"force": false
},
"global:Anonymous-Users": {
"action": "ALLOW",
"force": false
}
}
}
}
}
},
"is_owner": true,
"owner_of": [
"refs/*"
],
"can_upload": true,
"can_add": true,
"can_add_tags": true,
"config_visible": true,
"groups": {
"c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
"url": "#/admin/groups/uuid-c2ce4749a32ceb82cd6adcce65b8216e12afb41c",
"options": {},
"description": "Users who perform batch actions on Gerrit",
"group_id": 2,
"owner": "Administrators",
"owner_id": "d5b7124af4de52924ed397913e2c3b37bf186948",
"created_on": "2009-06-08 23:31:00.000000000",
"name": "Non-Interactive Users"
},
"global:Anonymous-Users": {
"options": {},
"name": "Anonymous Users"
}
}
}
----
[[set-access]]
=== Add, Update and Delete Access Rights for Project
--
'POST /projects/link:rest-api-projects.html#project-name[\{project-name\}]/access'
--
Sets access rights for the project using the diff schema provided by
link:#project-access-input[ProjectAccessInput]. Deductions are used to
remove access sections, permissions or permission rules. The backend will remove
the entity with the finest granularity in the request, meaning that if an
access section without permissions is posted, the access section will be
removed; if an access section with a permission but no permission rules is
posted, the permission will be removed; if an access section with a permission
and a permission rule is posted, the permission rule will be removed.
Additionally, access sections and permissions will be cleaned up after applying
the deductions by removing items that have no child elements.
After removals have been applied, additions will be applied.
As result a
link:rest-api-access.html#project-access-info[ProjectAccessInfo]
entity is returned.
.Request
----
POST /projects/MyProject/access HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"remove": {
"refs/*": {
"permissions": {
"read": {
"rules": {
"c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
"action": "ALLOW"
}
}
}
}
}
}
}
----
.Response
----
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
)]}'
{
"revision": "61157ed63e14d261b6dca40650472a9b0bd88474",
"inherits_from": {
"id": "All-Projects",
"name": "All-Projects",
"description": "Access inherited by all other projects."
},
"local": {
"refs/*": {
"permissions": {
"read": {
"rules": {
"global:Anonymous-Users": {
"action": "ALLOW",
"force": false
}
}
}
}
}
},
"is_owner": true,
"owner_of": [
"refs/*"
],
"can_upload": true,
"can_add": true,
"can_add_tags": true,
"config_visible": true,
"groups": {
"global:Anonymous-Users": {
"options": {},
"name": "Anonymous Users"
}
}
}
----
[[create-access-change]]
=== Create Access Rights Change for review.
--
'PUT /projects/link:rest-api-projects.html#project-name[\{project-name\}]/access:review
--
Sets access rights for the project using the diff schema provided by
link:#project-access-input[ProjectAccessInput]
This takes the same input as link:#set-access[Update Access Rights], but creates a pending
change for review. Like link:#create-change[Create Change], it returns
a link:#change-info[ChangeInfo] entity describing the resulting change.
.Request
----
PUT /projects/MyProject/access:review HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"add": {
"refs/heads/*": {
"permissions": {
"read": {
"rules": {
"global:Anonymous-Users": {
"action": "DENY",
"force": false
}
}
}
}
}
}
}
----
.Response
----
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "testproj~refs%2Fmeta%2Fconfig~Ieaf185bf90a1fc3b58461e399385e158a20b31a2",
"project": "testproj",
"branch": "refs/meta/config",
"hashtags": [],
"change_id": "Ieaf185bf90a1fc3b58461e399385e158a20b31a2",
"subject": "Review access change",
"status": "NEW",
"created": "2017-09-07 14:31:11.852000000",
"updated": "2017-09-07 14:31:11.852000000",
"submit_type": "CHERRY_PICK",
"mergeable": true,
"insertions": 2,
"deletions": 0,
"unresolved_comment_count": 0,
"has_review_started": true,
"_number": 7,
"owner": {
"_account_id": 1000000
}
}
----
[[check-access]]
=== Check Access
--
'GET /projects/MyProject/check.access?account=1000098&ref=refs%2Fheads%2Fsecret%2Fbla'
--
This command runs access checks for other users. This requires the
link:access-control.html#capability_viewAccess[View Access] global
capability.
The result is a link:#access-check-info[AccessCheckInfo] entity
detailing the access of the given user for the given project,
project-ref, or project-permission-ref combination.
.Response
----
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
)]}'
{
"message": "user Kristen Burns \u003cKristen.Burns@gerritcodereview.com\u003e (1000098) cannot see ref refs/heads/secret/bla in project MyProject",
"status": 403
}
----
[[check-access-options]]
==== Check Access Options
Account(account)::
The account for which to check access. Mandatory.
Permission(perm)::
The ref permission for which to check access. If not specified, read
access to at least branch is checked.
Ref(ref)::
The branch for which to check access. This must be given if `perm` is specified.
[[index]]
=== Index project
Adds or updates the current project (and children, if specified) in the secondary index.
The indexing task is executed asynchronously in background and this command returns
immediately if `async` is specified in the input.
As an input, a link:#index-project-input[IndexProjectInput] entity can be provided.
.Request
----
POST /projects/MyProject/index HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"index_children": "true"
"async": "true"
}
----
.Response
----
HTTP/1.1 202 Accepted
Content-Disposition: attachment
----
[[index.changes]]
=== Index all changes in a project
Adds or updates all the changes belonging to a project in the secondary index.
The indexing task is executed asynchronously in background, so this command
returns immediately.
.Request
----
POST /projects/MyProject/index.changes HTTP/1.0
----
.Response
----
HTTP/1.1 202 Accepted
Content-Disposition: attachment
----
[[check]]
=== Check project consistency
Performs consistency checks on the project.
Which consistency checks should be performed is controlled by the
link:#check-project-input[CheckProjectInput] entity in the request
body.
The following consistency checks are supported:
[[auto-closeable-changes-check]]
--
* AutoCloseableChangesCheck: Searches for open changes that can be
auto-closed because a patch set of the change is already contained in
the destination branch or because the destination branch contains a
commit with the same Change-Id. Normally Gerrit auto-closes such
changes when the corresponding commits are pushed directly to the
repository. However if a branch is updated behind Gerrit's back or if
auto-closing changes fails (and the push is still successful) change
states can get inconsistent (changes that are already part of the
destination branch are still open). This consistency check is
intended to detect and repair this situation.
--
To fix any problems that can be fixed automatically set the `fix` field
in the inputs for the consistency checks to `true`.
This REST endpoint requires the
link:access-control.html#capability_administrateServer[Administrate Server]
global capability.
.Request
----
POST /projects/MyProject/check HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"auto_closeable_changes_check": {
"fix": true,
"branch": "refs/heads/master",
"max_commits": 100
}
}
----
As response a link:#check-project-result-info[CheckProjectResultInfo]
entity is returned that results for the consistency checks.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"auto_closeable_changes_check_result": {
"auto_closeable_changes": {
"refs/heads/master": [
{
"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",
"insertions": 34,
"deletions": 101,
"_number": 3965,
"owner": {
"name": "John Doe"
},
"problems": [
{
"message": "Patch set 1 (2f15e416237ed9b561199f24184f5f5d2708c584) is merged into destination ref refs/heads/master (2f15e416237ed9b561199f24184f5f5d2708c584), but change status is NEW",
"status": "FIXED",
"outcome": "Marked change as merged"
}
]
}
]
}
}
}
----
[[branch-endpoints]]
== Branch Endpoints
[[list-branches]]
=== List Branches
--
'GET /projects/link:#project-name[\{project-name\}]/branches/'
--
List the branches of a project.
As result a list of link:#branch-info[BranchInfo] entries is
returned.
.Request
----
GET /projects/work%2Fmy-project/branches/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "HEAD",
"revision": "master"
},
{
"ref": "refs/meta/config",
"revision": "76016386a0d8ecc7b6be212424978bb45959d668"
},
{
"ref": "refs/heads/master",
"revision": "67ebf73496383c6777035e374d2d664009e2aa5c"
},
{
"ref": "refs/heads/stable",
"revision": "64ca533bd0eb5252d2fee83f63da67caae9b4674",
"can_delete": true
}
]
----
[[branch-options]]
==== Branch Options
Limit(n)::
Limit the number of branches to be included in the results.
+
.Request
----
GET /projects/testproject/branches?n=1 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "HEAD",
"revision": "master",
}
]
----
Skip(S)::
Skip the given number of branches from the beginning of the list.
+
.Request
----
GET /projects/testproject/branches?n=1&s=0 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "HEAD",
"revision": "master",
}
]
----
Substring(m)::
Limit the results to those branches that match the specified substring.
+
The match is case insensitive. May not be used together with `r`.
+
List all branches that match substring `test`:
+
.Request
----
GET /projects/testproject/branches?m=test HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/heads/test1",
"revision": "9c9d08a438e55e52f33b608415e6dddd9b18550d",
"can_delete": true
}
]
----
Regex(r)::
Limit the results to those branches that match the specified regex.
Boundary matchers '^' and '$' are implicit. For example: the regex 't*' will
match any branches that start with 't' and regex '*t' will match any
branches that end with 't'.
+
The match is case sensitive. May not be used together with `m`.
+
List all branches that match regex `t.*1`:
+
.Request
----
GET /projects/testproject/branches?r=t.*1 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/heads/test1",
"revision": "9c9d08a438e55e52f33b608415e6dddd9b18550d",
"can_delete": true
}
]
----
[[get-branch]]
=== Get Branch
--
'GET /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]'
--
Retrieves a branch of a project.
.Request
----
GET /projects/work%2Fmy-project/branches/master HTTP/1.0
----
As response a link:#branch-info[BranchInfo] entity is returned that
describes the branch.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"ref": "refs/heads/master",
"revision": "67ebf73496383c6777035e374d2d664009e2aa5c"
}
----
[[create-branch]]
=== Create Branch
--
'PUT /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]'
--
Creates a new branch.
In the request body additional data for the branch can be provided as
link:#branch-input[BranchInput].
.Request
----
PUT /projects/MyProject/branches/stable HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"revision": "76016386a0d8ecc7b6be212424978bb45959d668"
}
----
As response a link:#branch-info[BranchInfo] entity is returned that
describes the created branch.
.Response
----
HTTP/1.1 201 Created
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"ref": "refs/heads/stable",
"revision": "76016386a0d8ecc7b6be212424978bb45959d668",
"can_delete": true
}
----
[[delete-branch]]
=== Delete Branch
--
'DELETE /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]'
--
Deletes a branch.
.Request
----
DELETE /projects/MyProject/branches/stable HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[delete-branches]]
=== Delete Branches
--
'POST /projects/link:#project-name[\{project-name\}]/branches:delete'
--
Delete one or more branches.
The branches to be deleted must be provided in the request body as a
link:#delete-branches-input[DeleteBranchesInput] entity.
.Request
----
POST /projects/MyProject/branches:delete HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"branches": [
"stable-1.0",
"stable-2.0"
]
}
----
.Response
----
HTTP/1.1 204 No Content
----
If some branches could not be deleted, the response is "`409 Conflict`" and the
error message is contained in the response body.
[[get-content]]
=== Get Content
--
'GET /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]/files/link:rest-api-changes.html#file-id[\{file-id\}]/content'
--
Gets the content of a file from the HEAD revision of a certain branch.
.Request
----
GET /projects/gerrit/branches/master/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-mergeable-info]]
=== Get Mergeable Information
--
'GET /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]/mergeable'
--
Gets whether the source is mergeable with the target branch.
The `source` query parameter is required, which can be anything that could be
resolved to a commit, see examples of the `source` attribute in
link:rest-api-changes.html#merge-input[MergeInput].
Also takes an optional parameter `strategy`, which can be `recursive`, `resolve`,
`simple-two-way-in-core`, `ours` or `theirs`, default will use project settings.
.Request
----
GET /projects/test/branches/master/mergeable?source=testbranch&strategy=recursive HTTP/1.0
----
As response a link:rest-api-changes.html#mergeable-info[MergeableInfo] entity is returned.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"submit_type": "MERGE_IF_NECESSARY",
"strategy": "recursive",
"mergeable": true,
"commit_merged": false,
"content_merged": false
}
----
or when there were conflicts.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"submit_type": "MERGE_IF_NECESSARY",
"strategy": "recursive",
"mergeable": false,
"conflicts": [
"common.txt",
"shared.txt"
]
}
----
or when the 'testbranch' has been already merged.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"submit_type": "MERGE_IF_NECESSARY",
"strategy": "recursive",
"mergeable": true,
"commit_merged": true,
"content_merged": true
}
----
or when only the content of 'testbranch' has been merged.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"submit_type": "MERGE_IF_NECESSARY",
"strategy": "recursive",
"mergeable": true,
"commit_merged": false,
"content_merged": true
}
----
[[get-reflog]]
=== Get Reflog
--
'GET /projects/link:#project-name[\{project-name\}]/branches/link:#branch-id[\{branch-id\}]/reflog'
--
Gets the reflog of a certain branch.
The caller must be project owner.
.Request
----
GET /projects/gerrit/branches/master/reflog HTTP/1.0
----
As response a list of link:#reflog-entry-info[ReflogEntryInfo] entities
is returned that describe the reflog entries. The reflog entries are
returned in reverse order.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"old_id": "976ced8f4fc0909d7e1584d18455299545881d60",
"new_id": "2eaa94bac536654eb592c941e33b91f925698d16",
"who": {
"name": "Jane Roe",
"email": "jane.roe@example.com",
"date": "2014-06-30 11:53:43.000000000",
"tz": 120
},
"comment": "merged: fast forward"
},
{
"old_id": "c271c6a7161b74f85560c5899c8c73ee89ca5e29",
"new_id": "976ced8f4fc0909d7e1584d18455299545881d60",
"who": {
"name": "John Doe",
"email": "john.doe@example.com",
"date": "2013-10-02 10:45:26.000000000",
"tz": 120
},
"comment": "merged: fast forward"
},
{
"old_id": "0000000000000000000000000000000000000000",
"new_id": "c271c6a7161b74f85560c5899c8c73ee89ca5e29",
"who": {
"name": "John Doe",
"email": "john.doe@example.com",
"date": "2013-09-30 19:08:44.000000000",
"tz": 120
},
"comment": ""
}
]
----
The get reflog endpoint also accepts a limit integer in the `n`
parameter. This limits the results to show the last `n` reflog entries.
Query the last 25 reflog entries.
----
GET /projects/gerrit/branches/master/reflog?n=25 HTTP/1.0
----
The reflog can also be filtered by timestamp by specifying the `from`
and `to` parameters. The timestamp for `from` and `to` must be given as
UTC in the following format: `yyyyMMdd_HHmm`.
----
GET /projects/gerrit/branches/master/reflog?from=20130101_0000&to=20140101_0000=25 HTTP/1.0
----
[[child-project-endpoints]]
== Child Project Endpoints
[[list-child-projects]]
=== List Child Projects
--
'GET /projects/link:#project-name[\{project-name\}]/children/'
--
List the direct child projects of a project.
.Request
----
GET /projects/Public-Plugins/children/ HTTP/1.0
----
As result a list of link:#project-info[ProjectInfo] entries is
returned that describe the child projects.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"id": "plugins%2Freplication",
"name": "plugins/replication",
"parent": "Public-Plugins",
"description": "Copies to other servers using the Git protocol"
},
{
"id": "plugins%2Freviewnotes",
"name": "plugins/reviewnotes",
"parent": "Public-Plugins",
"description": "Annotates merged commits using notes on refs/notes/review."
},
{
"id": "plugins%2Fsingleusergroup",
"name": "plugins/singleusergroup",
"parent": "Public-Plugins",
"description": "GroupBackend enabling users to be directly added to access rules"
}
]
----
To resolve the child projects of a project recursively the parameter
`recursive` can be set.
Child projects that are not visible to the calling user are ignored and
are not resolved further.
.Request
----
GET /projects/Public-Projects/children/?recursive HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"id": "gerrit",
"name": "gerrit",
"parent": "Public-Projects",
"description": "Gerrit Code Review"
},
{
"id": "plugins%2Freplication",
"name": "plugins/replication",
"parent": "Public-Plugins",
"description": "Copies to other servers using the Git protocol"
},
{
"id": "plugins%2Freviewnotes",
"name": "plugins/reviewnotes",
"parent": "Public-Plugins",
"description": "Annotates merged commits using notes on refs/notes/review."
},
{
"id": "plugins%2Fsingleusergroup",
"name": "plugins/singleusergroup",
"parent": "Public-Plugins",
"description": "GroupBackend enabling users to be directly added to access rules"
},
{
"id": "Public-Plugins",
"name": "Public-Plugins",
"parent": "Public-Projects",
"description": "Parent project for plugins/*"
}
]
----
[[get-child-project]]
=== Get Child Project
--
'GET /projects/link:#project-name[\{project-name\}]/children/link:#project-name[\{project-name\}]'
--
Retrieves a child project. If a non-direct child project should be
retrieved the parameter `recursive` must be set.
.Request
----
GET /projects/Public-Plugins/children/plugins%2Freplication HTTP/1.0
----
As response a link:#project-info[ProjectInfo] entity is returned that
describes the child project.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "plugins%2Freplication",
"name": "plugins/replication",
"parent": "Public-Plugins",
"description": "Copies to other servers using the Git protocol"
}
----
[[tag-endpoints]]
== Tag Endpoints
[[create-tag]]
=== Create Tag
--
'PUT /projects/link:#project-name[\{project-name\}]/tags/link:#tag-id[\{tag-id\}]'
--
Create a new tag on the project.
In the request body additional data for the tag can be provided as
link:#tag-input[TagInput].
If a message is provided in the input, the tag is created as an
annotated tag with the current user as tagger. Signed tags are not
supported.
.Request
----
PUT /projects/MyProject/tags/v1.0 HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"message": "annotation",
"revision": "c83117624b5b5d8a7f86093824e2f9c1ed309d63"
}
----
As response a link:#tag-info[TagInfo] entity is returned that describes
the created tag.
.Response
----
HTTP/1.1 201 Created
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
"object": "d48d304adc4b6674e11dc2c018ea05fcbdda32fd",
"message": "annotation",
"tagger": {
"name": "David Pursehouse",
"email": "dpursehouse@collab.net",
"date": "2016-06-06 01:22:03.000000000",
"tz": 540
},
"ref": "refs/tags/v1.0",
"revision": "c83117624b5b5d8a7f86093824e2f9c1ed309d63"
}
----
[[list-tags]]
=== List Tags
--
'GET /projects/link:#project-name[\{project-name\}]/tags/'
--
List the tags of a project.
As result a list of link:#tag-info[TagInfo] entries is returned.
Only includes tags under the `refs/tags/` namespace.
.Request
----
GET /projects/work%2Fmy-project/tags/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/tags/v1.0",
"revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Annotated tag",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 07:35:03.000000000",
"tz": 540
}
},
{
"ref": "refs/tags/v2.0",
"revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
},
{
"ref": "refs/tags/v3.0",
"revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 09:02:16.000000000",
"tz": 540
}
}
]
----
[[tag-options]]
==== Tag Options
Limit(n)::
Limit the number of tags to be included in the results.
+
.Request
----
GET /projects/work%2Fmy-project/tags?n=2 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/tags/v1.0",
"revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Annotated tag",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 07:35:03.000000000",
"tz": 540
}
},
{
"ref": "refs/tags/v2.0",
"revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
}
]
----
Skip(S)::
Skip the given number of tags from the beginning of the list.
+
.Request
----
GET /projects/work%2Fmy-project/tags?n=2&s=1 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/tags/v2.0",
"revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
},
{
"ref": "refs/tags/v3.0",
"revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 09:02:16.000000000",
"tz": 540
}
}
]
----
Substring(m)::
Limit the results to those tags that match the specified substring.
+
The match is case insensitive. May not be used together with `r`.
+
List all tags that match substring `v2`:
+
.Request
----
GET /projects/testproject/tags?m=v2 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/tags/v2.0",
"revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
},
]
----
Regex(r)::
Limit the results to those tags that match the specified regex.
Boundary matchers '^' and '$' are implicit. For example: the regex 't*' will
match any tags that start with 't' and regex '*t' will match any
tags that end with 't'.
+
The match is case sensitive. May not be used together with `m`.
+
List all tags that match regex `v.*0`:
+
.Request
----
GET /projects/testproject/tags?r=v.*0 HTTP/1.0
----
+
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"ref": "refs/tags/v1.0",
"revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Annotated tag",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 07:35:03.000000000",
"tz": 540
}
},
{
"ref": "refs/tags/v2.0",
"revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
},
{
"ref": "refs/tags/v3.0",
"revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 09:02:16.000000000",
"tz": 540
}
}
]
----
[[get-tag]]
=== Get Tag
--
'GET /projects/link:#project-name[\{project-name\}]/tags/link:#tag-id[\{tag-id\}]'
--
Retrieves a tag of a project.
.Request
----
GET /projects/work%2Fmy-project/tags/v1.0 HTTP/1.0
----
As response a link:#tag-info[TagInfo] entity is returned that describes the tag.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"ref": "refs/tags/v1.0",
"revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
"object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
"message": "Annotated tag",
"tagger": {
"name": "David Pursehouse",
"email": "david.pursehouse@sonymobile.com",
"date": "2014-10-06 07:35:03.000000000",
"tz": 540
}
}
----
[[delete-tag]]
=== Delete Tag
--
'DELETE /projects/link:#project-name[\{project-name\}]/tags/link:#tag-id[\{tag-id\}]'
--
Deletes a tag.
.Request
----
DELETE /projects/MyProject/tags/v1.0 HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[delete-tags]]
=== Delete Tags
--
'POST /projects/link:#project-name[\{project-name\}]/tags:delete'
--
Delete one or more tags.
The tags to be deleted must be provided in the request body as a
link:#delete-tags-input[DeleteTagsInput] entity.
.Request
----
POST /projects/MyProject/tags:delete HTTP/1.0
Content-Type: application/json;charset=UTF-8
{
"tags": [
"v1.0",
"v2.0"
]
}
----
.Response
----
HTTP/1.1 204 No Content
----
If some tags could not be deleted, the response is "`409 Conflict`" and the
error message is contained in the response body.
[[commit-endpoints]]
== Commit Endpoints
[[get-commit]]
=== Get Commit
--
'GET /projects/link:#project-name[\{project-name\}]/commits/link:#commit-id[\{commit-id\}]'
--
Retrieves a commit of a project.
The commit must be visible to the caller.
.Request
----
GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96 HTTP/1.0
----
As response a link:rest-api-changes.html#commit-info[CommitInfo] entity
is returned that describes the commit.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"commit": "184ebe53805e102605d11f6b143486d15c23a09c",
"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-included-in]]
=== Get Included In
--
'GET /projects/link:#project-name[\{project-name\}]/commits/link:#commit-id[\{commit-id\}]/in'
--
Retrieves the branches and tags in which a change is included. As result
an link:rest-api-changes.html#included-in-info[IncludedInInfo] entity is returned.
.Request
----
GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/in HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json;charset=UTF-8
)]}'
{
"branches": [
"master"
],
"tags": []
}
----
[[get-content-from-commit]]
=== Get Content
--
'GET /projects/link:#project-name[\{project-name\}]/commits/link:#commit-id[\{commit-id\}]/files/link:rest-api-changes.html#file-id[\{file-id\}]/content'
--
Gets the content of a file from a certain commit.
.Request
----
GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/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...
----
[[cherry-pick-commit]]
=== Cherry Pick Commit
--
'POST /projects/link:#project-name[\{project-name\}]/commits/link:#commit-id[\{commit-id\}]/cherrypick'
--
Cherry-picks a commit of a project to a destination branch.
To cherry pick a change revision, see link:rest-api-changes.html#cherry-pick[CherryPick].
The destination branch must be provided in the request body inside a
link:rest-api-changes.html#cherrypick-input[CherryPickInput] entity.
If the commit message is not set, the commit message of the source
commit will be used.
.Request
----
POST /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/cherrypick HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"message" : "Implementing Feature X",
"destination" : "release-branch"
}
----
As response a link:rest-api-changes.html#cherry-pick-change-info[
CherryPickChangeInfo] 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
)]}'
{
"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,
"insertions": 12,
"deletions": 11,
"_number": 3965,
"owner": {
"name": "John Doe"
}
}
----
[[list-files]]
=== List Files
--
'GET /projects/link:#project-name[\{project-name\}]/commits/link:#commit-id[\{commit-id\}]/files/'
--
Lists the files that were modified, added or deleted in a commit.
.Request
----
GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/files/ HTTP/1.0
----
As result a map is returned that maps the link:rest-api-changes.html#file-id[file path] to a
link:rest-api-changes.html#file-info[FileInfo] entry. 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,
"size_delta": 551,
"size": 551
},
"gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": {
"lines_inserted": 5,
"lines_deleted": 3,
"size_delta": 98,
"size": 23348
}
}
----
The integer-valued request parameter `parent` changes the response to return a
list of the files which are different in this commit compared to the given
parent commit. This is useful for supporting review of merge commits. The value
is the 1-based index of the parent's position in the commit object.
[[dashboard-endpoints]]
== Dashboard Endpoints
[[list-dashboards]]
=== List Dashboards
--
'GET /projects/link:#project-name[\{project-name\}]/dashboards/'
--
List custom dashboards for a project.
As result a list of link:#dashboard-info[DashboardInfo] entries is
returned.
List all dashboards for the `work/my-project` project:
.Request
----
GET /projects/work%2Fmy-project/dashboards/ HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"id": "main:closed",
"ref": "main",
"path": "closed",
"description": "Merged and abandoned changes in last 7 weeks",
"url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
"is_default": true,
"title": "Closed changes",
"sections": [
{
"name": "Merged",
"query": "status:merged age:7w"
},
{
"name": "Abandoned",
"query": "status:abandoned age:7w"
}
]
}
]
----
.Get all dashboards of the 'All-Projects' project
****
get::/projects/All-Projects/dashboards/
****
[[get-dashboard]]
=== Get Dashboard
--
'GET /projects/link:#project-name[\{project-name\}]/dashboards/link:#dashboard-id[\{dashboard-id\}]'
--
Retrieves a project dashboard. The dashboard can be defined on that
project or be inherited from a parent project.
.Request
----
GET /projects/work%2Fmy-project/dashboards/main:closed HTTP/1.0
----
As response a link:#dashboard-info[DashboardInfo] entity is returned
that describes the dashboard.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "main:closed",
"ref": "main",
"path": "closed",
"description": "Merged and abandoned changes in last 7 weeks",
"url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
"is_default": true,
"title": "Closed changes",
"sections": [
{
"name": "Merged",
"query": "status:merged age:7w"
},
{
"name": "Abandoned",
"query": "status:abandoned age:7w"
}
]
}
----
To retrieve the default dashboard of a project use `default` as
dashboard-id.
.Request
----
GET /projects/work%2Fmy-project/dashboards/default HTTP/1.0
----
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "main:closed",
"ref": "main",
"path": "closed",
"description": "Merged and abandoned changes in last 7 weeks",
"url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
"is_default": true,
"title": "Closed changes",
"sections": [
{
"name": "Merged",
"query": "status:merged age:7w"
},
{
"name": "Abandoned",
"query": "status:abandoned age:7w"
}
]
}
----
[[create-dashboard]]
=== Create Dashboard
--
'PUT /projects/link:#project-name[\{project-name\}]/dashboards/link:#dashboard-id[\{dashboard-id\}]'
--
Creates a project dashboard, if a project dashboard with the given
dashboard ID doesn't exist yet.
Currently only supported for the `default` dashboard.
The creation information for the dashboard must be provided in
the request body as a link:#dashboard-input[DashboardInput] entity.
.Request
----
PUT /projects/work%2Fmy-project/dashboards/default HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"id": "main:closed",
"commit_message": "Define the default dashboard"
}
----
As response the new dashboard is returned as a link:#dashboard-info[
DashboardInfo] entity.
.Response
----
HTTP/1.1 201 Created
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "main:closed",
"ref": "main",
"path": "closed",
"description": "Merged and abandoned changes in last 7 weeks",
"url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
"is_default": true,
"title": "Closed changes",
"sections": [
{
"name": "Merged",
"query": "status:merged age:7w"
},
{
"name": "Abandoned",
"query": "status:abandoned age:7w"
}
]
}
----
[[update-dashboard]]
=== Update Dashboard
--
'PUT /projects/link:#project-name[\{project-name\}]/dashboards/link:#dashboard-id[\{dashboard-id\}]'
--
Updates a project dashboard, if a project dashboard with the given
dashboard ID already exists.
Currently only supported for the `default` dashboard.
The update information for the dashboard must be provided in
the request body as a link:#dashboard-input[DashboardInput] entity.
.Request
----
PUT /projects/work%2Fmy-project/dashboards/default HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"id": "main:closed",
"commit_message": "Update the default dashboard"
}
----
As response the updated dashboard is returned as a
link:#dashboard-info[DashboardInfo] entity.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"id": "main:closed",
"ref": "main",
"path": "closed",
"description": "Merged and abandoned changes in last 7 weeks",
"url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
"is_default": true,
"title": "Closed changes",
"sections": [
{
"name": "Merged",
"query": "status:merged age:7w"
},
{
"name": "Abandoned",
"query": "status:abandoned age:7w"
}
]
}
----
[[delete-dashboard]]
=== Delete Dashboard
--
'DELETE /projects/link:#project-name[\{project-name\}]/dashboards/link:#dashboard-id[\{dashboard-id\}]'
--
Deletes a project dashboard.
Currently only supported for the `default` dashboard.
The request body does not need to include a link:#dashboard-input[
DashboardInput] entity if no commit message is specified.
Please note that some proxies prohibit request bodies for DELETE
requests.
.Request
----
DELETE /projects/work%2Fmy-project/dashboards/default HTTP/1.0
----
.Response
----
HTTP/1.1 204 No Content
----
[[label-endpoints]]
== Label Endpoints
[[list-labels]]
=== List Labels
--
'GET /projects/link:#project-name[\{project-name\}]/labels/'
--
Lists the labels that are defined in this project.
The calling user must have read access to the `refs/meta/config` branch of the
project.
.Request
----
GET /projects/All-Projects/labels/ HTTP/1.0
----
As result a list of link:#label-definition-info[LabelDefinitionInfo] entities
is returned that describe the labels that are defined in this project
(inherited labels are not returned unless the `inherited` parameter is set, see
link:#list-with-inherited-labels[below]). The returned labels are sorted by
label name.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"name": "Code-Review",
"project": "All-Projects",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_min_score": true,
"copy_all_scores_if_no_change": true,
"copy_all_scores_on_trivial_rebase": true,
"allow_post_submit": true
}
]
----
[[list-with-inherited-labels]]
To include inherited labels from all parent projects the parameter `inherited`
can be set.
The calling user must have read access to the `refs/meta/config` branch of the
project and all its parent projects.
.Request
----
GET /projects/My-Project/labels/?inherited HTTP/1.0
----
As result a list of link:#label-definition-info[LabelDefinitionInfo] entities
is returned that describe the labels that are defined in this project and in
all its parent projects. The returned labels are sorted by parent projects
in-order from `All-Projects` through the project hierarchy to this project.
Labels that belong to the same project are sorted by label name.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"name": "Code-Review",
"project": "All-Projects",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_min_score": true,
"copy_all_scores_if_no_change": true,
"copy_all_scores_on_trivial_rebase": true,
"allow_post_submit": true
},
{
"name": "Foo-Review",
"project": "My-Project",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_any_score": true,
"allow_post_submit": true
}
]
----
[[get-label]]
=== Get Label
--
'GET /projects/link:#project-name[\{project-name\}]/labels/link:#label-name[\{label-name\}]'
--
Retrieves the definition of a label that is defined in this project.
The calling user must have read access to the `refs/meta/config` branch of the
project.
.Request
----
GET /projects/All-Projects/labels/Code-Review HTTP/1.0
----
As response a link:#label-definition-info[LabelDefinitionInfo] entity is
returned that describes the label.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"name": "Code-Review",
"project": "All-Projects",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_min_score": true,
"copy_all_scores_if_no_change": true,
"copy_all_scores_on_trivial_rebase": true,
"allow_post_submit": true
}
----
[[create-label]]
=== Create Label
--
'PUT /projects/link:#project-name[\{project-name\}]/labels/link:#label-name[\{label-name\}]'
--
Creates a new label definition in this project.
The calling user must have write access to the `refs/meta/config` branch of the
project.
If a label with this name is already defined in this project, this label
definition is updated (see link:#set-label[Set Label]).
.Request
----
PUT /projects/My-Project/labels/Foo HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commit_message": "Create Foo Label",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
}
}
----
As response a link:#label-definition-info[LabelDefinitionInfo] entity is
returned that describes the created label.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"name": "Foo",
"project_name": "My-Project",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_all_scores_if_no_change": true,
"allow_post_submit": true
}
----
[[set-label]]
=== Set Label
--
'PUT /projects/link:#project-name[\{project-name\}]/labels/link:#label-name[\{label-name\}]'
--
Updates the definition of a label that is defined in this project.
The calling user must have write access to the `refs/meta/config` branch of the
project.
Properties which are not set in the input entity are not modified.
.Request
----
PUT /projects/All-Projects/labels/Code-Review HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commit_message": "Ignore self approvals for Code-Review label",
"ignore_self_approval": true
}
----
As response a link:#label-definition-info[LabelDefinitionInfo] entity is
returned that describes the updated label.
.Response
----
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"name": "Code-Review",
"project": "All-Projects",
"function": "MaxWithBlock",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
},
"default_value": 0,
"can_override": true,
"copy_min_score": true,
"copy_all_scores_if_no_change": true,
"copy_all_scores_on_trivial_rebase": true,
"allow_post_submit": true,
"ignore_self_approval": true
}
----
[[delete-label]]
=== Delete Label
--
'DELETE /projects/link:#project-name[\{project-name\}]/labels/link:#label-name[\{label-name\}]'
--
Deletes the definition of a label that is defined in this project.
The calling user must have write access to the `refs/meta/config` branch of the
project.
The request body does not need to include a link:#delete-label-input[
DeleteLabelInput] entity if no commit message is specified.
.Request
----
DELETE /projects/My-Project/labels/Foo-Review HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commit_message": "Delete Foo-Review label",
}
----
If a label was deleted the response is "`204 No Content`".
.Response
----
HTTP/1.1 204 No Content
----
[[batch-update-labels]]
=== Batch Update Labels
--
'POST /projects/link:#project-name[\{project-name\}]/labels/'
--
Creates/updates/deletes multiple label definitions in this project at once.
The calling user must have write access to the `refs/meta/config` branch of the
project.
The updates must be specified in the request body as
link:#batch-label-input[BatchLabelInput] entity.
The updates are processed in the following order:
1. label deletions
2. label creations
3. label updates
.Request
----
POST /projects/My-Project/labels/ HTTP/1.0
Content-Type: application/json; charset=UTF-8
{
"commit_message": "Update Labels",
"delete": [
"Old-Review",
"Unused-Review"
],
"create": [
{
"name": "Foo-Review",
"values": {
" 0": "No score",
"-1": "I would prefer this is not merged as is",
"-2": "This shall not be merged",
"+1": "Looks good to me, but someone else must approve",
"+2": "Looks good to me, approved"
}
],
"update:" {
"Bar-Review": {
"function": "MaxWithBlock"
},
"Baz-Review": {
"copy_min_score": true
}
}
}
----
If the label updates were done successfully the response is "`200 OK`".
.Response
----
HTTP/1.1 200 OK
----
[[ids]]
== IDs
[[branch-id]]
=== \{branch-id\}
The name of a branch or `HEAD`. The prefix `refs/heads/` can be
omitted.
[[commit-id]]
=== \{commit-id\}
Commit ID.
[[tag-id]]
=== \{tag-id\}
The name of a tag. The prefix `refs/tags/` can be omitted.
[[dashboard-id]]
=== \{dashboard-id\}
The ID of a dashboard in the format '<ref>:<path>'.
A special dashboard ID is `default` which represents the default
dashboard of a project.
[[label-name]]
=== \{label-name\}
The name of a review label.
[[project-name]]
=== \{project-name\}
The name of the project.
If the name ends with `.git`, the suffix will be automatically removed.
[[json-entities]]
== JSON Entities
[[access-check-info]]
=== AccessCheckInfo
The `AccessCheckInfo` entity is the result of an access check.
[options="header",cols="1,^1,5"]
|=========================================
|Field Name ||Description
|`status` ||The HTTP status code for the access.
200 means success and 403 means denied.
|`message` |optional|A clarifying message if `status` is not 200.
|=========================================
[[auto_closeable_changes_check_input]]
=== AutoCloseableChangesCheckInput
The `AutoCloseableChangesCheckInput` entity contains options for running
the link:#auto-closeable-changes-check[AutoCloseableChangesCheck].
[options="header",cols="1,^2,4"]
|=============================
|Field Name ||Description
|`fix` |optional|
Whether auto-closeable changes should be closed automatically.
|`branch` ||
The branch for which the link:#auto-closeable-changes-check[
AutoCloseableChangesCheck] should be performed. The 'refs/heads/'
prefix for the branch name can be omitted.
|`skip_commits` |optional|
Number of commits that should be skipped when walking the commits of
the branch.
|`max_commits` |optional|
Maximum number of commits to walk. If not specified this defaults to
10,000 commits. 10,000 is also the maximum that can be set.
Auto-closing changes is an expensive operation and the more commits
are walked the slower it gets. This is why you should avoid walking too
many commits.
|=============================
[[auto_closeable_changes_check_result]]
=== AutoCloseableChangesCheckResult
The `AutoCloseableChangesCheckResult` entity contains the results of
running the link:#auto-closeable-changes-check[AutoCloseableChangesCheck]
on a project.
[options="header",cols="1,6"]
|====================================
|Field Name |Description
|`auto_closeable_changes`|
Changes that can be auto-closed as list of
link:rest-api-changes.html#change-info[ChangeInfo] entities. For each
returned link:rest-api-changes.html#change-info[ChangeInfo] entity the
`problems` field is populated that includes details about the detected
issues. If `fix` in the link:#auto_closeable_changes_check_input[
AutoCloseableChangesCheckInput] was set to `true`, `status` and
`outcome` in link:rest-api-changes.html#problem-info[ProblemInfo] are
populated. If the status says `FIXED` Gerrit was able to auto-close the
change now.
|====================================
[[ban-input]]
=== BanInput
The `BanInput` entity contains information for banning commits in a
project.
[options="header",cols="1,^2,4"]
|=======================
|Field Name||Description
|`commits` ||List of commits to be banned.
|`reason` |optional|Reason for banning the commits.
|=======================
[[ban-result-info]]
=== BanResultInfo
The `BanResultInfo` entity describes the result of banning commits.
[options="header",cols="1,^2,4"]
|=============================
|Field Name ||Description
|`newly_banned` |optional|List of newly banned commits.
|`already_banned`|optional|List of commits that were already banned.
|`ignored` |optional|List of object IDs that were ignored.
|=============================
[[branch-info]]
=== BranchInfo
The `BranchInfo` entity contains information about a branch.
[options="header",cols="1,^2,4"]
|=========================
|Field Name ||Description
|`ref` ||The ref of the branch.
|`revision` ||The revision to which the branch points.
|`can_delete`|not set if `false`|
Whether the calling user can delete this branch.
|`web_links` |optional|
Links to the branch in external sites as a list of
link:rest-api-changes.html#web-link-info[WebLinkInfo] entries.
|=========================
[[branch-input]]
=== BranchInput
The `BranchInput` entity contains information for the creation of
a new branch.
[options="header",cols="1,^2,4"]
|=======================
|Field Name||Description
|`ref` |optional|
The name of the branch. The prefix `refs/heads/` can be
omitted. +
If set, must match the branch ID in the URL.
|`revision`|optional|
The base revision of the new branch. +
If not set, `HEAD` will be used as base revision.
|=======================
[[check-project-input]]
=== CheckProjectInput
The `CheckProjectInput` entity contains information about which
consistency checks should be run on a project.
[options="header",cols="1,^2,4"]
|===========================================
|Field Name ||Description
|`auto_closeable_changes_check`|optional|
Parameters for the link:#auto-closeable-changes-check[
AutoCloseableChangesCheck] as
link:rest-api-changes.html#auto_closeable_changes_check_input[
AutoCloseableChangesCheckInput] entity.
|===========================================
[[check-project-result-info]]
=== CheckProjectResultInfo
The `CheckProjectResultInfo` entity contains results for consistency
checks that have been run on a project.
[options="header",cols="1,^2,4"]
|==================================================
|Field Name ||Description
|`auto_closeable_changes_check_result`|optional|
Results for the link:#auto-closeable-changes-check[
AutoCloseableChangesCheck] as
link:rest-api-changes.html#auto_closeable_changes_check_result[
AutoCloseableChangesCheckResult] entity.
|==================================================
[[commentlink-info]]
=== CommentLinkInfo
The `CommentLinkInfo` entity describes a
link:config-gerrit.html#commentlink[commentlink].
[options="header",cols="1,^2,4"]
|==================================================
|Field Name | |Description
|`match` | |A JavaScript regular expression to match
positions to be replaced with a hyperlink, as documented in
link:config-gerrit.html#commentlink.name.match[commentlink.name.match].
|`link` | |The URL to direct the user to whenever the
regular expression is matched, as documented in
link:config-gerrit.html#commentlink.name.link[commentlink.name.link].
|`enabled` |optional|Whether the commentlink is enabled, as documented
in link:config-gerrit.html#commentlink.name.enabled[
commentlink.name.enabled]. If not set the commentlink is enabled.
[[commentlink-input]]
=== CommentLinkInput
The `CommentLinkInput` entity describes the input for a
link:config-gerrit.html#commentlink[commentlink].
|==================================================
[options="header",cols="1,^2,4"]
|==================================================
|Field Name | |Description
|`match` | |A JavaScript regular expression to match
positions to be replaced with a hyperlink, as documented in
link:config-gerrit.html#commentlink.name.match[commentlink.name.match].
|`link` | |The URL to direct the user to whenever the
regular expression is matched, as documented in
link:config-gerrit.html#commentlink.name.link[commentlink.name.link].
|`enabled` |optional|Whether the commentlink is enabled, as documented
in link:config-gerrit.html#commentlink.name.enabled[
commentlink.name.enabled]. If not set the commentlink is enabled.
|==================================================
[[config-info]]
=== ConfigInfo
The `ConfigInfo` entity contains information about the effective project
configuration.
[options="header",cols="1,^2,4"]
|=======================================================
|Field Name ||Description
|`description` |optional|
The description of the project.
|`use_contributor_agreements` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
authors must complete a contributor agreement on the site before
pushing any commits or changes to this project.
|`use_content_merge` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
Gerrit will try to perform a 3-way merge of text file content when a
file has been modified by both the destination branch and the change
being submitted. This option only takes effect if submit type is not
FAST_FORWARD_ONLY.
|`use_signed_off_by` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
each change must contain a Signed-off-by line from either the author or
the uploader in the commit message.
|`create_new_change_for_all_not_in_target` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
a new change is created for every commit not in target branch.
|`require_change_id` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether a
valid link:user-changeid.html[Change-Id] footer in any commit uploaded
for review is required. This does not apply to commits pushed directly
to a branch or tag. This property is deprecated and will be removed in
a future release.
|`enable_signed_push`|optional, not set if signed push is disabled|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
signed push validation is enabled on the project.
|`require_signed_push`|optional, not set if signed push is disabled|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
signed push validation is required on the project.
|`reject_implicit_merges`|optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
implicit merges should be rejected on changes pushed to the project.
|`private_by_default` ||
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
all new changes are set as private by default.
|`work_in_progress_by_default`||
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
all new changes are set as work-in-progress by default.
|`max_object_size_limit` ||
The link:config-gerrit.html#receive.maxObjectSizeLimit[max object size
limit] of this project as a link:#max-object-size-limit-info[
MaxObjectSizeLimitInfo] entity.
|`default_submit_type` ||
link:#submit-type-info[SubmitTypeInfo] that describes the default submit type of
the project, when not overridden at the change level.
|`submit_type` ||
Deprecated; equivalent to link:#submit-type-info[`value`] in
`default_submit_type`.
|`match_author_to_committer_date` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that indicates whether
a change's author date will be changed to match its submitter date upon submit.
|`state` |optional|
The state of the project, can be `ACTIVE`, `READ_ONLY` or `HIDDEN`. +
Not set if the project state is `ACTIVE`.
|`commentlinks` ||
Map with the comment link configurations of the project. The name of
the comment link configuration is mapped to a link:#commentlink-info[
CommentlinkInfo] entity.
|`plugin_config` |optional|
Plugin configuration as map which maps the plugin name to a map of
parameter names to link:#config-parameter-info[ConfigParameterInfo]
entities.
|`actions` |optional|
Actions the caller might be able to perform on this project. The
information is a map of view names to
|`reject_empty_commit` |optional|
link:#inherited-boolean-info[InheritedBooleanInfo] that tells whether
empty commits should be rejected when a change is merged.
link:rest-api-changes.html#action-info[ActionInfo] entities.
|=======================================================
[[config-input]]
=== ConfigInput
The `ConfigInput` entity describes a new project configuration.
[options="header",cols="1,^2,4"]
|======================================================
|Field Name ||Description
|`description` |optional|
The new description of the project. +
If not set, the description is removed.
|`use_contributor_agreements` |optional|
Whether authors must complete a contributor agreement on the site
before pushing any commits or changes to this project. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|`use_content_merge` |optional|
Whether Gerrit will try to perform a 3-way merge of text file content
when a file has been modified by both the destination branch and the
change being submitted. This option only takes effect if submit type is
not FAST_FORWARD_ONLY. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|`use_signed_off_by` |optional|
Whether each change must contain a Signed-off-by line from either the
author or the uploader in the commit message. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|`create_new_change_for_all_not_in_target` |optional|
Whether a new change will be created for every commit not in target
branch. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|`require_change_id` |optional|
Whether a valid link:user-changeid.html[Change-Id] footer in any commit
uploaded for review is required. This does not apply to commits pushed
directly to a branch or tag. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
This property is deprecated and will be removed in
a future release.
|`reject_implicit_merges` |optional|
Whether a check for implicit merges will be performed when changes
are pushed for review. +
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|`max_object_size_limit` |optional|
The link:config-gerrit.html#receive.maxObjectSizeLimit[max object size
limit] of this project as a link:#max-object-size-limit-info[
MaxObjectSizeLimitInfo] entity. +
If set to `0`, the max object size limit is removed. +
If not set, this setting is not updated.
|`submit_type` |optional|
The default submit type of the project, can be `MERGE_IF_NECESSARY`,
`FAST_FORWARD_ONLY`, `REBASE_IF_NECESSARY`, `REBASE_ALWAYS`, `MERGE_ALWAYS` or
`CHERRY_PICK`. +
If not set, the submit type is not updated.
|`state` |optional|
The state of the project, can be `ACTIVE`, `READ_ONLY` or `HIDDEN`. +
Not set if the project state is `ACTIVE`. +
If not set, the project state is not updated.
|`plugin_config_values` |optional|
Plugin configuration values as map which maps the plugin name to a map
of parameter names to values.
|`reject_empty_commit` |optional|
Whether empty commits should be rejected when a change is merged.
Can be `TRUE`, `FALSE` or `INHERIT`. +
If not set, this setting is not updated.
|commentlinks |optional|
Map of commentlink names to link:#commentlink-input[CommentLinkInput]
entities to add or update on the project. If the given commentlink
already exists, it will be updated with the given values, otherwise
it will be created. If the value is null, that entry is deleted.
|======================================================
[[config-parameter-info]]
=== ConfigParameterInfo
The `ConfigParameterInfo` entity describes a project configuration
parameter.
[options="header",cols="1,^2,4"]
|===============================
|Field Name ||Description
|`display_name` |optional|
The display name of the configuration parameter.
|`description` |optional|
The description of the configuration parameter.
|`warning` |optional|
Warning message for the configuration parameter.
|`type` ||
The type of the configuration parameter. Can be `STRING`, `INT`,
`LONG`, `BOOLEAN`, `LIST` or `ARRAY`.
|`value` |optional|
The value of the configuration parameter as string. If the parameter
is inheritable this is the effective value which is deduced from
`configured_value` and `inherited_value`.
|`values` |optional|
The list of values. Only set if the `type` is `ARRAY`.
|`editable` |`false` if not set|
Whether the value is editable.
|`permitted_values`|optional|
The list of permitted values. Only set if the `type` is `LIST`.
|`inheritable` |`false` if not set|
Whether the configuration parameter can be inherited.
|`configured_value`|optional|
The value of the configuration parameter that is configured on this
project, only set if `inheritable` is true.
|`inherited_value` |optional|
The inherited value of the configuration parameter, only set if
`inheritable` is true.
|===============================
[[dashboard-info]]
=== DashboardInfo
The `DashboardInfo` entity contains information about a project
dashboard.
[options="header",cols="1,^2,4"]
|===============================
|Field Name ||Description
|`id` ||
The ID of the dashboard. The ID has the format '<ref>:<path>',
where ref and path are URL encoded.
|`project` ||
The name of the project for which this dashboard is returned.
|`defining_project`||
The name of the project in which this dashboard is defined.
This is different from `project` if the dashboard is inherited from a
parent project.
|`ref` ||
The name of the ref in which the dashboard is defined, without the
`refs/meta/dashboards/` prefix, which is common for all dashboard refs.
|`path` ||
The path of the file in which the dashboard is defined.
|`description` |optional|The description of the dashboard.
|`foreach` |optional|
Subquery that applies to all sections in the dashboard. +
Tokens such as `${project}` are not resolved.
|`url` ||
The URL under which the dashboard can be opened in the Gerrit Web UI. +
The URL is relative to the canonical web URL. +
Tokens in the queries such as `${project}` are resolved.
|`is_default` |not set if `false`|
Whether this is the default dashboard of the project.
|`title` |optional|The title of the dashboard.
|`sections` ||
The list of link:#dashboard-section-info[sections] in the dashboard.
|===============================
[[dashboard-input]]
=== DashboardInput
The `DashboardInput` entity contains information to create/update a
project dashboard.
[options="header",cols="1,^2,4"]
|=============================
|Field Name ||Description
|`id` |optional|
URL encoded ID of a dashboard to which this dashboard should link to.
|`commit_message`|optional|
Message that should be used to commit the change of the dashboard.
|=============================
[[dashboard-section-info]]
=== DashboardSectionInfo
The `DashboardSectionInfo` entity contains information about a section
in a dashboard.
[options="header",cols="1,6"]
|===========================
|Field Name |Description
|`name` |The title of the section.
|`query` |The query of the section. +
Tokens such as `${project}` are not resolved.
|===========================
[[delete-label-input]]
=== DeleteLabelInput
The `DeleteLabelInput` entity contains information for deleting a label
definition in a project.
[options="header",cols="1,^2,4"]
|=============================