diff options
author | Jacob Vosmaer (GitLab) <jacob@gitlab.com> | 2017-11-21 19:00:05 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-11-21 19:00:05 +0000 |
commit | 00cd5d93ce2245204356cf550871cfb96ea7dc8e (patch) | |
tree | d7d1ec5e66c65ba23cb3f436d78269e058601e8e | |
parent | 2822254ec5e6b27e092d2f850b48fd165f9424a0 (diff) | |
download | gitlab-ce-00cd5d93ce2245204356cf550871cfb96ea7dc8e.tar.gz |
Use Redis cache for branch existence checks
-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 26d1bc12232..2bf21cbdcc4 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 |