From 61a86101e81368b79bc9b99ef355518cde83facc Mon Sep 17 00:00:00 2001 From: Izaak Alpert Date: Fri, 20 Sep 2013 11:39:12 -0400 Subject: [PATCH] Prevent empty public projects from throwing exceptions GITLAB-1279 (GITLAB-1264) Change-Id: Ifb5b4313bc91fae720f8ef5c36152c45e9d38934 --- app/controllers/public/projects_controller.rb | 12 +++--- app/views/public/projects/show.html.haml | 57 ++++++++++++++------------- features/public/public_projects.feature | 5 +++ features/steps/public/projects_feature.rb | 18 +++++++++ 4 files changed, 60 insertions(+), 32 deletions(-) diff --git a/app/controllers/public/projects_controller.rb b/app/controllers/public/projects_controller.rb index 85216cd32..3504bd3f1 100644 --- a/app/controllers/public/projects_controller.rb +++ b/app/controllers/public/projects_controller.rb @@ -1,7 +1,7 @@ class Public::ProjectsController < ApplicationController skip_before_filter :authenticate_user!, - :reject_blocked, :set_current_user_for_observers, - :add_abilities + :reject_blocked, :set_current_user_for_observers, + :add_abilities layout 'public' @@ -16,9 +16,11 @@ class Public::ProjectsController < ApplicationController render_404 and return unless @project @repository = @project.repository - @recent_tags = @repository.tags.first(10) + unless @project.empty_repo? + @recent_tags = @repository.tags.first(10) - @commit = @repository.commit(params[:ref]) - @tree = Tree.new(@repository, @commit.id) + @commit = @repository.commit(params[:ref]) + @tree = Tree.new(@repository, @commit.id) + end end end diff --git a/app/views/public/projects/show.html.haml b/app/views/public/projects/show.html.haml index c4d8a4f5a..195b9bc07 100644 --- a/app/views/public/projects/show.html.haml +++ b/app/views/public/projects/show.html.haml @@ -15,32 +15,35 @@ %br .row - .span9 - = render 'tree', tree: @tree - .span3 - %h5 Repository: - %div - %p - %span.light Bare size is - #{@project.repository.size} MB + - unless @project.empty_repo? + .span9 + = render 'tree', tree: @tree + .span3 + %h5 Repository: + %div + %p + %span.light Bare size is + #{@project.repository.size} MB - %p - = pluralize(@repository.round_commit_count, 'commit') - %p - = pluralize(@repository.branch_names.count, 'branch') - %p - = pluralize(@repository.tag_names.count, 'tag') + %p + = pluralize(@repository.round_commit_count, 'commit') + %p + = pluralize(@repository.branch_names.count, 'branch') + %p + = pluralize(@repository.tag_names.count, 'tag') - - if @recent_tags.present? - %hr - %h5 Most Recent Tags: - %ul.unstyled - - @recent_tags.each do |tag| - %li - %p - %i.icon-tag - %strong= tag.name - %small.light.pull-right - %i.icon-calendar - = time_ago_in_words(tag.commit.committed_date) - ago + - if @recent_tags.present? + %hr + %h5 Most Recent Tags: + %ul.unstyled + - @recent_tags.each do |tag| + %li + %p + %i.icon-tag + %strong= tag.name + %small.light.pull-right + %i.icon-calendar + = time_ago_in_words(tag.commit.committed_date) + ago + - else + = 'Empty Repository' diff --git a/features/public/public_projects.feature b/features/public/public_projects.feature index c4f1b6203..1866d3f47 100644 --- a/features/public/public_projects.feature +++ b/features/public/public_projects.feature @@ -12,3 +12,8 @@ Feature: Public Projects Feature When I visit public page for "Community" project Then I should see public project details And I should see project readme + + Scenario: I visit an empty public project page + Given public empty project "Empty Public Project" + When I visit empty public project page + Then I should see empty public project details \ No newline at end of file diff --git a/features/steps/public/projects_feature.rb b/features/steps/public/projects_feature.rb index 8d612498f..2268e9b9c 100644 --- a/features/steps/public/projects_feature.rb +++ b/features/steps/public/projects_feature.rb @@ -9,6 +9,11 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps page.should_not have_content "Enterprise" end + step 'I should see project "Empty Public Project"' do + page.should have_content "Empty Public Project" + puts page.save_page('foo.html') + end + step 'I should see public project details' do page.should have_content '32 branches' page.should have_content '16 tags' @@ -22,6 +27,19 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps create :project_with_code, name: 'Community', public: true end + step 'public empty project "Empty Public Project"' do + create :project, name: 'Empty Public Project', public: true + end + + step 'I visit empty public project page' do + project = Project.find_by_name('Empty Public Project') + visit public_project_path(project) + end + + step 'I should see empty public project details' do + page.should have_content 'Empty Repository' + end + step 'private project "Enterprise"' do create :project, name: 'Enterprise' end -- 2.11.0