From 4b83a0d848627ce3a9cb63f647c5a9fdb5799f5b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 11 Nov 2009 13:25:53 +0000 Subject: [PATCH] Fixes diff parser for when lines starting with multiple dashes are removed (#4186). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3028 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/unified_diff.rb | 5 ++--- test/unit/lib/redmine/unified_diff_test.rb | 26 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/redmine/unified_diff.rb b/lib/redmine/unified_diff.rb index e66ff217..09fbfcf1 100644 --- a/lib/redmine/unified_diff.rb +++ b/lib/redmine/unified_diff.rb @@ -27,11 +27,10 @@ module Redmine @truncated = false diff_table = DiffTable.new(diff_type) diff.each do |line| - if line =~ /^(---|\+\+\+) (.*)$/ + unless diff_table.add_line line self << diff_table if diff_table.length > 1 diff_table = DiffTable.new(diff_type) end - diff_table.add_line line lines += 1 if options[:max_lines] && lines > options[:max_lines] @truncated = true @@ -61,11 +60,11 @@ module Redmine end # Function for add a line of this Diff + # Returns false when the diff ends def add_line(line) unless @parsing if line =~ /^(---|\+\+\+) (.*)$/ @file_name = $2 - return false elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/ @line_num_l = $2.to_i @line_num_r = $5.to_i diff --git a/test/unit/lib/redmine/unified_diff_test.rb b/test/unit/lib/redmine/unified_diff_test.rb index 5b26cde2..7193b230 100644 --- a/test/unit/lib/redmine/unified_diff_test.rb +++ b/test/unit/lib/redmine/unified_diff_test.rb @@ -33,6 +33,32 @@ class Redmine::UnifiedDiffTest < ActiveSupport::TestCase diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'), :max_lines => 20) assert_equal 2, diff.size end + + def test_line_starting_with_dashes + diff = Redmine::UnifiedDiff.new(<<-DIFF +--- old.txt Wed Nov 11 14:24:58 2009 ++++ new.txt Wed Nov 11 14:25:02 2009 +@@ -1,8 +1,4 @@ +-Lines that starts with dashes: +- +------------------------- +--- file.c +------------------------- ++A line that starts with dashes: + + and removed. + +@@ -23,4 +19,4 @@ + + + +-Another chunk of change ++Another chunk of changes + +DIFF + ) + assert_equal 1, diff.size + end private