diff --git a/app/models/repository.rb b/app/models/repository.rb index ff35529586293d37ae81ca98654c2c9fa552db7a..0d60b5a6434f79429859c93a6ee48a649ce34a82 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -39,7 +39,8 @@ class Repository changelog license_blob license_key gitignore gitlab_ci_yml branch_names tag_names branch_count tag_count avatar exists? root_ref has_visible_content? - issue_template_names merge_request_template_names xcode_project?).freeze + issue_template_names merge_request_template_names xcode_project? + insights_config).freeze # Methods that use cache_method but only memoize the value MEMOIZED_CACHED_METHODS = %i(license).freeze @@ -57,7 +58,8 @@ class Repository avatar: :avatar, issue_template: :issue_template_names, merge_request_template: :merge_request_template_names, - xcode_config: :xcode_project? + xcode_config: :xcode_project?, + insights_config: :insights_config }.freeze def initialize(full_path, project, disk_path: nil, is_wiki: false) @@ -663,6 +665,11 @@ class Repository end cache_method :xcode_project? + def insights_config + file_on_head(:insights_config) + end + cache_method :insights_config + def head_commit @head_commit ||= commit(self.root_ref) end diff --git a/lib/gitlab/file_detector.rb b/lib/gitlab/file_detector.rb index 2770469ca9f040d78879d8c20bbeae82d79d8203..4678ef792c08170e14410bfa0c2c37aa76dc84d6 100644 --- a/lib/gitlab/file_detector.rb +++ b/lib/gitlab/file_detector.rb @@ -22,6 +22,7 @@ module Gitlab gitignore: '.gitignore', gitlab_ci: '.gitlab-ci.yml', route_map: '.gitlab/route-map.yml', + insights_config: '.gitlab/insights.yml', # Dependency files cartfile: %r{\ACartfile[^/]*\z}, diff --git a/spec/lib/gitlab/file_detector_spec.rb b/spec/lib/gitlab/file_detector_spec.rb index 4ba9094b24e671dbdb69df8a87808c181fd89c75..933366fd855db83f83c91be57b9e142e1ca37855 100644 --- a/spec/lib/gitlab/file_detector_spec.rb +++ b/spec/lib/gitlab/file_detector_spec.rb @@ -77,6 +77,10 @@ describe Gitlab::FileDetector do expect(described_class.type_of('.gitlab/merge_request_templates/foo.md')).to eq(:merge_request_template) end + it 'returns the type of an Insights config file' do + expect(described_class.type_of('.gitlab/insights.yml')).to eq(:insights_config) + end + it 'returns nil for an unknown file' do expect(described_class.type_of('foo.txt')).to be_nil end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 6599b4e765ae87a53cde2e1fee458b971493dff7..759dcd22b42956fd13e66a2a6f75aa71e3ba5e54 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1616,7 +1616,8 @@ describe Repository do :has_visible_content?, :issue_template_names, :merge_request_template_names, - :xcode_project? + :xcode_project?, + :insights_config ]) repository.after_change_head @@ -1882,6 +1883,26 @@ describe Repository do end end + describe "#insights_config", :use_clean_rails_memory_store_caching do + it 'returns a valid Insights config file' do + files = [TestBlob.new('file'), TestBlob.new('.gitlab/insights.yml')] + + expect(repository.tree).to receive(:blobs).and_return(files) + expect(repository.insights_config.path).to eq('.gitlab/insights.yml') + end + + it 'returns nil if does not exist' do + expect(repository.tree).to receive(:blobs).and_return([]) + expect(repository.insights_config).to be_nil + end + + it 'returns nil for an empty repository' do + allow(repository).to receive(:root_ref).and_raise(Gitlab::Git::Repository::NoRepository) + + expect(repository.insights_config).to be_nil + end + end + describe "#keep_around" do it "does not fail if we attempt to reference bad commit" do expect(repository.kept_around?('abc1234')).to be_falsey