Commit 149e91b5 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'dm-repository-xcode-project' into 'master'

Add Repository#xcode_project? method

See merge request gitlab-org/gitlab-ce!18854
parents 846a80eb f6ecb726
...@@ -37,7 +37,7 @@ class Repository ...@@ -37,7 +37,7 @@ class Repository
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? root_ref has_visible_content? tag_count avatar exists? root_ref has_visible_content?
issue_template_names merge_request_template_names).freeze issue_template_names merge_request_template_names xcode_project?).freeze
# Methods that use cache_method but only memoize the value # Methods that use cache_method but only memoize the value
MEMOIZED_CACHED_METHODS = %i(license).freeze MEMOIZED_CACHED_METHODS = %i(license).freeze
...@@ -55,7 +55,8 @@ class Repository ...@@ -55,7 +55,8 @@ class Repository
gitlab_ci: :gitlab_ci_yml, gitlab_ci: :gitlab_ci_yml,
avatar: :avatar, avatar: :avatar,
issue_template: :issue_template_names, issue_template: :issue_template_names,
merge_request_template: :merge_request_template_names merge_request_template: :merge_request_template_names,
xcode_config: :xcode_project?
}.freeze }.freeze
def initialize(full_path, project, disk_path: nil, is_wiki: false) def initialize(full_path, project, disk_path: nil, is_wiki: false)
...@@ -594,6 +595,11 @@ class Repository ...@@ -594,6 +595,11 @@ class Repository
end end
cache_method :gitlab_ci_yml cache_method :gitlab_ci_yml
def xcode_project?
file_on_head(:xcode_config).present?
end
cache_method :xcode_project?
def head_commit def head_commit
@head_commit ||= commit(self.root_ref) @head_commit ||= commit(self.root_ref)
end end
......
...@@ -14,6 +14,7 @@ module Gitlab ...@@ -14,6 +14,7 @@ module Gitlab
avatar: /\Alogo\.(png|jpg|gif)\z/, avatar: /\Alogo\.(png|jpg|gif)\z/,
issue_template: %r{\A\.gitlab/issue_templates/[^/]+\.md\z}, issue_template: %r{\A\.gitlab/issue_templates/[^/]+\.md\z},
merge_request_template: %r{\A\.gitlab/merge_request_templates/[^/]+\.md\z}, merge_request_template: %r{\A\.gitlab/merge_request_templates/[^/]+\.md\z},
xcode_config: %r{\A[^/]*\.(xcodeproj|xcworkspace)\z},
# Configuration files # Configuration files
gitignore: '.gitignore', gitignore: '.gitignore',
......
...@@ -1733,7 +1733,8 @@ describe Repository do ...@@ -1733,7 +1733,8 @@ describe Repository do
:gitlab_ci, :gitlab_ci,
:avatar, :avatar,
:issue_template, :issue_template,
:merge_request_template :merge_request_template,
:xcode_config
]) ])
repository.after_change_head repository.after_change_head
...@@ -2058,6 +2059,36 @@ describe Repository do ...@@ -2058,6 +2059,36 @@ describe Repository do
end end
end end
describe '#xcode_project?' do
before do
allow(repository).to receive(:tree).with(:head).and_return(double(:tree, blobs: [blob]))
end
context 'when the root contains a *.xcodeproj file' do
let(:blob) { double(:blob, path: 'Foo.xcodeproj') }
it 'returns true' do
expect(repository.xcode_project?).to be_truthy
end
end
context 'when the root contains a *.xcworkspace file' do
let(:blob) { double(:blob, path: 'Foo.xcworkspace') }
it 'returns true' do
expect(repository.xcode_project?).to be_truthy
end
end
context 'when the root contains no XCode config file' do
let(:blob) { double(:blob, path: 'subdir/Foo.xcworkspace') }
it 'returns false' do
expect(repository.xcode_project?).to be_falsey
end
end
end
describe "#keep_around" do describe "#keep_around" do
it "does not fail if we attempt to reference bad commit" do it "does not fail if we attempt to reference bad commit" do
expect(repository.kept_around?('abc1234')).to be_falsey expect(repository.kept_around?('abc1234')).to be_falsey
......
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