diff options
author | Rémy Coutable <remy@rymai.me> | 2017-11-21 19:00:05 +0000 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2017-11-23 01:39:15 +0000 |
commit | 400e3ddc3561ac97875013dc4d7ca84c53731501 (patch) | |
tree | 550afb632b5447f2ab63154ea814c25060895c9e | |
parent | 3fba216ce103cedc9979c636944a67cf757f7617 (diff) | |
download | gitlab-ce-400e3ddc3561ac97875013dc4d7ca84c53731501.tar.gz |
Merge branch 'branch-exists-redis' into 'master'
Use Redis cache for branch existence checks
Closes #40349
See merge request gitlab-org/gitlab-ce!15513
(cherry picked from commit e2e4d18f1c468db8d76aaea1eb1d8442b196244b)
82e9bf29 Use Redis cache for branch existence checks
59fbefbd Add caching test
595631d2 refactor tests
f3156232 apply Rémy's patch
-rw-r--r-- | app/models/repository.rb | 6 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 25 |
2 files changed, 26 insertions, 5 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb index 3a6afc117a6..8c76a3a5dc5 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -217,11 +217,7 @@ class Repository def branch_exists?(branch_name) return false unless raw_repository - @branch_exists_memo ||= Hash.new do |hash, key| - hash[key] = raw_repository.branch_exists?(key) - end - - @branch_exists_memo[branch_name] + branch_names.include?(branch_name) end def ref_exists?(ref) diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 8a6aa767ce6..e9e6abb0d5f 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1166,6 +1166,31 @@ describe Repository do end end + describe '#branch_exists?' do + it 'uses branch_names' do + allow(repository).to receive(:branch_names).and_return(['foobar']) + + expect(repository.branch_exists?('foobar')).to eq(true) + expect(repository.branch_exists?('master')).to eq(false) + end + end + + describe '#branch_names', :use_clean_rails_memory_store_caching do + let(:fake_branch_names) { ['foobar'] } + + it 'gets cached across Repository instances' do + allow(repository.raw_repository).to receive(:branch_names).once.and_return(fake_branch_names) + + expect(repository.branch_names).to eq(fake_branch_names) + + fresh_repository = Project.find(project.id).repository + expect(fresh_repository.object_id).not_to eq(repository.object_id) + + expect(fresh_repository.raw_repository).not_to receive(:branch_names) + expect(fresh_repository.branch_names).to eq(fake_branch_names) + end + end + describe '#update_autocrlf_option' do describe 'when autocrlf is not already set to :input' do before do |