Fix Error 500 when attempting to retrieve project license when HEAD points to non-existent ref
Closes #17537
This commit is contained in:
parent
c3f68b1091
commit
dec6b31c27
|
@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
|
||||||
v 8.8.0 (unreleased)
|
v 8.8.0 (unreleased)
|
||||||
- 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
|
||||||
- Project#open_branches has been cleaned up and no longer loads entire records into memory.
|
- Project#open_branches has been cleaned up and no longer loads entire records into memory.
|
||||||
|
|
|
@ -475,7 +475,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|
|
||||||
|
@ -485,7 +485,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)
|
||||||
|
@ -493,7 +493,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'
|
||||||
|
@ -961,7 +961,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
|
||||||
|
@ -981,4 +981,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
|
||||||
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
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue