summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-05-20 20:46:06 +0000
committerDouwe Maan <douwe@gitlab.com>2016-05-20 20:46:06 +0000
commit56eb42007ae8c3c390b35bf336884b3bad3591c5 (patch)
tree4ba6515145a3642112d5b349f51bb23d2fcb961c
parentf9cf65a6c4c8dfb94636f95fffa3ffa7176a31ef (diff)
parentdec6b31c2772f7af792f7739b8b3b86a4dbd75db (diff)
downloadgitlab-ce-56eb42007ae8c3c390b35bf336884b3bad3591c5.tar.gz
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
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/repository.rb12
-rw-r--r--spec/models/repository_spec.rb18
3 files changed, 27 insertions, 4 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4c810ab21f2..457af51605c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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)
- Snippets tab under user profile. !4001 (Long Nguyen)
- 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)
- Use a case-insensitive comparison in sanitizing URI schemes
- Toggle sign-up confirmation emails in application settings
diff --git a/app/models/repository.rb b/app/models/repository.rb
index ca62fbbdf04..47a7223c723 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -479,7 +479,7 @@ class Repository
end
def license_blob
- return nil if !exists? || empty?
+ return nil unless head_exists?
cache.fetch(:license_blob) do
tree(:head).blobs.find do |file|
@@ -489,7 +489,7 @@ class Repository
end
def license_key
- return nil if !exists? || empty?
+ return nil unless head_exists?
cache.fetch(:license_key) do
Licensee.license(path).try(:key)
@@ -497,7 +497,7 @@ class Repository
end
def gitlab_ci_yml
- return nil if !exists? || empty?
+ return nil unless head_exists?
@gitlab_ci_yml ||= tree(:head).blobs.find do |file|
file.name == '.gitlab-ci.yml'
@@ -965,7 +965,7 @@ class Repository
end
def main_language
- return if empty? || rugged.head_unborn?
+ return unless head_exists?
Linguist::Repository.new(rugged, rugged.head.target_id).language
end
@@ -985,4 +985,8 @@ class Repository
def cache
@cache ||= RepositoryCache.new(path_with_namespace)
end
+
+ def head_exists?
+ exists? && !empty? && !rugged.head_unborn?
+ end
end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 7c94f3639d4..583151023b6 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -182,6 +182,15 @@ describe Repository, models: true do
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master')
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
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'markdown')
repository.commit_file(user, 'LICENSE', Licensee::License.new('mit').content, 'Add LICENSE', 'markdown', false)
@@ -210,6 +219,15 @@ describe Repository, models: true do
repository.remove_file(user, 'LICENSE', 'Remove LICENSE', 'master')
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
expect(repository.license_key).to be_nil
end