Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
7a236f65
Commit
7a236f65
authored
Jan 11, 2017
by
Sean McGivern
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add MR squashing to API
parent
c51eb666
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
50 additions
and
3 deletions
+50
-3
doc/api/merge_requests.md
doc/api/merge_requests.md
+23
-1
lib/api/entities.rb
lib/api/entities.rb
+1
-0
lib/api/merge_requests.rb
lib/api/merge_requests.rb
+7
-1
spec/requests/api/merge_requests_spec.rb
spec/requests/api/merge_requests_spec.rb
+19
-1
No files found.
doc/api/merge_requests.md
View file @
7a236f65
...
...
@@ -75,6 +75,7 @@ Parameters:
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
]
...
...
@@ -145,6 +146,7 @@ Parameters:
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
```
...
...
@@ -251,6 +253,7 @@ Parameters:
"approvals_before_merge"
:
null
,
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
,
"changes"
:
[
{
...
...
@@ -287,6 +290,7 @@ POST /projects/:id/merge_requests
|
`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 |
|
`approvals_before_merge`
| integer| no | Number of approvals required before this can be merged (see below) |
|
`squash`
| boolean| no | Squash commits into a single commit when merging |
If
`approvals_before_merge`
is not provided, it inherits the value from the
target project. If it is provided, then the following conditions must hold in
...
...
@@ -349,6 +353,7 @@ order for it to take effect:
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
```
...
...
@@ -374,6 +379,7 @@ PUT /projects/:id/merge_requests/:merge_request_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 |
|
`squash`
| boolean| no | Squash commits into a single commit when merging |
```
json
{
...
...
@@ -426,6 +432,7 @@ PUT /projects/:id/merge_requests/:merge_request_id
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
```
...
...
@@ -471,7 +478,19 @@ Parameters:
-
`merge_commit_message`
(optional) - Custom merge commit message
-
`should_remove_source_branch`
(optional) - if
`true`
removes the source branch
-
`merge_when_build_succeeds`
(optional) - if
`true`
the MR is merged when the build succeeds
-
`sha`
(optional) - if present, then this SHA must match the HEAD of the source branch, otherwise the merge will fail
-
`sha`
(optional) - if present, then this SHA must
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
|
`id`
| string | yes | The ID of a project |
|
`merge_request_id`
| integer | yes | The ID of the merge request |
|
`merge_commit_message`
| string | no | Custom merge commit message |
|
`should_remove_source_branch`
| boolean | no | Remove the source branch after merge |
|
`merge_when_build_succeeds`
| boolean | no | Merge when build succeeds, rather than immediately |
|
`sha`
| string | no | If present, then this SHA must match the HEAD of the source branch, otherwise the merge will fail |
|
`squash`
| boolean | no | Squash the merge request into a single commit |
```
json
{
...
...
@@ -525,6 +544,7 @@ Parameters:
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
```
...
...
@@ -698,6 +718,7 @@ Parameters:
"approvals_before_merge"
:
null
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
false
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
}
```
...
...
@@ -1021,6 +1042,7 @@ Example response:
"user_notes_count"
:
7
,
"should_remove_source_branch"
:
true
,
"force_remove_source_branch"
:
false
,
"squash"
:
true
,
"web_url"
:
"http://example.com/example/example/merge_requests/1"
},
"target_url"
:
"https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7"
,
...
...
lib/api/entities.rb
View file @
7a236f65
...
...
@@ -326,6 +326,7 @@ module API
expose
:approvals_before_merge
expose
:should_remove_source_branch?
,
as: :should_remove_source_branch
expose
:force_remove_source_branch?
,
as: :force_remove_source_branch
expose
:squash
expose
:web_url
do
|
merge_request
,
options
|
Gitlab
::
UrlBuilder
.
build
(
merge_request
)
...
...
lib/api/merge_requests.rb
View file @
7a236f65
...
...
@@ -34,6 +34,7 @@ module API
optional
:labels
,
type:
String
,
desc:
'Comma-separated list of label names'
optional
:approvals_before_merge
,
type:
Integer
,
desc:
'Number of approvals required before this can be merged'
optional
:remove_source_branch
,
type:
Boolean
,
desc:
'Remove source branch when merging'
optional
:squash
,
type:
Boolean
,
desc:
'Squash commits when merging'
end
end
...
...
@@ -153,7 +154,7 @@ module API
use
:optional_params
at_least_one_of
:title
,
:target_branch
,
:description
,
:assignee_id
,
:milestone_id
,
:labels
,
:state_event
,
:approvals_before_merge
,
:remove_source_branch
:remove_source_branch
,
:squash
end
put
path
do
merge_request
=
find_merge_request_with_access
(
params
.
delete
(
:merge_request_id
),
:update_merge_request
)
...
...
@@ -180,6 +181,7 @@ module API
optional
:merge_when_build_succeeds
,
type:
Boolean
,
desc:
'When true, this merge request will be merged when the pipeline succeeds'
optional
:sha
,
type:
String
,
desc:
'When present, must have the HEAD SHA of the source branch'
optional
:squash
,
type:
Boolean
,
desc:
'When true, the commits will be squashed into a single commit on merge'
end
put
"
#{
path
}
/merge"
do
merge_request
=
find_project_merge_request
(
params
[
:merge_request_id
])
...
...
@@ -196,6 +198,10 @@ module API
render_api_error!
(
"SHA does not match HEAD of source branch:
#{
merge_request
.
diff_head_sha
}
"
,
409
)
end
if
params
[
:squash
]
merge_request
.
update
(
squash:
params
[
:squash
])
end
merge_params
=
{
commit_message:
params
[
:merge_commit_message
],
should_remove_source_branch:
params
[
:should_remove_source_branch
]
...
...
spec/requests/api/merge_requests_spec.rb
View file @
7a236f65
...
...
@@ -39,6 +39,7 @@ describe API::MergeRequests, api: true do
expect
(
json_response
.
first
[
'sha'
]).
to
eq
(
merge_request_merged
.
diff_head_sha
)
expect
(
json_response
.
first
[
'merge_commit_sha'
]).
not_to
be_nil
expect
(
json_response
.
first
[
'merge_commit_sha'
]).
to
eq
(
merge_request_merged
.
merge_commit_sha
)
expect
(
json_response
.
first
[
'squash'
]).
to
eq
(
merge_request_merged
.
squash
)
end
it
"returns an array of all merge_requests"
do
...
...
@@ -233,13 +234,15 @@ describe API::MergeRequests, api: true do
author:
user
,
labels:
'label, label2'
,
milestone_id:
milestone
.
id
,
remove_source_branch:
true
remove_source_branch:
true
,
squash:
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
expect
(
json_response
[
'squash'
]).
to
be_truthy
end
it
"returns 422 when source_branch equals target_branch"
do
...
...
@@ -526,6 +529,14 @@ describe API::MergeRequests, api: true do
expect
(
response
).
to
have_http_status
(
200
)
end
it
"updates the MR's squash attribute"
do
expect
do
put
api
(
"/projects/
#{
project
.
id
}
/merge_requests/
#{
merge_request
.
id
}
/merge"
,
user
),
squash:
true
end
.
to
change
{
merge_request
.
reload
.
squash
}
expect
(
response
).
to
have_http_status
(
200
)
end
it
"enables merge when pipeline succeeds if the pipeline is active"
do
allow_any_instance_of
(
MergeRequest
).
to
receive
(
:head_pipeline
).
and_return
(
pipeline
)
allow
(
pipeline
).
to
receive
(
:active?
).
and_return
(
true
)
...
...
@@ -566,6 +577,13 @@ describe API::MergeRequests, api: true do
expect
(
json_response
[
'milestone'
][
'id'
]).
to
eq
(
milestone
.
id
)
end
it
"updates squash and returns merge_request"
do
put
api
(
"/projects/
#{
project
.
id
}
/merge_requests/
#{
merge_request
.
id
}
"
,
user
),
squash:
true
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'squash'
]).
to
be_truthy
end
it
"returns merge_request with renamed target_branch"
do
put
api
(
"/projects/
#{
project
.
id
}
/merge_requests/
#{
merge_request
.
id
}
"
,
user
),
target_branch:
"wiki"
expect
(
response
).
to
have_http_status
(
200
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment