diff options
author | Nick Thomas <nick@gitlab.com> | 2018-10-12 14:42:35 +0100 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-10-17 11:23:35 +0100 |
commit | 10a60f7d944f0bef0bdee92c3b0ad9c6137215d1 (patch) | |
tree | a229d3f74a75aa48f19a66bebb0bcaa555fb8d61 /app/models/tree.rb | |
parent | e347170cc59dfa1e48de451f7c48ccb65d3e581a (diff) | |
download | gitlab-ce-10a60f7d944f0bef0bdee92c3b0ad9c6137215d1.tar.gz |
Use cached readme blobs where appropriatenick.thomas/gitlab-ce-49591-use-cached-readme-blobs
Diffstat (limited to 'app/models/tree.rb')
-rw-r--r-- | app/models/tree.rb | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/app/models/tree.rb b/app/models/tree.rb index 3641c33254c..cd385872171 100644 --- a/app/models/tree.rb +++ b/app/models/tree.rb @@ -2,6 +2,7 @@ class Tree include Gitlab::MarkupHelper + include Gitlab::Utils::StrongMemoize attr_accessor :repository, :sha, :path, :entries @@ -16,32 +17,36 @@ class Tree @entries = Gitlab::Git::Tree.where(git_repo, @sha, @path, recursive) end - def readme - return @readme if defined?(@readme) - - available_readmes = blobs.select do |blob| - Gitlab::FileDetector.type_of(blob.name) == :readme - end - - previewable_readmes = available_readmes.select do |blob| - previewable?(blob.name) - end - - plain_readmes = available_readmes.select do |blob| - plain?(blob.name) + def readme_path + strong_memoize(:readme_path) do + available_readmes = blobs.select do |blob| + Gitlab::FileDetector.type_of(blob.name) == :readme + end + + previewable_readmes = available_readmes.select do |blob| + previewable?(blob.name) + end + + plain_readmes = available_readmes.select do |blob| + plain?(blob.name) + end + + # Prioritize previewable over plain readmes + entry = previewable_readmes.first || plain_readmes.first + next nil unless entry + + if path == '/' + entry.name + else + File.join(path, entry.name) + end end + end - # Prioritize previewable over plain readmes - readme_tree = previewable_readmes.first || plain_readmes.first - - # Return if we can't preview any of them - if readme_tree.nil? - return @readme = nil + def readme + strong_memoize(:readme) do + repository.blob_at(sha, readme_path) if readme_path end - - readme_path = path == '/' ? readme_tree.name : File.join(path, readme_tree.name) - - @readme = repository.blob_at(sha, readme_path) end def trees |