diff options
author | Rémy Coutable <remy@rymai.me> | 2016-12-13 19:23:34 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-12-13 19:23:34 +0000 |
commit | 632450a4bd95c7f67f9968e57b317dc4b4704f5f (patch) | |
tree | 61a98e9a4f405965b1c1c912da7f77da4dae42aa /lib | |
parent | 75f9c98930d7eceb1458898c2e0633fe0768096f (diff) | |
parent | 51cfd554aff461a4e8649459a53562e990321b3a (diff) | |
download | gitlab-ce-632450a4bd95c7f67f9968e57b317dc4b4704f5f.tar.gz |
Merge branch 'api-cherry-pick' into 'master'
Adds the ability to cherry pick a commit via the API. Right now it only supports to directly cherry pick a commit and not starting a MR from it. Shall we do that also for the API?
Closes #25450
See merge request !8047
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/commits.rb | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lib/api/commits.rb b/lib/api/commits.rb index 2670a2d413a..cf2489dbb67 100644 --- a/lib/api/commits.rb +++ b/lib/api/commits.rb @@ -1,7 +1,6 @@ require 'mime/types' module API - # Projects commits API class Commits < Grape::API include PaginationParams @@ -121,6 +120,41 @@ module API present paginate(notes), with: Entities::CommitNote end + desc 'Cherry pick commit into a branch' do + detail 'This feature was introduced in GitLab 8.15' + success Entities::RepoCommit + end + params do + requires :sha, type: String, desc: 'A commit sha to be cherry picked' + requires :branch, type: String, desc: 'The name of the branch' + end + post ':id/repository/commits/:sha/cherry_pick' do + authorize! :push_code, user_project + + commit = user_project.commit(params[:sha]) + not_found!('Commit') unless commit + + branch = user_project.repository.find_branch(params[:branch]) + not_found!('Branch') unless branch + + commit_params = { + commit: commit, + create_merge_request: false, + source_project: user_project, + source_branch: commit.cherry_pick_branch_name, + target_branch: params[:branch] + } + + result = ::Commits::CherryPickService.new(user_project, current_user, commit_params).execute + + if result[:status] == :success + branch = user_project.repository.find_branch(params[:branch]) + present user_project.repository.commit(branch.dereferenced_target), with: Entities::RepoCommit + else + render_api_error!(result[:message], 400) + end + end + desc 'Post comment to commit' do success Entities::CommitNote end |