Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2018-03-08 04:29:12 +0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2018-03-08 04:46:29 +0300
commitc6273ec50c019a115b11a8ef1032a64710f0a46a (patch)
treece1a808bafc98f2181a621b75e293c4c27d1899e /spec/models/compare_spec.rb
parent7734e85bc6592c5ad3330c611c5f83a051b680b0 (diff)
Avoid re-fetching merge-base SHA from Gitaly unnecessarily
Diffstat (limited to 'spec/models/compare_spec.rb')
-rw-r--r--spec/models/compare_spec.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/spec/models/compare_spec.rb b/spec/models/compare_spec.rb
index 04f3cecae00..4200af0e0f5 100644
--- a/spec/models/compare_spec.rb
+++ b/spec/models/compare_spec.rb
@@ -59,6 +59,36 @@ describe Compare do
end
end
+ describe '#base_commit_sha' do
+ it 'returns @base_sha if it is present' do
+ expect(project).not_to receive(:merge_base_commit)
+
+ sha = double
+ service = described_class.new(raw_compare, project, base_sha: sha)
+
+ expect(service.base_commit_sha).to eq(sha)
+ end
+
+ it 'fetches merge base SHA from repo when @base_sha is nil' do
+ expect(project).to receive(:merge_base_commit)
+ .with(start_commit.id, head_commit.id)
+ .once
+ .and_call_original
+
+ expect(subject.base_commit_sha)
+ .to eq(project.repository.merge_base(start_commit.id, head_commit.id))
+ end
+
+ it 'is memoized on first call' do
+ expect(project).to receive(:merge_base_commit)
+ .with(start_commit.id, head_commit.id)
+ .once
+ .and_call_original
+
+ 3.times { subject.base_commit_sha }
+ end
+ end
+
describe '#diff_refs' do
it 'uses base_commit sha as base_sha' do
expect(subject).to receive(:base_commit).at_least(:once).and_call_original