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
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
Closes https://github.com/gitlabhq/gitlabhq/issues/9484
Speed up security feature specs
Before: `rspec spec/features/security/ 0.12s user 0.04s system 0% cpu 3:38.00 total`
After: `rspec spec/features/security/ 0.12s user 0.04s system 0% cpu 1:40.58 total`
The majority of the speed improvements is from two things:
1. Instead of using our standard `login_as` helper in the matchers, we take advantage
of the `Warden::Test::Helpers` version of the method which bypasses the login form
and logs the user in directly. We were essentially testing that filling out the login
form works hundreds of times.
2. There were many tests that verified if a user of a certain access level
(master, owner, reporter, guest) had access to a resource. Unfortunately we were
creating every type of user for each test even though a test was only verifying one of
them at a time. Now the tests only create the one user role they're testing.
See merge request !1023
The user being created was no different than what `be_allowed_for` was
doing behind the scenes so we were essentially testing all user-level
accesses twice.
Move coverage-related setup back to spec_helper
These tools must be loaded before our regular Rails environment.
Partially reverts 57830201a9
See merge request !976
Implement faster search of code (via git grep)
Much faster than iterating over each file using rugged.
Performance compare for Linux repository using keyword `sha`:
```
OLD: 250 seconds
NEW: 9 seconds
```
See merge request !957