OSDN Git Service

Fixed: RepositoriesController#revision may show wrong revision (#3779).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Sep 2009 15:20:22 +0000 (15:20 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Sep 2009 15:20:22 +0000 (15:20 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2898 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/repositories_controller.rb
app/models/repository.rb
test/fixtures/changesets.yml
test/fixtures/repositories/subversion_repository.dump.gz
test/functional/repositories_controller_test.rb
test/functional/repositories_subversion_controller_test.rb
test/unit/changeset_test.rb
test/unit/repository_subversion_test.rb

index 4240546..7527f0d 100644 (file)
@@ -130,7 +130,7 @@ class RepositoriesController < ApplicationController
   end
   
   def revision
-    @changeset = @repository.changesets.find(:first, :conditions => ["revision LIKE ?", @rev + '%'])
+    @changeset = @repository.find_changeset_by_name(@rev)
     raise ChangesetNotFound unless @changeset
 
     respond_to do |format|
index 8440bc6..2947d1c 100644 (file)
@@ -92,6 +92,11 @@ class Repository < ActiveRecord::Base
     path
   end
   
+  # Finds and returns a revision with a number or the beginning of a hash
+  def find_changeset_by_name(name)
+    changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_i] : ["revision LIKE ?", name + '%']))
+  end
+  
   def latest_changeset
     @latest_changeset ||= changesets.find(:first)
   end
index 3eda7c5..41f077a 100644 (file)
@@ -81,4 +81,24 @@ changesets_008:
   user_id: 3
   repository_id: 10
   committer: dlopper
+changesets_009: 
+  commit_date: "2009-09-10"
+  comments: One file added.
+  committed_on: 2009-09-10 19:04:35
+  revision: "9"
+  id: 108
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
+changesets_010: 
+  commit_date: "2009-09-10"
+  comments: Same file modified.
+  committed_on: 2009-09-10 19:04:35
+  revision: "10"
+  id: 109
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
   
\ No newline at end of file
index 9978350..79ef77f 100644 (file)
Binary files a/test/fixtures/repositories/subversion_repository.dump.gz and b/test/fixtures/repositories/subversion_repository.dump.gz differ
index d786c2e..5ff2a6a 100644 (file)
@@ -77,6 +77,13 @@ class RepositoriesControllerTest < ActionController::TestCase
     )
   end
   
+  def test_revision
+    get :revision, :id => 1, :rev => 1
+    assert_response :success
+    assert_not_nil assigns(:changeset)
+    assert_equal "1", assigns(:changeset).revision
+  end
+  
   def test_revision_with_before_nil_and_afer_normal
     get :revision, {:id => 1, :rev => 1}
     assert_response :success
index 865bae3..f07c7ea 100644 (file)
@@ -102,7 +102,7 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
       
       changesets = assigns(:changesets)
       assert_not_nil changesets
-      assert_equal %w(7 6 5 2), changesets.collect(&:revision)
+      assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
     end
       
     def test_entry
index 9af53a3..02736a9 100644 (file)
@@ -91,7 +91,7 @@ class ChangesetTest < ActiveSupport::TestCase
   end
 
   def test_next_nil
-    changeset = Changeset.find_by_revision('8')
+    changeset = Changeset.find_by_revision('10')
     assert_nil changeset.next
   end
 end
index 17a0a42..f0ad212 100644 (file)
@@ -33,8 +33,8 @@ class RepositorySubversionTest < ActiveSupport::TestCase
       @repository.fetch_changesets
       @repository.reload
       
-      assert_equal 8, @repository.changesets.count
-      assert_equal 16, @repository.changes.count
+      assert_equal 10, @repository.changesets.count
+      assert_equal 18, @repository.changes.count
       assert_equal 'Initial import.', @repository.changesets.find_by_revision('1').comments
     end
     
@@ -46,7 +46,7 @@ class RepositorySubversionTest < ActiveSupport::TestCase
       assert_equal 5, @repository.changesets.count
       
       @repository.fetch_changesets
-      assert_equal 8, @repository.changesets.count
+      assert_equal 10, @repository.changesets.count
     end
     
     def test_latest_changesets_with_limit