summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-12-08 22:20:28 -0800
committerStan Hu <stanhu@gmail.com>2017-12-12 15:07:24 -0800
commitf8c3a58a54d622193a0cf15777a0d0631289278c (patch)
treea916d2f76e125247ff357328ee5d0f887f4b3871
parent0ea70802e19cbe11c6af0f6750200bb137225940 (diff)
downloadgitlab-ce-f8c3a58a54d622193a0cf15777a0d0631289278c.tar.gz
Avoid Gitaly N+1 calls by caching tag_names
-rw-r--r--app/models/repository.rb6
-rw-r--r--spec/controllers/projects/pipeline_schedules_controller_spec.rb2
-rw-r--r--spec/models/repository_spec.rb9
3 files changed, 17 insertions, 0 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index c0e31eca8da..2413e60bc76 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -221,6 +221,12 @@ class Repository
branch_names.include?(branch_name)
end
+ def tag_exists?(tag_name)
+ return false unless raw_repository
+
+ tag_names.include?(tag_name)
+ end
+
def ref_exists?(ref)
!!raw_repository&.ref_exists?(ref)
rescue ArgumentError
diff --git a/spec/controllers/projects/pipeline_schedules_controller_spec.rb b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
index debc20ee467..8888573e882 100644
--- a/spec/controllers/projects/pipeline_schedules_controller_spec.rb
+++ b/spec/controllers/projects/pipeline_schedules_controller_spec.rb
@@ -7,6 +7,8 @@ describe Projects::PipelineSchedulesController do
set(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) }
describe 'GET #index' do
+ render_views
+
let(:scope) { nil }
let!(:inactive_pipeline_schedule) do
create(:ci_pipeline_schedule, :inactive, project: project)
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 129fce74f45..08eb563082f 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1157,6 +1157,15 @@ describe Repository do
end
end
+ describe '#tag_exists?' do
+ it 'uses tag_names' do
+ allow(repository).to receive(:tag_names).and_return(['foobar'])
+
+ expect(repository.tag_exists?('foobar')).to eq(true)
+ expect(repository.tag_exists?('master')).to eq(false)
+ end
+ end
+
describe '#branch_names', :use_clean_rails_memory_store_caching do
let(:fake_branch_names) { ['foobar'] }