]> source.dussan.org Git - redmine.git/commitdiff
scm: fix error on revision page for empty revision (#7307).
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Thu, 13 Jan 2011 12:04:30 +0000 (12:04 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Thu, 13 Jan 2011 12:04:30 +0000 (12:04 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4703 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/repositories_controller.rb
app/models/repository.rb
test/functional/repositories_git_controller_test.rb
test/functional/repositories_subversion_controller_test.rb
test/unit/repository_git_test.rb
test/unit/repository_subversion_test.rb

index 4b0a834644527f3bb39bae7379d43232bea0a386..3e4584eadedffe49890af183c379c68af3d12185 100644 (file)
@@ -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
 
index 3a84a691a282db7f98b95867a86331df7045acf9..0a5b426c7126a037b713d2c82970149249d9b6df 100644 (file)
@@ -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
   
index f0c776082543720caa878066cad0d204e6f12997..e08c41b485aa44ef82a4d2d3cb5a27bc17c2f17e 100644 (file)
@@ -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
index 32f0f78e78e4ff8f86a6eb9bc419379ec6d10d92..5478cee2724ddb278065189981059fb96e660ef1 100644 (file)
@@ -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
index fc03d60baa0692add1fac2c53ffc7bb6249b30e5..f6f3f6edeac7c0a836ce2dc3a9522faaafff8360 100644 (file)
@@ -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
index 46a4ad74aa13dce31d23537f800eb9c823c2f649..fd761823bc57498bcf6a1552af24222dfdfdabda 100644 (file)
@@ -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')