From 0e342992406047ebfe66dbf40b12c646c48b51d6 Mon Sep 17 00:00:00 2001
From: Toshi MARUYAMA <marutosijp2@yahoo.co.jp>
Date: Tue, 22 Feb 2011 13:39:12 +0000
Subject: [PATCH] scm: Ruby 1.9 compatibility for log.

Remove assuming UTF-8 is valid.
"\xC2\x80" of latin-1(iso-8859-1) is valid sequence of UTF-8.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4925 e93f8b46-1217-0410-a6f0-8f06a7374b81
---
 app/models/changeset.rb     |  7 -------
 test/unit/changeset_test.rb | 19 +++++++++++++++++++
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/app/models/changeset.rb b/app/models/changeset.rb
index e49113ebf..d2e4a53f8 100644
--- a/app/models/changeset.rb
+++ b/app/models/changeset.rb
@@ -245,13 +245,6 @@ class Changeset < ActiveRecord::Base
   end
 
   def self.to_utf8(str)
-    if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      return str if str.valid_encoding?
-    else
-      return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
-    end
-
     encoding = Setting.commit_logs_encoding.to_s.strip
     unless encoding.blank? || encoding == 'UTF-8'
       begin
diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb
index cb4d64042..508294fea 100644
--- a/test/unit/changeset_test.rb
+++ b/test/unit/changeset_test.rb
@@ -221,6 +221,25 @@ class ChangesetTest < ActiveSupport::TestCase
     end
   end
 
+  def test_comments_should_be_converted_all_latin1_to_utf8
+    with_settings :commit_logs_encoding => 'ISO-8859-1' do
+      c = Changeset.new
+      s1 = "\xC2\x80"
+      s2 = "\xc3\x82\xc2\x80"
+      if s1.respond_to?(:force_encoding)
+        s3 = s1
+        s4 = s2
+        s1.force_encoding('ASCII-8BIT')
+        s2.force_encoding('ASCII-8BIT')
+        s3.force_encoding('ISO-8859-1')
+        s4.force_encoding('UTF-8')
+        assert_equal s3.encode('UTF-8'), s4
+      end
+      c.comments = s1
+      assert_equal s2, c.comments
+    end
+  end
+
   def test_identifier
     c = Changeset.find_by_revision('1')
     assert_equal c.revision, c.identifier
-- 
GitLab