Commit 8b2ec23f authored by Bob Van Landuyt's avatar Bob Van Landuyt

Set `allow_maintainer_to_push` using the API

parent e7487928
...@@ -541,6 +541,7 @@ POST /projects/:id/merge_requests ...@@ -541,6 +541,7 @@ POST /projects/:id/merge_requests
| `labels` | string | no | Labels for MR as a comma-separated list | | `labels` | string | no | Labels for MR as a comma-separated list |
| `milestone_id` | integer | no | The ID of a milestone | | `milestone_id` | integer | no | The ID of a milestone |
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging | | `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
| `allow_maintainer_to_push` | boolean | no | Wether or not a maintainer of the target project can push to the source branch |
```json ```json
{ {
...@@ -548,7 +549,7 @@ POST /projects/:id/merge_requests ...@@ -548,7 +549,7 @@ POST /projects/:id/merge_requests
"iid": 1, "iid": 1,
"target_branch": "master", "target_branch": "master",
"source_branch": "test1", "source_branch": "test1",
"project_id": 3, "project_id": 4,
"title": "test1", "title": "test1",
"state": "opened", "state": "opened",
"upvotes": 0, "upvotes": 0,
...@@ -569,7 +570,7 @@ POST /projects/:id/merge_requests ...@@ -569,7 +570,7 @@ POST /projects/:id/merge_requests
"state": "active", "state": "active",
"created_at": "2012-04-29T08:46:00Z" "created_at": "2012-04-29T08:46:00Z"
}, },
"source_project_id": 4, "source_project_id": 3,
"target_project_id": 4, "target_project_id": 4,
"labels": [ ], "labels": [ ],
"description": "fixed login page css paddings", "description": "fixed login page css paddings",
...@@ -596,6 +597,7 @@ POST /projects/:id/merge_requests ...@@ -596,6 +597,7 @@ POST /projects/:id/merge_requests
"force_remove_source_branch": false, "force_remove_source_branch": false,
"web_url": "http://example.com/example/example/merge_requests/1", "web_url": "http://example.com/example/example/merge_requests/1",
"discussion_locked": false, "discussion_locked": false,
"allow_maintainer_to_push": false,
"time_stats": { "time_stats": {
"time_estimate": 0, "time_estimate": 0,
"total_time_spent": 0, "total_time_spent": 0,
...@@ -626,6 +628,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid ...@@ -626,6 +628,7 @@ PUT /projects/:id/merge_requests/:merge_request_iid
| `state_event` | string | no | New state (close/reopen) | | `state_event` | string | no | New state (close/reopen) |
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging | | `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
| `discussion_locked` | boolean | no | Flag indicating if the merge request's discussion is locked. If the discussion is locked only project members can add, edit or resolve comments. | | `discussion_locked` | boolean | no | Flag indicating if the merge request's discussion is locked. If the discussion is locked only project members can add, edit or resolve comments. |
| `allow_maintainer_to_push` | boolean | no | Wether or not a maintainer of the target project can push to the source branch |
Must include at least one non-required attribute from above. Must include at least one non-required attribute from above.
...@@ -634,7 +637,7 @@ Must include at least one non-required attribute from above. ...@@ -634,7 +637,7 @@ Must include at least one non-required attribute from above.
"id": 1, "id": 1,
"iid": 1, "iid": 1,
"target_branch": "master", "target_branch": "master",
"project_id": 3, "project_id": 4,
"title": "test1", "title": "test1",
"state": "opened", "state": "opened",
"upvotes": 0, "upvotes": 0,
...@@ -655,7 +658,7 @@ Must include at least one non-required attribute from above. ...@@ -655,7 +658,7 @@ Must include at least one non-required attribute from above.
"state": "active", "state": "active",
"created_at": "2012-04-29T08:46:00Z" "created_at": "2012-04-29T08:46:00Z"
}, },
"source_project_id": 4, "source_project_id": 3,
"target_project_id": 4, "target_project_id": 4,
"labels": [ ], "labels": [ ],
"description": "description1", "description": "description1",
...@@ -682,6 +685,7 @@ Must include at least one non-required attribute from above. ...@@ -682,6 +685,7 @@ Must include at least one non-required attribute from above.
"force_remove_source_branch": false, "force_remove_source_branch": false,
"web_url": "http://example.com/example/example/merge_requests/1", "web_url": "http://example.com/example/example/merge_requests/1",
"discussion_locked": false, "discussion_locked": false,
"allow_maintainer_to_push": false,
"time_stats": { "time_stats": {
"time_estimate": 0, "time_estimate": 0,
"total_time_spent": 0, "total_time_spent": 0,
......
...@@ -547,6 +547,7 @@ module API ...@@ -547,6 +547,7 @@ module API
expose :discussion_locked expose :discussion_locked
expose :should_remove_source_branch?, as: :should_remove_source_branch expose :should_remove_source_branch?, as: :should_remove_source_branch
expose :force_remove_source_branch?, as: :force_remove_source_branch expose :force_remove_source_branch?, as: :force_remove_source_branch
expose :allow_maintainer_to_push, if: -> (merge_request, _) { merge_request.for_fork? }
expose :web_url do |merge_request, options| expose :web_url do |merge_request, options|
Gitlab::UrlBuilder.build(merge_request) Gitlab::UrlBuilder.build(merge_request)
......
...@@ -144,6 +144,7 @@ module API ...@@ -144,6 +144,7 @@ module API
optional :milestone_id, type: Integer, desc: 'The ID of a milestone to assign the merge request' optional :milestone_id, type: Integer, desc: 'The ID of a milestone to assign the merge request'
optional :labels, type: String, desc: 'Comma-separated list of label names' optional :labels, type: String, desc: 'Comma-separated list of label names'
optional :remove_source_branch, type: Boolean, desc: 'Remove source branch when merging' optional :remove_source_branch, type: Boolean, desc: 'Remove source branch when merging'
optional :allow_maintainer_to_push, type: Boolean, desc: 'Wether a maintainer of the target project can push to the source project'
use :optional_params_ee use :optional_params_ee
end end
......
...@@ -80,7 +80,8 @@ ...@@ -80,7 +80,8 @@
"total_time_spent": { "type": "integer" }, "total_time_spent": { "type": "integer" },
"human_time_estimate": { "type": ["string", "null"] }, "human_time_estimate": { "type": ["string", "null"] },
"human_total_time_spent": { "type": ["string", "null"] } "human_total_time_spent": { "type": ["string", "null"] }
} },
"allow_maintainer_to_push": { "type": ["boolean", "null"] }
}, },
"required": [ "required": [
"id", "iid", "project_id", "title", "description", "id", "iid", "project_id", "title", "description",
......
...@@ -616,6 +616,25 @@ describe API::MergeRequests do ...@@ -616,6 +616,25 @@ describe API::MergeRequests do
expect(json_response['changes_count']).to eq('5+') expect(json_response['changes_count']).to eq('5+')
end end
end end
context 'for forked projects' do
let(:user2) { create(:user) }
let(:project) { create(:project, :public, :repository) }
let(:forked_project) { fork_project(project, user2, repository: true) }
let(:merge_request) do
create(:merge_request,
source_project: forked_project,
target_project: project,
source_branch: 'fixes',
allow_maintainer_to_push: true)
end
it 'includes the `allow_maintainer_to_push` field' do
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}", user)
expect(json_response['allow_maintainer_to_push']).to be_truthy
end
end
end end
describe 'GET /projects/:id/merge_requests/:merge_request_iid/participants' do describe 'GET /projects/:id/merge_requests/:merge_request_iid/participants' do
...@@ -815,6 +834,7 @@ describe API::MergeRequests do ...@@ -815,6 +834,7 @@ describe API::MergeRequests do
context 'forked projects' do context 'forked projects' do
let!(:user2) { create(:user) } let!(:user2) { create(:user) }
let(:project) { create(:project, :public, :repository) }
let!(:forked_project) { fork_project(project, user2, repository: true) } let!(:forked_project) { fork_project(project, user2, repository: true) }
let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) } let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) }
...@@ -872,6 +892,14 @@ describe API::MergeRequests do ...@@ -872,6 +892,14 @@ describe API::MergeRequests do
expect(response).to have_gitlab_http_status(400) expect(response).to have_gitlab_http_status(400)
end end
it 'allows setting `allow_maintainer_to_push`' do
post api("/projects/#{forked_project.id}/merge_requests", user2),
title: 'Test merge_request', source_branch: "feature_conflict", target_branch: "master",
author: user2, target_project_id: project.id, allow_maintainer_to_push: true
expect(response).to have_gitlab_http_status(201)
expect(json_response['allow_maintainer_to_push']).to be_truthy
end
context 'when target_branch and target_project_id is specified' do context 'when target_branch and target_project_id is specified' do
let(:params) do let(:params) do
{ title: 'Test merge_request', { title: 'Test merge_request',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment