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
This commit is contained in:
Jean-Philippe Lang 2009-11-11 13:25:53 +00:00
parent 58103680bd
commit 4b83a0d848
2 changed files with 28 additions and 3 deletions

View File

@ -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

View File

@ -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