summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz@gitlab.com>2018-08-13 10:43:13 +0000
committerGrzegorz Bizon <grzegorz@gitlab.com>2018-08-13 10:43:13 +0000
commitd7c521012f8486c735c7832b58c7d8649b4d6e83 (patch)
treeed2bc9508287a14bebb75b36607cccff7d8bc063 /lib/api
parentd22b477d6f4b95455abd7bed8257c64d5f1daa72 (diff)
parent7466df872cf4e933cd91e6aa95dbfa8bd3d33f31 (diff)
downloadgitlab-ce-d7c521012f8486c735c7832b58c7d8649b4d6e83.tar.gz
Merge branch 'bvl-merge-base-api' into 'master'
Get the `merge-base` of 2 refs trough the API Closes #49850 See merge request gitlab-org/gitlab-ce!20929
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/repositories.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 33a9646ac3b..79736107bbb 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -123,6 +123,39 @@ module API
not_found!
end
end
+
+ desc 'Get the common ancestor between commits' do
+ success Entities::Commit
+ end
+ params do
+ # For now we just support 2 refs passed, but `merge-base` supports
+ # multiple defining this as an Array instead of 2 separate params will
+ # make sure we don't need to deprecate this API in favor of one
+ # supporting multiple commits when this functionality gets added to
+ # Gitaly
+ requires :refs, type: Array[String]
+ end
+ get ':id/repository/merge_base' do
+ refs = params[:refs]
+
+ unless refs.size == 2
+ render_api_error!('Provide exactly 2 refs', 400)
+ end
+
+ merge_base = Gitlab::Git::MergeBase.new(user_project.repository, refs)
+
+ if merge_base.unknown_refs.any?
+ ref_noun = 'ref'.pluralize(merge_base.unknown_refs.size)
+ message = "Could not find #{ref_noun}: #{merge_base.unknown_refs.join(', ')}"
+ render_api_error!(message, 400)
+ end
+
+ if merge_base.commit
+ present merge_base.commit, with: Entities::Commit
+ else
+ not_found!("Merge Base")
+ end
+ end
end
end
end