BigW Consortium Gitlab

Commit 450c98a6 by Grzegorz Bizon Committed by Robert Speicher

Merge branch 'sh-fix-issue-38646' into 'master'

Fix pushes to an empty repository not invalidating has_visible_content? cache Closes #38646 See merge request gitlab-org/gitlab-ce!14613
parent 886511fd
...@@ -33,7 +33,10 @@ class Repository ...@@ -33,7 +33,10 @@ class Repository
CACHED_METHODS = %i(size commit_count rendered_readme contribution_guide CACHED_METHODS = %i(size commit_count rendered_readme contribution_guide
changelog license_blob license_key gitignore koding_yml changelog license_blob license_key gitignore koding_yml
gitlab_ci_yml branch_names tag_names branch_count gitlab_ci_yml branch_names tag_names branch_count
tag_count avatar exists? empty? root_ref).freeze tag_count avatar exists? empty? root_ref has_visible_content?).freeze
# Methods that use cache_method but only memoize the value
MEMOIZED_CACHED_METHODS = %i(license empty_repo?).freeze
# Certain method caches should be refreshed when certain types of files are # Certain method caches should be refreshed when certain types of files are
# changed. This Hash maps file types (as returned by Gitlab::FileDetector) to # changed. This Hash maps file types (as returned by Gitlab::FileDetector) to
...@@ -268,7 +271,7 @@ class Repository ...@@ -268,7 +271,7 @@ class Repository
end end
def expire_branches_cache def expire_branches_cache
expire_method_caches(%i(branch_names branch_count)) expire_method_caches(%i(branch_names branch_count has_visible_content?))
@local_branches = nil @local_branches = nil
@branch_exists_memo = nil @branch_exists_memo = nil
end end
...@@ -339,7 +342,7 @@ class Repository ...@@ -339,7 +342,7 @@ class Repository
def expire_emptiness_caches def expire_emptiness_caches
return unless empty? return unless empty?
expire_method_caches(%i(empty?)) expire_method_caches(%i(empty? has_visible_content?))
end end
def lookup_cache def lookup_cache
......
---
title: Fix pushes to an empty repository not invalidating has_visible_content? cache
merge_request:
author:
type: fixed
...@@ -1275,6 +1275,7 @@ describe Repository, models: true do ...@@ -1275,6 +1275,7 @@ describe Repository, models: true do
allow(repository).to receive(:empty?).and_return(true) allow(repository).to receive(:empty?).and_return(true)
expect(cache).to receive(:expire).with(:empty?) expect(cache).to receive(:expire).with(:empty?)
expect(cache).to receive(:expire).with(:has_visible_content?)
repository.expire_emptiness_caches repository.expire_emptiness_caches
end end
...@@ -1283,6 +1284,7 @@ describe Repository, models: true do ...@@ -1283,6 +1284,7 @@ describe Repository, models: true do
allow(repository).to receive(:empty?).and_return(false) allow(repository).to receive(:empty?).and_return(false)
expect(cache).not_to receive(:expire).with(:empty?) expect(cache).not_to receive(:expire).with(:empty?)
expect(cache).not_to receive(:expire).with(:has_visible_content?)
repository.expire_emptiness_caches repository.expire_emptiness_caches
end end
...@@ -1613,7 +1615,7 @@ describe Repository, models: true do ...@@ -1613,7 +1615,7 @@ describe Repository, models: true do
describe '#expire_branches_cache' do describe '#expire_branches_cache' do
it 'expires the cache' do it 'expires the cache' do
expect(repository).to receive(:expire_method_caches) expect(repository).to receive(:expire_method_caches)
.with(%i(branch_names branch_count)) .with(%i(branch_names branch_count has_visible_content?))
.and_call_original .and_call_original
repository.expire_branches_cache repository.expire_branches_cache
...@@ -1874,6 +1876,15 @@ describe Repository, models: true do ...@@ -1874,6 +1876,15 @@ describe Repository, models: true do
repository.expire_all_method_caches repository.expire_all_method_caches
end end
it 'all cache_method definitions are in the lists of method caches' do
methods = repository.methods.map do |method|
match = /^_uncached_(.*)/.match(method)
match[1].to_sym if match
end.compact
expect(methods).to match_array(Repository::CACHED_METHODS + Repository::MEMOIZED_CACHED_METHODS)
end
end end
describe '#file_on_head' do describe '#file_on_head' do
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment