summaryrefslogtreecommitdiff
path: root/lib/api/merge_requests.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-29 15:08:59 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-29 15:08:59 +0000
commit23288f62da73fb0e30d8e7ce306665e8fda1b932 (patch)
tree2baf1339e4d7c7c35d6b8a52cfb90597a5d4cdf1 /lib/api/merge_requests.rb
parent7cc6872401eb487ed20dbb9d455f8bb9c97d9e39 (diff)
downloadgitlab-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.rb68
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