diff lib/redmine/unified_diff.rb @ 245:051f544170fe

* Update to SVN trunk revision 4993
author Chris Cannam
date Thu, 03 Mar 2011 11:42:28 +0000
parents 513646585e45
children cbce1fd3b1b7
line wrap: on
line diff
--- a/lib/redmine/unified_diff.rb	Thu Mar 03 11:40:10 2011 +0000
+++ b/lib/redmine/unified_diff.rb	Thu Mar 03 11:42:28 2011 +0000
@@ -22,13 +22,21 @@
       options.assert_valid_keys(:type, :max_lines)
       diff = diff.split("\n") if diff.is_a?(String)
       diff_type = options[:type] || 'inline'
-      
       lines = 0
       @truncated = false
       diff_table = DiffTable.new(diff_type)
       diff.each do |line|
+        line_encoding = nil
+        if line.respond_to?(:force_encoding)
+          line_encoding = line.encoding
+          # TODO: UTF-16 and Japanese CP932 which is imcompatible with ASCII
+          #       In Japan, diffrence between file path encoding
+          #       and file contents encoding is popular.
+          line.force_encoding('ASCII-8BIT')
+        end
         unless diff_table.add_line line
-          self << diff_table if diff_table.length > 1
+          line.force_encoding(line_encoding) if line_encoding
+          self << diff_table if diff_table.length > 0
           diff_table = DiffTable.new(diff_type)
         end
         lines += 1
@@ -40,7 +48,7 @@
       self << diff_table unless diff_table.empty?
       self
     end
-    
+
     def truncated?; @truncated; end
   end