diff options
author | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2011-01-13 12:04:30 +0000 |
---|---|---|
committer | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2011-01-13 12:04:30 +0000 |
commit | 98b3a5065756995ff5768c9f354790549fd81509 (patch) | |
tree | 0f775d8a265bcb25957739340ceb9fdad352007c | |
parent | 43f6a626808a41ea3c7a82947a0db0b3fbcb7ebd (diff) | |
download | redmine-98b3a5065756995ff5768c9f354790549fd81509.tar.gz redmine-98b3a5065756995ff5768c9f354790549fd81509.zip |
scm: fix error on revision page for empty revision (#7307).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4703 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/repositories_controller.rb | 1 | ||||
-rw-r--r-- | app/models/repository.rb | 1 | ||||
-rw-r--r-- | test/functional/repositories_git_controller_test.rb | 20 | ||||
-rw-r--r-- | test/functional/repositories_subversion_controller_test.rb | 10 | ||||
-rw-r--r-- | test/unit/repository_git_test.rb | 17 | ||||
-rw-r--r-- | test/unit/repository_subversion_test.rb | 8 |
6 files changed, 56 insertions, 1 deletions
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 4b0a83464..3e4584ead 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -139,6 +139,7 @@ class RepositoriesController < ApplicationController end def revision + raise ChangesetNotFound if @rev.nil? || @rev.empty? @changeset = @repository.find_changeset_by_name(@rev) raise ChangesetNotFound unless @changeset diff --git a/app/models/repository.rb b/app/models/repository.rb index 3a84a691a..0a5b426c7 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -101,6 +101,7 @@ class Repository < ActiveRecord::Base # Finds and returns a revision with a number or the beginning of a hash def find_changeset_by_name(name) + return nil if name.nil? || name.empty? changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%'])) end diff --git a/test/functional/repositories_git_controller_test.rb b/test/functional/repositories_git_controller_test.rb index f0c776082..e08c41b48 100644 --- a/test/functional/repositories_git_controller_test.rb +++ b/test/functional/repositories_git_controller_test.rb @@ -176,6 +176,26 @@ class RepositoriesGitControllerTest < ActionController::TestCase assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /can not be annotated/ end + + def test_revision + @repository.fetch_changesets + @repository.reload + ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r| + get :revision, :id => 3, :rev => r + assert_response :success + assert_template 'revision' + end + end + + def test_empty_revision + @repository.fetch_changesets + @repository.reload + ['', ' ', nil].each do |r| + get :revision, :id => 1, :rev => r + assert_response 500 + assert_error_tag :content => /was not found/ + end + end else puts "Git test repository NOT FOUND. Skipping functional tests !!!" def test_fake; assert true end diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb index 32f0f78e7..5478cee27 100644 --- a/test/functional/repositories_subversion_controller_test.rb +++ b/test/functional/repositories_subversion_controller_test.rb @@ -171,7 +171,15 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase assert_response 500 assert_error_tag :content => /was not found/ end - + + def test_empty_revision + ['', ' ', nil].each do |r| + get :revision, :id => 1, :rev => r + assert_response 500 + assert_error_tag :content => /was not found/ + end + end + def test_revision_with_repository_pointing_to_a_subdirectory r = Project.find(1).repository # Changes repository url to a subdirectory diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index fc03d60ba..f6f3f6ede 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -63,6 +63,23 @@ class RepositoryGitTest < ActiveSupport::TestCase assert_equal 15, @repository.changesets.count end + def test_find_changeset_by_name + @repository.fetch_changesets + @repository.reload + ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r| + assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', + @repository.find_changeset_by_name(r).revision + end + end + + def test_find_changeset_by_empty_name + @repository.fetch_changesets + @repository.reload + ['', ' ', nil].each do |r| + assert_nil @repository.find_changeset_by_name(r) + end + end + def test_identifier @repository.fetch_changesets @repository.reload diff --git a/test/unit/repository_subversion_test.rb b/test/unit/repository_subversion_test.rb index 46a4ad74a..fd761823b 100644 --- a/test/unit/repository_subversion_test.rb +++ b/test/unit/repository_subversion_test.rb @@ -96,6 +96,14 @@ class RepositorySubversionTest < ActiveSupport::TestCase assert_equal c.revision, c.identifier end + def test_find_changeset_by_empty_name + @repository.fetch_changesets + @repository.reload + ['', ' ', nil].each do |r| + assert_nil @repository.find_changeset_by_name(r) + end + end + def test_identifier_nine_digit c = Changeset.new(:repository => @repository, :committed_on => Time.now, :revision => '123456789', :comments => 'test') |