diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-02-15 11:13:24 +0000 |
---|---|---|
committer | Mark Fletcher <mark@gitlab.com> | 2018-02-15 11:43:41 +0000 |
commit | 424684554758a24914098b20300d5908235d7949 (patch) | |
tree | 65e04099e84ee8b39735e82350858bb2cac0c693 | |
parent | 7a7e6a26d2e07a9cedb730b6f2ad0a4e8332d33a (diff) | |
download | gitlab-ce-424684554758a24914098b20300d5908235d7949.tar.gz |
Merge branch 'sh-fix-error-500-licensee' into 'master'10-5-stable-prepare-rc7
Fix Error 500s loading repositories with inconsistent HEAD
Closes #43268
See merge request gitlab-org/gitlab-ce!17128
-rw-r--r-- | app/models/repository.rb | 10 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 12 |
2 files changed, 21 insertions, 1 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb index 1cf55fd4332..4f754b11da4 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -593,7 +593,15 @@ class Repository def license_key return unless exists? - Licensee.license(path).try(:key) + # The licensee gem creates a Rugged object from the path: + # https://github.com/benbalter/licensee/blob/v8.7.0/lib/licensee/projects/git_project.rb + begin + Licensee.license(path).try(:key) + # Normally we would rescue Rugged::Error, but that is banned by lint-rugged + # and we need to migrate this endpoint to Gitaly: + # https://gitlab.com/gitlab-org/gitaly/issues/1026 + rescue + end end cache_method :license_key diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index a6d48e369ac..0bc07dc7a85 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -873,6 +873,18 @@ describe Repository do expect(repository.license_key).to be_nil end + it 'returns nil when the commit SHA does not exist' do + allow(repository.head_commit).to receive(:sha).and_return('1' * 40) + + expect(repository.license_key).to be_nil + end + + it 'returns nil when master does not exist' do + repository.rm_branch(user, 'master') + + expect(repository.license_key).to be_nil + end + it 'returns the license key' do repository.create_file(user, 'LICENSE', Licensee::License.new('mit').content, |