Commit 61a86101e81368b79bc9b99ef355518cde83facc
1 parent
05ef996e
Exists in
master
and in
4 other branches
Prevent empty public projects from throwing exceptions
GITLAB-1279 (GITLAB-1264) Change-Id: Ifb5b4313bc91fae720f8ef5c36152c45e9d38934
Showing
4 changed files
with
60 additions
and
32 deletions
Show diff stats
app/controllers/public/projects_controller.rb
| 1 | class Public::ProjectsController < ApplicationController | 1 | class Public::ProjectsController < ApplicationController |
| 2 | skip_before_filter :authenticate_user!, | 2 | skip_before_filter :authenticate_user!, |
| 3 | - :reject_blocked, :set_current_user_for_observers, | ||
| 4 | - :add_abilities | 3 | + :reject_blocked, :set_current_user_for_observers, |
| 4 | + :add_abilities | ||
| 5 | 5 | ||
| 6 | layout 'public' | 6 | layout 'public' |
| 7 | 7 | ||
| @@ -16,9 +16,11 @@ class Public::ProjectsController < ApplicationController | @@ -16,9 +16,11 @@ class Public::ProjectsController < ApplicationController | ||
| 16 | render_404 and return unless @project | 16 | render_404 and return unless @project |
| 17 | 17 | ||
| 18 | @repository = @project.repository | 18 | @repository = @project.repository |
| 19 | - @recent_tags = @repository.tags.first(10) | 19 | + unless @project.empty_repo? |
| 20 | + @recent_tags = @repository.tags.first(10) | ||
| 20 | 21 | ||
| 21 | - @commit = @repository.commit(params[:ref]) | ||
| 22 | - @tree = Tree.new(@repository, @commit.id) | 22 | + @commit = @repository.commit(params[:ref]) |
| 23 | + @tree = Tree.new(@repository, @commit.id) | ||
| 24 | + end | ||
| 23 | end | 25 | end |
| 24 | end | 26 | end |
app/views/public/projects/show.html.haml
| @@ -15,32 +15,35 @@ | @@ -15,32 +15,35 @@ | ||
| 15 | 15 | ||
| 16 | %br | 16 | %br |
| 17 | .row | 17 | .row |
| 18 | - .span9 | ||
| 19 | - = render 'tree', tree: @tree | ||
| 20 | - .span3 | ||
| 21 | - %h5 Repository: | ||
| 22 | - %div | ||
| 23 | - %p | ||
| 24 | - %span.light Bare size is | ||
| 25 | - #{@project.repository.size} MB | 18 | + - unless @project.empty_repo? |
| 19 | + .span9 | ||
| 20 | + = render 'tree', tree: @tree | ||
| 21 | + .span3 | ||
| 22 | + %h5 Repository: | ||
| 23 | + %div | ||
| 24 | + %p | ||
| 25 | + %span.light Bare size is | ||
| 26 | + #{@project.repository.size} MB | ||
| 26 | 27 | ||
| 27 | - %p | ||
| 28 | - = pluralize(@repository.round_commit_count, 'commit') | ||
| 29 | - %p | ||
| 30 | - = pluralize(@repository.branch_names.count, 'branch') | ||
| 31 | - %p | ||
| 32 | - = pluralize(@repository.tag_names.count, 'tag') | 28 | + %p |
| 29 | + = pluralize(@repository.round_commit_count, 'commit') | ||
| 30 | + %p | ||
| 31 | + = pluralize(@repository.branch_names.count, 'branch') | ||
| 32 | + %p | ||
| 33 | + = pluralize(@repository.tag_names.count, 'tag') | ||
| 33 | 34 | ||
| 34 | - - if @recent_tags.present? | ||
| 35 | - %hr | ||
| 36 | - %h5 Most Recent Tags: | ||
| 37 | - %ul.unstyled | ||
| 38 | - - @recent_tags.each do |tag| | ||
| 39 | - %li | ||
| 40 | - %p | ||
| 41 | - %i.icon-tag | ||
| 42 | - %strong= tag.name | ||
| 43 | - %small.light.pull-right | ||
| 44 | - %i.icon-calendar | ||
| 45 | - = time_ago_in_words(tag.commit.committed_date) | ||
| 46 | - ago | 35 | + - if @recent_tags.present? |
| 36 | + %hr | ||
| 37 | + %h5 Most Recent Tags: | ||
| 38 | + %ul.unstyled | ||
| 39 | + - @recent_tags.each do |tag| | ||
| 40 | + %li | ||
| 41 | + %p | ||
| 42 | + %i.icon-tag | ||
| 43 | + %strong= tag.name | ||
| 44 | + %small.light.pull-right | ||
| 45 | + %i.icon-calendar | ||
| 46 | + = time_ago_in_words(tag.commit.committed_date) | ||
| 47 | + ago | ||
| 48 | + - else | ||
| 49 | + = 'Empty Repository' |
features/public/public_projects.feature
| @@ -12,3 +12,8 @@ Feature: Public Projects Feature | @@ -12,3 +12,8 @@ Feature: Public Projects Feature | ||
| 12 | When I visit public page for "Community" project | 12 | When I visit public page for "Community" project |
| 13 | Then I should see public project details | 13 | Then I should see public project details |
| 14 | And I should see project readme | 14 | And I should see project readme |
| 15 | + | ||
| 16 | + Scenario: I visit an empty public project page | ||
| 17 | + Given public empty project "Empty Public Project" | ||
| 18 | + When I visit empty public project page | ||
| 19 | + Then I should see empty public project details | ||
| 15 | \ No newline at end of file | 20 | \ No newline at end of file |
features/steps/public/projects_feature.rb
| @@ -9,6 +9,11 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | @@ -9,6 +9,11 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | ||
| 9 | page.should_not have_content "Enterprise" | 9 | page.should_not have_content "Enterprise" |
| 10 | end | 10 | end |
| 11 | 11 | ||
| 12 | + step 'I should see project "Empty Public Project"' do | ||
| 13 | + page.should have_content "Empty Public Project" | ||
| 14 | + puts page.save_page('foo.html') | ||
| 15 | + end | ||
| 16 | + | ||
| 12 | step 'I should see public project details' do | 17 | step 'I should see public project details' do |
| 13 | page.should have_content '32 branches' | 18 | page.should have_content '32 branches' |
| 14 | page.should have_content '16 tags' | 19 | page.should have_content '16 tags' |
| @@ -22,6 +27,19 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | @@ -22,6 +27,19 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | ||
| 22 | create :project_with_code, name: 'Community', public: true | 27 | create :project_with_code, name: 'Community', public: true |
| 23 | end | 28 | end |
| 24 | 29 | ||
| 30 | + step 'public empty project "Empty Public Project"' do | ||
| 31 | + create :project, name: 'Empty Public Project', public: true | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + step 'I visit empty public project page' do | ||
| 35 | + project = Project.find_by_name('Empty Public Project') | ||
| 36 | + visit public_project_path(project) | ||
| 37 | + end | ||
| 38 | + | ||
| 39 | + step 'I should see empty public project details' do | ||
| 40 | + page.should have_content 'Empty Repository' | ||
| 41 | + end | ||
| 42 | + | ||
| 25 | step 'private project "Enterprise"' do | 43 | step 'private project "Enterprise"' do |
| 26 | create :project, name: 'Enterprise' | 44 | create :project, name: 'Enterprise' |
| 27 | end | 45 | end |