]> source.dussan.org Git - redmine.git/commitdiff
scm: fix log converting error in Ruby 1.9 and add more tests.
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sat, 9 Apr 2011 08:07:22 +0000 (08:07 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sat, 9 Apr 2011 08:07:22 +0000 (08:07 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5370 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/changeset.rb
test/unit/changeset_test.rb

index 6475ae2d0fbffddd3ba06fdf6a8ce731c7ad73c6..c94723ad9d9164eae905116151e223d66f140562 100644 (file)
@@ -256,7 +256,8 @@ class Changeset < ActiveRecord::Base
       enc = encoding.blank? ? "UTF-8" : encoding
       if enc != "UTF-8"
         str.force_encoding(enc)
-        str = str.encode("UTF-8")
+        str = str.encode("UTF-8", :invalid => :replace,
+              :undef => :replace, :replace => '?')
       end
       if ! str.valid_encoding?
         str = str.encode("US-ASCII", :invalid => :replace,
index 95f45379ef12f02a555921c599b3e7413ebe287c..93027d8496e74abd9f3bc2760127177d41475a1b 100644 (file)
@@ -272,6 +272,30 @@ class ChangesetTest < ActiveSupport::TestCase
       end
   end
 
+  def test_invalid_utf8_sequences_in_comments_should_be_stripped_ja_jis
+      proj = Project.find(3)
+      str = "test\xb5\xfetest\xb5\xfe"
+      if str.respond_to?(:force_encoding)
+        str.force_encoding('ASCII-8BIT')
+      end
+      r = Repository::Bazaar.create!(
+            :project => proj,
+            :url => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-2022-JP' )
+      assert r
+      c = Changeset.new(:repository   => r,
+                        :committed_on => Time.now,
+                        :revision     => '123',
+                        :scmid        => '12345',
+                        :comments     => str)
+      assert( c.save )
+      if str.respond_to?(:force_encoding)
+        assert_equal "test??test??", c.comments
+      else
+        assert_equal "testtest", c.comments
+      end
+  end
+
   def test_comments_should_be_converted_all_latin1_to_utf8
       s1 = "\xC2\x80"
       s2 = "\xc3\x82\xc2\x80"