diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-29 15:08:59 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-29 15:08:59 +0000 |
commit | 23288f62da73fb0e30d8e7ce306665e8fda1b932 (patch) | |
tree | 2baf1339e4d7c7c35d6b8a52cfb90597a5d4cdf1 /lib/api/merge_requests.rb | |
parent | 7cc6872401eb487ed20dbb9d455f8bb9c97d9e39 (diff) | |
download | gitlab-ce-23288f62da73fb0e30d8e7ce306665e8fda1b932.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/api/merge_requests.rb')
-rw-r--r-- | lib/api/merge_requests.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index bd857278ee5..6397a376af7 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -4,6 +4,8 @@ module API class MergeRequests < Grape::API include PaginationParams + CONTEXT_COMMITS_POST_LIMIT = 20 + before { authenticate_non_get! } helpers ::Gitlab::IssuableMetadata @@ -290,6 +292,72 @@ module API present commits, with: Entities::Commit end + desc 'Get the context commits of a merge request' do + success Entities::CommitEntity + end + get ':id/merge_requests/:merge_request_iid/context_commits' do + merge_request = find_merge_request_with_access(params[:merge_request_iid]) + project = merge_request.project + + not_found! unless project.context_commits_enabled? + + context_commits = merge_request.context_commits + CommitEntity.represent(context_commits, type: :full, request: merge_request) + end + + params do + requires :commits, type: Array, allow_blank: false, desc: 'List of context commits sha' + end + desc 'create context commits of merge request' do + success Entities::Commit + end + post ':id/merge_requests/:merge_request_iid/context_commits' do + commit_ids = params[:commits] + + if commit_ids.size > CONTEXT_COMMITS_POST_LIMIT + render_api_error!("Context commits array size should not be more than #{CONTEXT_COMMITS_POST_LIMIT}", 400) + end + + merge_request = find_merge_request_with_access(params[:merge_request_iid]) + project = merge_request.project + + not_found! unless project.context_commits_enabled? + + authorize!(:update_merge_request, merge_request) + + project = merge_request.target_project + result = ::MergeRequests::AddContextService.new(project, current_user, merge_request: merge_request, commits: commit_ids).execute + + if result.instance_of?(Array) + present result, with: Entities::Commit + else + render_api_error!(result[:message], result[:http_status]) + end + end + + params do + requires :commits, type: Array, allow_blank: false, desc: 'List of context commits sha' + end + desc 'remove context commits of merge request' + delete ':id/merge_requests/:merge_request_iid/context_commits' do + commit_ids = params[:commits] + merge_request = find_merge_request_with_access(params[:merge_request_iid]) + project = merge_request.project + + not_found! unless project.context_commits_enabled? + + authorize!(:destroy_merge_request, merge_request) + project = merge_request.target_project + commits = project.repository.commits_by(oids: commit_ids) + + if commits.size != commit_ids.size + render_api_error!("One or more context commits' sha is not valid.", 400) + end + + MergeRequestContextCommit.delete_bulk(merge_request, commits) + status 204 + end + desc 'Show the merge request changes' do success Entities::MergeRequestChanges end |