Commit bbbcc965 authored by Valery Sizov's avatar Valery Sizov

Merge branch 'fix-error-500-when-no-head' into 'master'

Fix error 500 when no HEAD is available

Steps to reproduce:

1. Create a project with a README
2. In the actual remote, type: `git symbolic-ref HEAD refs/heads/nowhere`
3. Check that HEAD is gone via `git ls-remote .`
4. Go to the projects page and see the Error 500

Error:

```
NoMethodError - undefined method `sha' for nil:NilClass:
  app/helpers/projects_helper.rb:281:in `readme_cache_key'
  app/views/projects/_readme.html.haml:10:in `_app_views_projects__readme_html_haml___2036282917939462960_70154565285700'
  actionview (4.1.11) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.1.11) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.1.11) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.1.11) lib/active_support/notifications.rb:159:in `instrument'
  actionview (4.1.11) lib/action_view/template.rb:339:in `instrument'
  actionview (4.1.11) lib/action_view/template.rb:143:in `render'
  rack-mini-profiler (0.9.0) lib/mini_profiler/profiling_methods.rb:108:in `block in profile_method'
  actionview (4.1.11) lib/action_view/renderer/partial_renderer.rb:306:in `render_partial'
  actionview (4.1.11) lib/action_view/renderer/partial_renderer.rb:279:in `block in render'
  actionview (4.1.11) lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
  activesupport (4.1.11) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.1.11) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.1.11) lib/active_support/notifications.rb:159:in `instrument'
  actionview (4.1.11) lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
  actionview (4.1.11) lib/action_view/renderer/partial_renderer.rb:278:in `render'
  actionview (4.1.11) lib/action_view/renderer/renderer.rb:47:in `render_partial'
  actionview (4.1.11) lib/action_view/helpers/rendering_helper.rb:35:in `render'
  haml (4.0.5) lib/haml/helpers/action_view_mods.rb:10:in `block in render_with_haml'
  haml (4.0.5) lib/haml/helpers.rb:89:in `non_haml'
  haml (4.0.5) lib/haml/helpers/action_view_mods.rb:10:in `render_with_haml'
  app/views/projects/show.html.haml:47:in `_app_views_projects_show_html_haml__1458303859692972698_70154948164180'
  actionview (4.1.11) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.1.11) lib/active_support/notifications.rb:159:in `block in instrument'
```

Closes https://github.com/gitlabhq/gitlabhq/issues/9484, but there may be some other issue there.

See merge request !1041
parents 330109ee a5e8ea54
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 7.14.0 (unreleased) v 7.14.0 (unreleased)
- Fix Error 500 when browsing projects with no HEAD (Stan Hu)
- Fix full screen mode for snippet comments (Daniel Gerhardt) - Fix full screen mode for snippet comments (Daniel Gerhardt)
- Fix 404 error in files view after deleting the last file in a repository (Stan Hu) - Fix 404 error in files view after deleting the last file in a repository (Stan Hu)
- Fix label read access for unauthenticated users (Daniel Gerhardt) - Fix label read access for unauthenticated users (Daniel Gerhardt)
......
...@@ -278,7 +278,8 @@ module ProjectsHelper ...@@ -278,7 +278,8 @@ module ProjectsHelper
end end
def readme_cache_key def readme_cache_key
[@project.id, @project.commit.sha, "readme"].join('-') sha = @project.commit.try(:sha) || 'nil'
[@project.id, sha, "readme"].join('-')
end end
def round_commit_count(project) def round_commit_count(project)
......
...@@ -22,7 +22,7 @@ describe ProjectsHelper do ...@@ -22,7 +22,7 @@ describe ProjectsHelper do
let(:user) { create(:user) } let(:user) { create(:user) }
it "returns false if there are no approipriate permissions" do it "returns false if there are no appropriate permissions" do
allow(helper).to receive(:can?) { false } allow(helper).to receive(:can?) { false }
expect(helper.can_change_visibility_level?(project, user)).to be_falsey expect(helper.can_change_visibility_level?(project, user)).to be_falsey
...@@ -52,4 +52,22 @@ describe ProjectsHelper do ...@@ -52,4 +52,22 @@ describe ProjectsHelper do
end end
end end
end end
describe "readme_cache_key" do
let(:project) { create(:project) }
before do
helper.instance_variable_set(:@project, project)
end
it "returns a valid cach key" do
expect(helper.send(:readme_cache_key)).to eq("#{project.id}-#{project.commit.id}-readme")
end
it "returns a valid cache key if HEAD does not exist" do
allow(project).to receive(:commit) { nil }
expect(helper.send(:readme_cache_key)).to eq("#{project.id}-nil-readme")
end
end
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