From 782ff97c4b3bdd0f3f03ffa2785b7a503c2ff6fe Mon Sep 17 00:00:00 2001 From: Tim Haines Date: Wed, 15 Aug 2018 20:35:15 -0700 Subject: [PATCH 1/3] Add support for merge_base API endpoint --- lib/gitlab/client/repositories.rb | 13 +++++++++++++ spec/gitlab/client/repositories_spec.rb | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/gitlab/client/repositories.rb b/lib/gitlab/client/repositories.rb index e89e41a44..f20effc6f 100644 --- a/lib/gitlab/client/repositories.rb +++ b/lib/gitlab/client/repositories.rb @@ -57,5 +57,18 @@ def compare(project, from, to) get("/projects/#{url_encode project}/repository/compare", query: { from: from, to: to }) end alias repo_compare compare + + # Get the common ancestor for 2 refs (commit SHAs, branch names or tags). + # + # @example + # Gitlab.merge_base(42, ['master', 'feature/branch']) + # Gitlab.merge_base(42, ['master', 'feature/branch']) + # + # @param [Integer] project The ID of a project. + # @param [String] refs Array containing 2 commit SHAs, branch names, or tags. + # @return [Gitlab::ObjectifiedHash] + def merge_base(project, refs) + get("/projects/#{url_encode project}/repository/merge_base", query: { refs: refs }) + end end end diff --git a/spec/gitlab/client/repositories_spec.rb b/spec/gitlab/client/repositories_spec.rb index a55c53d2a..0a6cf5a85 100644 --- a/spec/gitlab/client/repositories_spec.rb +++ b/spec/gitlab/client/repositories_spec.rb @@ -93,4 +93,22 @@ expect(@diff.diffs.last['new_path']).to eq 'files/js/application.js' end end + + describe '.merge_base' do + before do + stub_get('/projects/3/repository/merge_base', 'compare_merge_request_diff') + .with(query: { refs: %w[master feature] }) + @response = Gitlab.merge_base(3, %w[master feature]) + end + + it 'gets the correct resource' do + expect(a_get('/projects/3/repository/merge_base') + .with(query: { refs: %w[master feature] })).to have_been_made + end + + it 'gets common ancestor of the two refs' do + expect(@response).to be_kind_of Gitlab::ObjectifiedHash + expect(@response.commit.id).to eq '12d65c8dd2b2676fa3ac47d955accc085a37a9c1' + end + end end From ab7274fce7ce4e4acd80c09e042c409b9ee17e5b Mon Sep 17 00:00:00 2001 From: Tim Haines Date: Thu, 16 Aug 2018 18:59:13 -0700 Subject: [PATCH 2/3] Update merge_base stub to use the correct stubbed response from docs --- spec/fixtures/merge_base.json | 14 ++++++++++++++ spec/gitlab/client/repositories_spec.rb | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/merge_base.json diff --git a/spec/fixtures/merge_base.json b/spec/fixtures/merge_base.json new file mode 100644 index 000000000..09f5b3e24 --- /dev/null +++ b/spec/fixtures/merge_base.json @@ -0,0 +1,14 @@ +{ + "id": "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863", + "short_id": "1a0b36b3", + "title": "Initial commit", + "created_at": "2014-02-27T08:03:18.000Z", + "parent_ids": [], + "message": "Initial commit\n", + "author_name": "Dmitriy Zaporozhets", + "author_email": "dmitriy.zaporozhets@gmail.com", + "authored_date": "2014-02-27T08:03:18.000Z", + "committer_name": "Dmitriy Zaporozhets", + "committer_email": "dmitriy.zaporozhets@gmail.com", + "committed_date": "2014-02-27T08:03:18.000Z" +} diff --git a/spec/gitlab/client/repositories_spec.rb b/spec/gitlab/client/repositories_spec.rb index 0a6cf5a85..8ac104c90 100644 --- a/spec/gitlab/client/repositories_spec.rb +++ b/spec/gitlab/client/repositories_spec.rb @@ -96,7 +96,7 @@ describe '.merge_base' do before do - stub_get('/projects/3/repository/merge_base', 'compare_merge_request_diff') + stub_get('/projects/3/repository/merge_base', 'merge_base') .with(query: { refs: %w[master feature] }) @response = Gitlab.merge_base(3, %w[master feature]) end @@ -108,7 +108,7 @@ it 'gets common ancestor of the two refs' do expect(@response).to be_kind_of Gitlab::ObjectifiedHash - expect(@response.commit.id).to eq '12d65c8dd2b2676fa3ac47d955accc085a37a9c1' + expect(@response.id).to eq '1a0b36b3cdad1d2ee32457c102a8c0b7056fa863' end end end From 4a04b3f318622c6fcbbe4f4f65b1f65de6514c89 Mon Sep 17 00:00:00 2001 From: Tim Haines Date: Thu, 16 Aug 2018 23:13:10 -0700 Subject: [PATCH 3/3] Update comments --- lib/gitlab/client/repositories.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/client/repositories.rb b/lib/gitlab/client/repositories.rb index f20effc6f..e063ff0f4 100644 --- a/lib/gitlab/client/repositories.rb +++ b/lib/gitlab/client/repositories.rb @@ -64,8 +64,8 @@ def compare(project, from, to) # Gitlab.merge_base(42, ['master', 'feature/branch']) # Gitlab.merge_base(42, ['master', 'feature/branch']) # - # @param [Integer] project The ID of a project. - # @param [String] refs Array containing 2 commit SHAs, branch names, or tags. + # @param [Integer, String] project The ID or URL-encoded path of the project. + # @param [Array] refs Array containing 2 commit SHAs, branch names, or tags. # @return [Gitlab::ObjectifiedHash] def merge_base(project, refs) get("/projects/#{url_encode project}/repository/merge_base", query: { refs: refs })