API: Expose 'developers_can_merge' for branches
This commit is contained in:
parent
54d26c89f6
commit
e552b4af26
|
|
@ -57,7 +57,7 @@ v 8.10.0 (unreleased)
|
||||||
- API: Expose `due_date` for issues (Robert Schilling)
|
- API: Expose `due_date` for issues (Robert Schilling)
|
||||||
- API: Todos !3188 (Robert Schilling)
|
- API: Todos !3188 (Robert Schilling)
|
||||||
- API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
|
- API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
|
||||||
- API: Expose 'developers_can_push' for branches !5208 (Robert Schilling)
|
- API: Expose `developers_can_push` and `developers_can_merge` for branches !5208 (Robert Schilling)
|
||||||
- Add "Enabled Git access protocols" to Application Settings
|
- Add "Enabled Git access protocols" to Application Settings
|
||||||
- Diffs will create button/diff form on demand no on server side
|
- Diffs will create button/diff form on demand no on server side
|
||||||
- Reduce size of HTML used by diff comment forms
|
- Reduce size of HTML used by diff comment forms
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ Example response:
|
||||||
"name": "master",
|
"name": "master",
|
||||||
"protected": true,
|
"protected": true,
|
||||||
"developers_can_push": false,
|
"developers_can_push": false,
|
||||||
|
"developers_can_merge": false,
|
||||||
"commit": {
|
"commit": {
|
||||||
"author_email": "john@example.com",
|
"author_email": "john@example.com",
|
||||||
"author_name": "John Smith",
|
"author_name": "John Smith",
|
||||||
|
|
@ -66,6 +67,7 @@ Example response:
|
||||||
"name": "master",
|
"name": "master",
|
||||||
"protected": true,
|
"protected": true,
|
||||||
"developers_can_push": false,
|
"developers_can_push": false,
|
||||||
|
"developers_can_merge": false,
|
||||||
"commit": {
|
"commit": {
|
||||||
"author_email": "john@example.com",
|
"author_email": "john@example.com",
|
||||||
"author_name": "John Smith",
|
"author_name": "John Smith",
|
||||||
|
|
@ -93,7 +95,7 @@ PUT /projects/:id/repository/branches/:branch/protect
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect?developers_can_push=true
|
curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect?developers_can_push=true&developers_can_merge=true
|
||||||
```
|
```
|
||||||
|
|
||||||
| Attribute | Type | Required | Description |
|
| Attribute | Type | Required | Description |
|
||||||
|
|
@ -101,6 +103,7 @@ curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/
|
||||||
| `id` | integer | yes | The ID of a project |
|
| `id` | integer | yes | The ID of a project |
|
||||||
| `branch` | string | yes | The name of the branch |
|
| `branch` | string | yes | The name of the branch |
|
||||||
| `developers_can_push` | boolean | no | Flag if developers can push to the branch |
|
| `developers_can_push` | boolean | no | Flag if developers can push to the branch |
|
||||||
|
| `developers_can_merge` | boolean | no | Flag if developers can merge to the branch |
|
||||||
|
|
||||||
Example response:
|
Example response:
|
||||||
|
|
||||||
|
|
@ -121,7 +124,8 @@ Example response:
|
||||||
},
|
},
|
||||||
"name": "master",
|
"name": "master",
|
||||||
"protected": true,
|
"protected": true,
|
||||||
"developers_can_push": true
|
"developers_can_push": true,
|
||||||
|
"developers_can_merge": true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -163,7 +167,8 @@ Example response:
|
||||||
},
|
},
|
||||||
"name": "master",
|
"name": "master",
|
||||||
"protected": false,
|
"protected": false,
|
||||||
"developers_can_push": false
|
"developers_can_push": false,
|
||||||
|
"developers_can_merge": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -202,7 +207,8 @@ Example response:
|
||||||
},
|
},
|
||||||
"name": "newbranch",
|
"name": "newbranch",
|
||||||
"protected": false,
|
"protected": false,
|
||||||
"developers_can_push": false
|
"developers_can_push": false,
|
||||||
|
"developers_can_merge": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ module API
|
||||||
# id (required) - The ID of a project
|
# id (required) - The ID of a project
|
||||||
# branch (required) - The name of the branch
|
# branch (required) - The name of the branch
|
||||||
# developers_can_push (optional) - Flag if developers can push to that branch
|
# developers_can_push (optional) - Flag if developers can push to that branch
|
||||||
|
# developers_can_merge (optional) - Flag if developers can merge to that branch
|
||||||
# Example Request:
|
# Example Request:
|
||||||
# PUT /projects/:id/repository/branches/:branch/protect
|
# PUT /projects/:id/repository/branches/:branch/protect
|
||||||
put ':id/repository/branches/:branch/protect',
|
put ':id/repository/branches/:branch/protect',
|
||||||
|
|
@ -47,12 +48,15 @@ module API
|
||||||
not_found!('Branch') unless @branch
|
not_found!('Branch') unless @branch
|
||||||
protected_branch = user_project.protected_branches.find_by(name: @branch.name)
|
protected_branch = user_project.protected_branches.find_by(name: @branch.name)
|
||||||
developers_can_push = to_boolean(params[:developers_can_push])
|
developers_can_push = to_boolean(params[:developers_can_push])
|
||||||
|
developers_can_merge = to_boolean(params[:developers_can_merge])
|
||||||
|
|
||||||
if protected_branch
|
if protected_branch
|
||||||
protected_branch.update(developers_can_push: developers_can_push) unless developers_can_push.nil?
|
protected_branch.update(developers_can_push: developers_can_push) unless developers_can_push.nil?
|
||||||
|
protected_branch.update(developers_can_merge: developers_can_merge) unless developers_can_merge.nil?
|
||||||
else
|
else
|
||||||
user_project.protected_branches.create(name: @branch.name,
|
user_project.protected_branches.create(name: @branch.name,
|
||||||
developers_can_push: developers_can_push || false)
|
developers_can_push: developers_can_push || false,
|
||||||
|
developers_can_merge: developers_can_merge || false)
|
||||||
end
|
end
|
||||||
|
|
||||||
present @branch, with: Entities::RepoObject, project: user_project
|
present @branch, with: Entities::RepoObject, project: user_project
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,12 @@ module API
|
||||||
options[:project].developers_can_push_to_protected_branch? repo_obj.name
|
options[:project].developers_can_push_to_protected_branch? repo_obj.name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
expose :developers_can_merge do |repo_obj, options|
|
||||||
|
if options[:project]
|
||||||
|
options[:project].developers_can_merge_to_protected_branch? repo_obj.name
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class RepoTreeObject < Grape::Entity
|
class RepoTreeObject < Grape::Entity
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ describe API::API, api: true do
|
||||||
expect(json_response['commit']['id']).to eq(branch_sha)
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
expect(json_response['protected']).to eq(false)
|
expect(json_response['protected']).to eq(false)
|
||||||
expect(json_response['developers_can_push']).to eq(false)
|
expect(json_response['developers_can_push']).to eq(false)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a 403 error if guest" do
|
it "should return a 403 error if guest" do
|
||||||
|
|
@ -55,6 +56,7 @@ describe API::API, api: true do
|
||||||
expect(json_response['commit']['id']).to eq(branch_sha)
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
expect(json_response['protected']).to eq(true)
|
expect(json_response['protected']).to eq(true)
|
||||||
expect(json_response['developers_can_push']).to eq(false)
|
expect(json_response['developers_can_push']).to eq(false)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'protects a single branch and developers can push' do
|
it 'protects a single branch and developers can push' do
|
||||||
|
|
@ -66,17 +68,43 @@ describe API::API, api: true do
|
||||||
expect(json_response['commit']['id']).to eq(branch_sha)
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
expect(json_response['protected']).to eq(true)
|
expect(json_response['protected']).to eq(true)
|
||||||
expect(json_response['developers_can_push']).to eq(true)
|
expect(json_response['developers_can_push']).to eq(true)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'protects a single branch and developers cannot push' do
|
it 'protects a single branch and developers can merge' do
|
||||||
put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
|
put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
|
||||||
developers_can_push: 'tru'
|
developers_can_merge: true
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response['name']).to eq(branch_name)
|
expect(json_response['name']).to eq(branch_name)
|
||||||
expect(json_response['commit']['id']).to eq(branch_sha)
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
expect(json_response['protected']).to eq(true)
|
expect(json_response['protected']).to eq(true)
|
||||||
expect(json_response['developers_can_push']).to eq(false)
|
expect(json_response['developers_can_push']).to eq(false)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'protects a single branch and developers can push and merge' do
|
||||||
|
put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
|
||||||
|
developers_can_push: true, developers_can_merge: true
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response['name']).to eq(branch_name)
|
||||||
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
|
expect(json_response['protected']).to eq(true)
|
||||||
|
expect(json_response['developers_can_push']).to eq(true)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'protects a single branch and developers cannot push and merge' do
|
||||||
|
put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
|
||||||
|
developers_can_push: 'tru', developers_can_merge: 'tr'
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response['name']).to eq(branch_name)
|
||||||
|
expect(json_response['commit']['id']).to eq(branch_sha)
|
||||||
|
expect(json_response['protected']).to eq(true)
|
||||||
|
expect(json_response['developers_can_push']).to eq(false)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'on a protected branch' do
|
context 'on a protected branch' do
|
||||||
|
|
@ -84,27 +112,29 @@ describe API::API, api: true do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
project.repository.add_branch(user, protected_branch, 'master')
|
project.repository.add_branch(user, protected_branch, 'master')
|
||||||
create(:protected_branch, project: project, name: protected_branch, developers_can_push: true)
|
create(:protected_branch, project: project, name: protected_branch, developers_can_push: true, developers_can_merge: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates that a developer can push' do
|
it 'updates that a developer can push' do
|
||||||
put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
|
put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
|
||||||
developers_can_push: false
|
developers_can_push: false, developers_can_merge: false
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response['name']).to eq(protected_branch)
|
expect(json_response['name']).to eq(protected_branch)
|
||||||
expect(json_response['protected']).to eq(true)
|
expect(json_response['protected']).to eq(true)
|
||||||
expect(json_response['developers_can_push']).to eq(false)
|
expect(json_response['developers_can_push']).to eq(false)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not update that a developer can push' do
|
it 'does not update that a developer can push' do
|
||||||
put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
|
put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
|
||||||
developers_can_push: 'foobar'
|
developers_can_push: 'foobar', developers_can_merge: 'foo'
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response['name']).to eq(protected_branch)
|
expect(json_response['name']).to eq(protected_branch)
|
||||||
expect(json_response['protected']).to eq(true)
|
expect(json_response['protected']).to eq(true)
|
||||||
expect(json_response['developers_can_push']).to eq(true)
|
expect(json_response['developers_can_push']).to eq(true)
|
||||||
|
expect(json_response['developers_can_merge']).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue