Commit f2e46514 authored by Douwe Maan's avatar Douwe Maan Committed by Yorick Peterse

Merge branch 'issue-17537-fix' into 'master'

Fix Error 500 when attempting to retrieve project license when HEAD points to non-existent ref

Closes #17537

See merge request !4151
parent 24fe6171
...@@ -4,6 +4,7 @@ v 8.8.0 (unreleased) ...@@ -4,6 +4,7 @@ v 8.8.0 (unreleased)
- Implement GFM references for milestones (Alejandro Rodríguez) - Implement GFM references for milestones (Alejandro Rodríguez)
- Snippets tab under user profile. !4001 (Long Nguyen) - Snippets tab under user profile. !4001 (Long Nguyen)
- Fix error when using link to uploads in global snippets - Fix error when using link to uploads in global snippets
- Fix Error 500 when attempting to retrieve project license when HEAD points to non-existent ref
- Assign labels and milestone to target project when moving issue. !3934 (Long Nguyen) - Assign labels and milestone to target project when moving issue. !3934 (Long Nguyen)
- Use a case-insensitive comparison in sanitizing URI schemes - Use a case-insensitive comparison in sanitizing URI schemes
- Toggle sign-up confirmation emails in application settings - Toggle sign-up confirmation emails in application settings
......
...@@ -479,7 +479,7 @@ class Repository ...@@ -479,7 +479,7 @@ class Repository
end end
def license_blob def license_blob
return nil if !exists? || empty? return nil unless head_exists?
cache.fetch(:license_blob) do cache.fetch(:license_blob) do
tree(:head).blobs.find do |file| tree(:head).blobs.find do |file|
...@@ -489,7 +489,7 @@ class Repository ...@@ -489,7 +489,7 @@ class Repository
end end
def license_key def license_key
return nil if !exists? || empty? return nil unless head_exists?
cache.fetch(:license_key) do cache.fetch(:license_key) do
Licensee.license(path).try(:key) Licensee.license(path).try(:key)
...@@ -497,7 +497,7 @@ class Repository ...@@ -497,7 +497,7 @@ class Repository
end end
def gitlab_ci_yml def gitlab_ci_yml
return nil if !exists? || empty? return nil unless head_exists?
@gitlab_ci_yml ||= tree(:head).blobs.find do |file| @gitlab_ci_yml ||= tree(:head).blobs.find do |file|
file.name == '.gitlab-ci.yml' file.name == '.gitlab-ci.yml'
...@@ -965,7 +965,7 @@ class Repository ...@@ -965,7 +965,7 @@ class Repository
end end
def main_language def main_language
return if empty? || rugged.head_unborn? return unless head_exists?
Linguist::Repository.new(rugged, rugged.head.target_id).language Linguist::Repository.new(rugged, rugged.head.target_id).language
end end
...@@ -985,4 +985,8 @@ class Repository ...@@ -985,4 +985,8 @@ class Repository
def cache def cache
@cache ||= RepositoryCache.new(path_with_namespace) @cache ||= RepositoryCache.new(path_with_namespace)
end end
def head_exists?
exists? && !empty? && !rugged.head_unborn?
end
end end
...@@ -176,6 +176,15 @@ describe Repository, models: true do ...@@ -176,6 +176,15 @@ describe Repository, models: true do
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master') repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master')
end end
it 'handles when HEAD points to non-existent ref' do
repository.commit_file(user, 'LICENSE', 'Copyright!', 'Add LICENSE', 'master', false)
rugged = double('rugged')
expect(rugged).to receive(:head_unborn?).and_return(true)
expect(repository).to receive(:rugged).and_return(rugged)
expect(repository.license_blob).to be_nil
end
it 'looks in the root_ref only' do it 'looks in the root_ref only' do
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'markdown') repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'markdown')
repository.commit_file(user, 'LICENSE', Licensee::License.new('mit').content, 'Add LICENSE', 'markdown', false) repository.commit_file(user, 'LICENSE', Licensee::License.new('mit').content, 'Add LICENSE', 'markdown', false)
...@@ -204,6 +213,15 @@ describe Repository, models: true do ...@@ -204,6 +213,15 @@ describe Repository, models: true do
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master') repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master')
end end
it 'handles when HEAD points to non-existent ref' do
repository.commit_file(user, 'LICENSE', 'Copyright!', 'Add LICENSE', 'master', false)
rugged = double('rugged')
expect(rugged).to receive(:head_unborn?).and_return(true)
expect(repository).to receive(:rugged).and_return(rugged)
expect(repository.license_key).to be_nil
end
it 'returns nil when no license is detected' do it 'returns nil when no license is detected' do
expect(repository.license_key).to be_nil expect(repository.license_key).to be_nil
end end
......
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