API: Ability to remove source branch
This commit is contained in:
parent
bd67459131
commit
8b5c16e4b1
4 changed files with 47 additions and 26 deletions
4
changelogs/unreleased/api-remove-source-branch.yml
Normal file
4
changelogs/unreleased/api-remove-source-branch.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: 'API: Ability to set ''should_remove_source_branch'' on merge requests'
|
||||
merge_request:
|
||||
author: Robert Schilling
|
|
@ -271,17 +271,18 @@ Creates a new merge request.
|
|||
POST /projects/:id/merge_requests
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `source_branch` (required) - The source branch
|
||||
- `target_branch` (required) - The target branch
|
||||
- `assignee_id` (optional) - Assignee user ID
|
||||
- `title` (required) - Title of MR
|
||||
- `description` (optional) - Description of MR
|
||||
- `target_project_id` (optional) - The target project (numeric id)
|
||||
- `labels` (optional) - Labels for MR as a comma-separated list
|
||||
- `milestone_id` (optional) - Milestone ID
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `id` | string | yes | The ID of a project |
|
||||
| `source_branch` | string | yes | The source branch |
|
||||
| `target_branch` | string | yes | The target branch |
|
||||
| `title` | string | yes | Title of MR |
|
||||
| `assignee_id` | integer | no | Assignee user ID |
|
||||
| `description` | string | no | Description of MR |
|
||||
| `target_project_id` | integer | no | The target project (numeric id) |
|
||||
| `labels` | string | no | Labels for MR as a comma-separated list |
|
||||
| `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 |
|
||||
|
||||
```json
|
||||
{
|
||||
|
@ -346,17 +347,19 @@ Updates an existing merge request. You can change the target branch, title, or e
|
|||
PUT /projects/:id/merge_requests/:merge_request_id
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - The ID of a project
|
||||
- `merge_request_id` (required) - ID of MR
|
||||
- `target_branch` - The target branch
|
||||
- `assignee_id` - Assignee user ID
|
||||
- `title` - Title of MR
|
||||
- `description` - Description of MR
|
||||
- `state_event` - New state (close|reopen|merge)
|
||||
- `labels` (optional) - Labels for MR as a comma-separated list
|
||||
- `milestone_id` (optional) - Milestone ID
|
||||
| Attribute | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `id` | string | yes | The ID of a project |
|
||||
| `merge_request_id` | integer | yes | The ID of a merge request |
|
||||
| `source_branch` | string | yes | The source branch |
|
||||
| `target_branch` | string | yes | The target branch |
|
||||
| `title` | string | yes | Title of MR |
|
||||
| `assignee_id` | integer | no | Assignee user ID |
|
||||
| `description` | string | no | Description of MR |
|
||||
| `target_project_id` | integer | no | The target project (numeric id) |
|
||||
| `labels` | string | no | Labels for MR as a comma-separated list |
|
||||
| `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 |
|
||||
|
||||
```json
|
||||
{
|
||||
|
|
|
@ -28,6 +28,7 @@ module API
|
|||
optional :assignee_id, type: Integer, desc: 'The ID of a user 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 :remove_source_branch, type: Boolean, desc: 'Remove source branch when merging'
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -75,7 +76,8 @@ module API
|
|||
post ":id/merge_requests" do
|
||||
authorize! :create_merge_request, user_project
|
||||
|
||||
mr_params = declared_params
|
||||
mr_params = declared_params(include_missing: false)
|
||||
mr_params[:force_remove_source_branch] = mr_params.delete(:remove_source_branch) if mr_params[:remove_source_branch].present?
|
||||
|
||||
merge_request = ::MergeRequests::CreateService.new(user_project, current_user, mr_params).execute
|
||||
|
||||
|
@ -144,13 +146,15 @@ module API
|
|||
desc: 'Status of the merge request'
|
||||
use :optional_params
|
||||
at_least_one_of :title, :target_branch, :description, :assignee_id,
|
||||
:milestone_id, :labels, :state_event
|
||||
:milestone_id, :labels, :state_event,
|
||||
:remove_source_branch
|
||||
end
|
||||
put path do
|
||||
merge_request = user_project.merge_requests.find(params.delete(:merge_request_id))
|
||||
authorize! :update_merge_request, merge_request
|
||||
|
||||
mr_params = declared_params(include_missing: false)
|
||||
mr_params[:force_remove_source_branch] = mr_params.delete(:remove_source_branch) if mr_params[:remove_source_branch].present?
|
||||
|
||||
merge_request = ::MergeRequests::UpdateService.new(user_project, current_user, mr_params).execute(merge_request)
|
||||
|
||||
|
|
|
@ -234,11 +234,14 @@ describe API::MergeRequests, api: true do
|
|||
target_branch: 'master',
|
||||
author: user,
|
||||
labels: 'label, label2',
|
||||
milestone_id: milestone.id
|
||||
milestone_id: milestone.id,
|
||||
remove_source_branch: true
|
||||
|
||||
expect(response).to have_http_status(201)
|
||||
expect(json_response['title']).to eq('Test merge_request')
|
||||
expect(json_response['labels']).to eq(['label', 'label2'])
|
||||
expect(json_response['milestone']['id']).to eq(milestone.id)
|
||||
expect(json_response['force_remove_source_branch']).to be_truthy
|
||||
end
|
||||
|
||||
it "returns 422 when source_branch equals target_branch" do
|
||||
|
@ -511,6 +514,13 @@ describe API::MergeRequests, api: true do
|
|||
expect(json_response['target_branch']).to eq('wiki')
|
||||
end
|
||||
|
||||
it "returns merge_request that removes the source branch" do
|
||||
put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), remove_source_branch: true
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response['force_remove_source_branch']).to be_truthy
|
||||
end
|
||||
|
||||
it 'allows special label names' do
|
||||
put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user),
|
||||
title: 'new issue',
|
||||
|
|
Loading…
Reference in a new issue