summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>2011-01-13 12:04:30 +0000
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>2011-01-13 12:04:30 +0000
commit98b3a5065756995ff5768c9f354790549fd81509 (patch)
tree0f775d8a265bcb25957739340ceb9fdad352007c
parent43f6a626808a41ea3c7a82947a0db0b3fbcb7ebd (diff)
downloadredmine-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.rb1
-rw-r--r--app/models/repository.rb1
-rw-r--r--test/functional/repositories_git_controller_test.rb20
-rw-r--r--test/functional/repositories_subversion_controller_test.rb10
-rw-r--r--test/unit/repository_git_test.rb17
-rw-r--r--test/unit/repository_subversion_test.rb8
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')