Index: app/views/settings/_general.rhtml =================================================================== --- app/views/settings/_general.rhtml (revision 2094) +++ app/views/settings/_general.rhtml (working copy) @@ -48,6 +48,9 @@

<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %>

+

+<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %>

+

<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %>

Index: app/views/common/_diff.rhtml =================================================================== --- app/views/common/_diff.rhtml (revision 2111) +++ app/views/common/_diff.rhtml (working copy) @@ -1,4 +1,5 @@ -<% Redmine::UnifiedDiff.new(diff, :type => diff_type).each do |table_file| -%> +<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%> +<% diff.each do |table_file| -%>
<% if diff_type == 'sbs' -%> @@ -62,3 +63,5 @@ <% end -%> + +<%= I18n.t(:text_diff_truncated) if diff.truncated? %> Index: lang/lt.yml =================================================================== --- config/settings.yml (revision 2094) +++ config/settings.yml (working copy) @@ -61,6 +61,9 @@ feeds_limit: format: int default: 15 +diff_max_lines_displayed: + format: int + default: 1500 enabled_scm: serialized: true default: Index: lib/redmine/unified_diff.rb =================================================================== --- lib/redmine/unified_diff.rb (revision 2110) +++ lib/redmine/unified_diff.rb (working copy) @@ -19,8 +19,11 @@ # Class used to parse unified diffs class UnifiedDiff < Array def initialize(diff, options={}) + options.assert_valid_keys(:type, :max_lines) diff_type = options[:type] || 'inline' + lines = 0 + @truncated = false diff_table = DiffTable.new(diff_type) diff.each do |line| if line =~ /^(---|\+\+\+) (.*)$/ @@ -28,10 +31,17 @@ diff_table = DiffTable.new(diff_type) end diff_table.add_line line + lines += 1 + if options[:max_lines] && lines > options[:max_lines] + @truncated = true + break + end end self << diff_table unless diff_table.empty? self end + + def truncated?; @truncated; end end # Class that represents a file diff