Commit 4b83a0d8 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

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
parent 58103680
...@@ -27,11 +27,10 @@ module Redmine ...@@ -27,11 +27,10 @@ module Redmine
@truncated = false @truncated = false
diff_table = DiffTable.new(diff_type) diff_table = DiffTable.new(diff_type)
diff.each do |line| diff.each do |line|
if line =~ /^(---|\+\+\+) (.*)$/ unless diff_table.add_line line
self << diff_table if diff_table.length > 1 self << diff_table if diff_table.length > 1
diff_table = DiffTable.new(diff_type) diff_table = DiffTable.new(diff_type)
end end
diff_table.add_line line
lines += 1 lines += 1
if options[:max_lines] && lines > options[:max_lines] if options[:max_lines] && lines > options[:max_lines]
@truncated = true @truncated = true
...@@ -61,11 +60,11 @@ module Redmine ...@@ -61,11 +60,11 @@ module Redmine
end end
# Function for add a line of this Diff # Function for add a line of this Diff
# Returns false when the diff ends
def add_line(line) def add_line(line)
unless @parsing unless @parsing
if line =~ /^(---|\+\+\+) (.*)$/ if line =~ /^(---|\+\+\+) (.*)$/
@file_name = $2 @file_name = $2
return false
elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/ elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/
@line_num_l = $2.to_i @line_num_l = $2.to_i
@line_num_r = $5.to_i @line_num_r = $5.to_i
......
...@@ -33,6 +33,32 @@ class Redmine::UnifiedDiffTest < ActiveSupport::TestCase ...@@ -33,6 +33,32 @@ class Redmine::UnifiedDiffTest < ActiveSupport::TestCase
diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'), :max_lines => 20) diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'), :max_lines => 20)
assert_equal 2, diff.size assert_equal 2, diff.size
end 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 private
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment