diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-10-22 17:37:16 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-10-22 17:37:16 +0000 |
commit | 2d1866d966d94c688f9cb87c5bf3f096dffac844 (patch) | |
tree | 7a733c1cc51448ab69b3f892285305dbfb0ae15e /lib/redmine | |
parent | a6ec78a4dc658e3517ed682792016b6530458696 (diff) | |
download | redmine-2d1866d966d94c688f9cb87c5bf3f096dffac844.tar.gz redmine-2d1866d966d94c688f9cb87c5bf3f096dffac844.zip |
Merged rails-4.1 branch (#14534).
git-svn-id: http://svn.redmine.org/redmine/trunk@13482 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib/redmine')
-rw-r--r-- | lib/redmine/access_control.rb | 4 | ||||
-rw-r--r-- | lib/redmine/codeset_util.rb | 147 | ||||
-rw-r--r-- | lib/redmine/core_ext/active_record.rb | 25 | ||||
-rw-r--r-- | lib/redmine/core_ext/string/conversions.rb | 7 | ||||
-rw-r--r-- | lib/redmine/export/pdf.rb | 4 | ||||
-rw-r--r-- | lib/redmine/field_format.rb | 7 | ||||
-rw-r--r-- | lib/redmine/helpers/gantt.rb | 2 | ||||
-rw-r--r-- | lib/redmine/menu_manager.rb | 2 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/abstract_adapter.rb | 27 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/bazaar_adapter.rb | 7 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/cvs_adapter.rb | 8 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/darcs_adapter.rb | 5 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/git_adapter.rb | 10 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/mercurial_adapter.rb | 22 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/subversion_adapter.rb | 25 | ||||
-rw-r--r-- | lib/redmine/unified_diff.rb | 20 |
16 files changed, 62 insertions, 260 deletions
diff --git a/lib/redmine/access_control.rb b/lib/redmine/access_control.rb index 68de56965..21359508b 100644 --- a/lib/redmine/access_control.rb +++ b/lib/redmine/access_control.rb @@ -58,9 +58,11 @@ module Redmine if action.is_a?(Symbol) perm = permission(action) !perm.nil? && perm.read? - else + elsif action.is_a?(Hash) s = "#{action[:controller]}/#{action[:action]}" permissions.detect {|p| p.actions.include?(s) && p.read?}.present? + else + raise ArgumentError.new("Symbol or a Hash expected, #{action.class.name} given: #{action}") end end diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb index 45a5c3524..bb1f972d4 100644 --- a/lib/redmine/codeset_util.rb +++ b/lib/redmine/codeset_util.rb @@ -1,160 +1,71 @@ -if RUBY_VERSION < '1.9' - require 'iconv' -end module Redmine module CodesetUtil def self.replace_invalid_utf8(str) return str if str.nil? - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - if ! str.valid_encoding? - str = str.encode("US-ASCII", :invalid => :replace, - :undef => :replace, :replace => '?').encode("UTF-8") - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new('UTF-8', 'UTF-8') - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end - else - ic = Iconv.new('UTF-8', 'UTF-8') - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1,$!.failed.length] - retry - rescue - txtar += $!.success - end - str = txtar + str.force_encoding('UTF-8') + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") end str end def self.to_utf8(str, encoding) return str if str.nil? - str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) + str.force_encoding("ASCII-8BIT") if str.empty? - str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) + str.force_encoding("UTF-8") return str end enc = encoding.blank? ? "UTF-8" : encoding - if str.respond_to?(:force_encoding) - if enc.upcase != "UTF-8" - str.force_encoding(enc) - str = str.encode("UTF-8", :invalid => :replace, - :undef => :replace, :replace => '?') - else - str.force_encoding("UTF-8") - if ! str.valid_encoding? - str = str.encode("US-ASCII", :invalid => :replace, - :undef => :replace, :replace => '?').encode("UTF-8") - end - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new('UTF-8', enc) - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end + if enc.upcase != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') else - ic = Iconv.new('UTF-8', enc) - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1,$!.failed.length] - retry - rescue - txtar += $!.success + str.force_encoding("UTF-8") + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") end - str = txtar end str end def self.to_utf8_by_setting(str) return str if str.nil? - str = self.to_utf8_by_setting_internal(str) - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end - str + self.to_utf8_by_setting_internal(str).force_encoding('UTF-8') end def self.to_utf8_by_setting_internal(str) return str if str.nil? - if str.respond_to?(:force_encoding) - str.force_encoding('ASCII-8BIT') - end + str.force_encoding('ASCII-8BIT') return str if str.empty? return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end + str.force_encoding('UTF-8') encodings = Setting.repositories_encodings.split(',').collect(&:strip) encodings.each do |encoding| - if str.respond_to?(:force_encoding) - begin - str.force_encoding(encoding) - utf8 = str.encode('UTF-8') - return utf8 if utf8.valid_encoding? - rescue - # do nothing here and try the next encoding - end - else - begin - return Iconv.conv('UTF-8', encoding, str) - rescue Iconv::Failure - # do nothing here and try the next encoding - end + begin + str.force_encoding(encoding) + utf8 = str.encode('UTF-8') + return utf8 if utf8.valid_encoding? + rescue + # do nothing here and try the next encoding end end - str = self.replace_invalid_utf8(str) - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end - str + self.replace_invalid_utf8(str).force_encoding('UTF-8') end def self.from_utf8(str, encoding) str ||= '' - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - if encoding.upcase != 'UTF-8' - str = str.encode(encoding, :invalid => :replace, - :undef => :replace, :replace => '?') - else - str = self.replace_invalid_utf8(str) - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new(encoding, 'UTF-8') - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end + str.force_encoding('UTF-8') + if encoding.upcase != 'UTF-8' + str = str.encode(encoding, :invalid => :replace, + :undef => :replace, :replace => '?') else - ic = Iconv.new(encoding, 'UTF-8') - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1, $!.failed.length] - retry - rescue - txtar += $!.success - end - str = txtar + str = self.replace_invalid_utf8(str) end end end diff --git a/lib/redmine/core_ext/active_record.rb b/lib/redmine/core_ext/active_record.rb index 259da2e14..a1135d51d 100644 --- a/lib/redmine/core_ext/active_record.rb +++ b/lib/redmine/core_ext/active_record.rb @@ -15,35 +15,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -module ActiveRecord - module FinderMethods - def find_ids(*args) - find_ids_with_associations - end - - private - - def find_ids_with_associations - join_dependency = construct_join_dependency_for_association_find - relation = construct_relation_for_association_find_ids(join_dependency) - rows = connection.select_all(relation, 'SQL', relation.bind_values) - rows.map {|row| row["id"].to_i} - rescue ThrowResult - [] - end - - def construct_relation_for_association_find_ids(join_dependency) - relation = except(:includes, :eager_load, :preload, :select).select("#{table_name}.id") - apply_join_dependency(relation, join_dependency) - end - end -end - class DateValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) before_type_cast = record.attributes_before_type_cast[attribute.to_s] if before_type_cast.is_a?(String) && before_type_cast.present? - # TODO: #*_date_before_type_cast returns a Mysql::Time with ruby1.8+mysql gem unless before_type_cast =~ /\A\d{4}-\d{2}-\d{2}( 00:00:00)?\z/ && value record.errors.add attribute, :not_a_date end diff --git a/lib/redmine/core_ext/string/conversions.rb b/lib/redmine/core_ext/string/conversions.rb index 256f71afa..479f47c10 100644 --- a/lib/redmine/core_ext/string/conversions.rb +++ b/lib/redmine/core_ext/string/conversions.rb @@ -36,13 +36,6 @@ module Redmine #:nodoc: s.gsub!(',', '.') begin; Kernel.Float(s); rescue; nil; end end - - # Object#to_a removed in ruby1.9 - if RUBY_VERSION > '1.9' - def to_a - [self.dup] - end - end end end end diff --git a/lib/redmine/export/pdf.rb b/lib/redmine/export/pdf.rb index b555534a8..9903eaa42 100644 --- a/lib/redmine/export/pdf.rb +++ b/lib/redmine/export/pdf.rb @@ -678,9 +678,7 @@ module Redmine def self.rdm_from_utf8(txt, encoding) txt ||= '' txt = Redmine::CodesetUtil.from_utf8(txt, encoding) - if txt.respond_to?(:force_encoding) - txt.force_encoding('ASCII-8BIT') - end + txt.force_encoding('ASCII-8BIT') txt end diff --git a/lib/redmine/field_format.rb b/lib/redmine/field_format.rb index 18e5d74a8..e1387f2cf 100644 --- a/lib/redmine/field_format.rb +++ b/lib/redmine/field_format.rb @@ -597,18 +597,13 @@ module Redmine def target_class @target_class ||= self.class.name[/^(.*::)?(.+)Format$/, 2].constantize rescue nil end - - def reset_target_class - @target_class = nil - end def possible_custom_value_options(custom_value) options = possible_values_options(custom_value.custom_field, custom_value.customized) missing = [custom_value.value_was].flatten.reject(&:blank?) - options.map(&:last) if missing.any? options += target_class.where(:id => missing.map(&:to_i)).map {|o| [o.to_s, o.id.to_s]} - #TODO: use #sort_by! when ruby1.8 support is dropped - options = options.sort_by(&:first) + options.sort_by!(&:first) end options end diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index 6b054bb6d..2e4255243 100644 --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -167,7 +167,7 @@ module Redmine where("child.id IN (?)", ids). order("#{Project.table_name}.lft ASC"). uniq. - all + to_a else @projects = [] end diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb index 18759f26b..8dfd95abe 100644 --- a/lib/redmine/menu_manager.rb +++ b/lib/redmine/menu_manager.rb @@ -193,7 +193,7 @@ module Redmine # * Checking the url target (project only) # * Checking the conditions of the item def allowed_node?(node, user, project) - if project && user && !user.allowed_to?(node.url, project) + if node.url.is_a?(Hash) && project && user && !user.allowed_to?(node.url, project) return false end if node.condition && !node.condition.call(project) diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb index ec168bf84..0e60de610 100644 --- a/lib/redmine/scm/adapters/abstract_adapter.rb +++ b/lib/redmine/scm/adapters/abstract_adapter.rb @@ -18,17 +18,13 @@ require 'cgi' require 'redmine/scm/adapters' -if RUBY_VERSION < '1.9' - require 'iconv' -end - module Redmine module Scm module Adapters class AbstractAdapter #:nodoc: # raised if scm command exited with error, e.g. unknown revision. - class ScmCommandAborted < CommandFailed; end + class ScmCommandAborted < ::Redmine::Scm::Adapters::CommandFailed; end class << self def client_command @@ -288,21 +284,12 @@ module Redmine def scm_iconv(to, from, str) return nil if str.nil? return str if to == from - if str.respond_to?(:force_encoding) - str.force_encoding(from) - begin - str.encode(to) - rescue Exception => err - logger.error("failed to convert from #{from} to #{to}. #{err}") - nil - end - else - begin - Iconv.conv(to, from, str) - rescue Iconv::Failure => err - logger.error("failed to convert from #{from} to #{to}. #{err}") - nil - end + str.force_encoding(from) + begin + str.encode(to) + rescue Exception => err + logger.error("failed to convert from #{from} to #{to}. #{err}") + nil end end diff --git a/lib/redmine/scm/adapters/bazaar_adapter.rb b/lib/redmine/scm/adapters/bazaar_adapter.rb index 93ac13e02..c5e9d124d 100644 --- a/lib/redmine/scm/adapters/bazaar_adapter.rb +++ b/lib/redmine/scm/adapters/bazaar_adapter.rb @@ -43,10 +43,7 @@ module Redmine end def scm_command_version - scm_version = scm_version_from_command_line.dup - if scm_version.respond_to?(:force_encoding) - scm_version.force_encoding('ASCII-8BIT') - end + scm_version = scm_version_from_command_line.dup.force_encoding('ASCII-8BIT') if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}) m[2].scan(%r{\d+}).collect(&:to_i) end @@ -100,7 +97,7 @@ module Redmine prefix_utf8 = "#{url}/#{path}".gsub('\\', '/') logger.debug "PREFIX: #{prefix_utf8}" prefix = scm_iconv(@path_encoding, 'UTF-8', prefix_utf8) - prefix.force_encoding('ASCII-8BIT') if prefix.respond_to?(:force_encoding) + prefix.force_encoding('ASCII-8BIT') re = %r{^V\s+(#{Regexp.escape(prefix)})?(\/?)([^\/]+)(\/?)\s+(\S+)\r?$} io.each_line do |line| next unless line =~ re diff --git a/lib/redmine/scm/adapters/cvs_adapter.rb b/lib/redmine/scm/adapters/cvs_adapter.rb index d1096e725..ec7ce7bcf 100644 --- a/lib/redmine/scm/adapters/cvs_adapter.rb +++ b/lib/redmine/scm/adapters/cvs_adapter.rb @@ -43,10 +43,7 @@ module Redmine end def scm_command_version - scm_version = scm_version_from_command_line.dup - if scm_version.respond_to?(:force_encoding) - scm_version.force_encoding('ASCII-8BIT') - end + scm_version = scm_version_from_command_line.dup.force_encoding('ASCII-8BIT') if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}m) m[2].scan(%r{\d+}).collect(&:to_i) end @@ -94,7 +91,7 @@ module Redmine def entries(path=nil, identifier=nil, options={}) logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'" path_locale = scm_iconv(@path_encoding, 'UTF-8', path) - path_locale.force_encoding("ASCII-8BIT") if path_locale.respond_to?(:force_encoding) + path_locale.force_encoding("ASCII-8BIT") entries = Entries.new cmd_args = %w|-q rls -e| cmd_args << "-D" << time_to_cvstime_rlog(identifier) if identifier @@ -171,6 +168,7 @@ module Redmine file_state = nil branch_map = nil io.each_line() do |line| + line = line.strip if state != "revision" && /^#{ENDLOG}/ =~ line commit_log = String.new revision = nil diff --git a/lib/redmine/scm/adapters/darcs_adapter.rb b/lib/redmine/scm/adapters/darcs_adapter.rb index 3e4d55265..e2807352d 100644 --- a/lib/redmine/scm/adapters/darcs_adapter.rb +++ b/lib/redmine/scm/adapters/darcs_adapter.rb @@ -43,10 +43,7 @@ module Redmine end def darcs_binary_version - darcsversion = darcs_binary_version_from_command_line.dup - if darcsversion.respond_to?(:force_encoding) - darcsversion.force_encoding('ASCII-8BIT') - end + darcsversion = darcs_binary_version_from_command_line.dup.force_encoding('ASCII-8BIT') if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)}) m[2].scan(%r{\d+}).collect(&:to_i) end diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index 284a3f401..7a6a590b9 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -47,10 +47,7 @@ module Redmine end def scm_command_version - scm_version = scm_version_from_command_line.dup - if scm_version.respond_to?(:force_encoding) - scm_version.force_encoding('ASCII-8BIT') - end + scm_version = scm_version_from_command_line.dup.force_encoding('ASCII-8BIT') if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}) m[2].scan(%r{\d+}).collect(&:to_i) end @@ -145,10 +142,7 @@ module Redmine type = $1 sha = $2 size = $3 - name = $4 - if name.respond_to?(:force_encoding) - name.force_encoding(@path_encoding) - end + name = $4.force_encoding(@path_encoding) full_path = p.empty? ? name : "#{p}/#{name}" n = scm_iconv('UTF-8', @path_encoding, name) full_p = scm_iconv('UTF-8', @path_encoding, full_path) diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb index 881fdc89c..c6aa388a7 100644 --- a/lib/redmine/scm/adapters/mercurial_adapter.rb +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb @@ -54,10 +54,7 @@ module Redmine # The hg version is expressed either as a # release number (eg 0.9.5 or 1.0) or as a revision # id composed of 12 hexa characters. - theversion = hgversion_from_command_line.dup - if theversion.respond_to?(:force_encoding) - theversion.force_encoding('ASCII-8BIT') - end + theversion = hgversion_from_command_line.dup.force_encoding('ASCII-8BIT') if m = theversion.match(%r{\A(.*?)((\d+\.)+\d+)}) m[2].scan(%r{\d+}).collect(&:to_i) end @@ -130,10 +127,7 @@ module Redmine def summary return @summary if @summary hg 'rhsummary' do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin @summary = parse_xml(output)['rhsummary'] rescue @@ -146,10 +140,7 @@ module Redmine p1 = scm_iconv(@path_encoding, 'UTF-8', path) manifest = hg('rhmanifest', '-r', CGI.escape(hgrev(identifier)), CGI.escape(without_leading_slash(p1.to_s))) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin parse_xml(output)['rhmanifest']['repository']['manifest'] rescue @@ -193,10 +184,7 @@ module Redmine hg_args << '--limit' << options[:limit] if options[:limit] hg_args << hgtarget(path) unless path.blank? log = hg(*hg_args) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin # Mercurial < 1.5 does not support footer template for '</log>' parse_xml("#{output}</log>")['log'] @@ -278,7 +266,7 @@ module Redmine blame = Annotate.new hg 'rhannotate', '-ncu', '-r', CGI.escape(hgrev(identifier)), hgtarget(p) do |io| io.each_line do |line| - line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding) + line.force_encoding('ASCII-8BIT') next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$} r = Revision.new(:author => $1.strip, :revision => $2, :scmid => $3, :identifier => $3) diff --git a/lib/redmine/scm/adapters/subversion_adapter.rb b/lib/redmine/scm/adapters/subversion_adapter.rb index fcc9be90d..30ebc0c18 100644 --- a/lib/redmine/scm/adapters/subversion_adapter.rb +++ b/lib/redmine/scm/adapters/subversion_adapter.rb @@ -46,10 +46,7 @@ module Redmine end def svn_binary_version - scm_version = scm_version_from_command_line.dup - if scm_version.respond_to?(:force_encoding) - scm_version.force_encoding('ASCII-8BIT') - end + scm_version = scm_version_from_command_line.dup.force_encoding('ASCII-8BIT') if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}) m[2].scan(%r{\d+}).collect(&:to_i) end @@ -66,10 +63,7 @@ module Redmine cmd << credentials_string info = nil shellout(cmd) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin doc = parse_xml(output) # root_url = doc.elements["info/entry/repository/root"].text @@ -98,10 +92,7 @@ module Redmine cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}" cmd << credentials_string shellout(cmd) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin doc = parse_xml(output) each_xml_element(doc['lists']['list'], 'entry') do |entry| @@ -141,10 +132,7 @@ module Redmine cmd << credentials_string properties = {} shellout(cmd) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin doc = parse_xml(output) each_xml_element(doc['properties']['target'], 'property') do |property| @@ -168,10 +156,7 @@ module Redmine cmd << " --limit #{options[:limit].to_i}" if options[:limit] cmd << ' ' + target(path) shellout(cmd) do |io| - output = io.read - if output.respond_to?(:force_encoding) - output.force_encoding('UTF-8') - end + output = io.read.force_encoding('UTF-8') begin doc = parse_xml(output) each_xml_element(doc['log'], 'logentry') do |logentry| diff --git a/lib/redmine/unified_diff.rb b/lib/redmine/unified_diff.rb index ee4ac6987..b40205909 100644 --- a/lib/redmine/unified_diff.rb +++ b/lib/redmine/unified_diff.rb @@ -199,28 +199,10 @@ module Redmine while starting < max && line_left[starting] == line_right[starting] starting += 1 end - if (! "".respond_to?(:force_encoding)) && starting < line_left.size - while line_left[starting].ord.between?(128, 191) && starting > 0 - starting -= 1 - end - end ending = -1 while ending >= -(max - starting) && (line_left[ending] == line_right[ending]) ending -= 1 end - if (! "".respond_to?(:force_encoding)) && ending > (-1 * line_left.size) - while line_left[ending].ord.between?(128, 255) && ending < -1 - if line_left[ending].ord.between?(128, 191) - if line_left[ending + 1].ord.between?(128, 191) - ending += 1 - else - break - end - else - ending += 1 - end - end - end unless starting == 0 && ending == -1 [starting, ending] end @@ -279,7 +261,7 @@ module Redmine def line_to_html(line, offsets) html = line_to_html_raw(line, offsets) - html.force_encoding('UTF-8') if html.respond_to?(:force_encoding) + html.force_encoding('UTF-8') html end |