Duplicate the behaviour and refactor for use with parallel diff.
This commit is contained in:
parent
b54f2393c3
commit
1067b00724
3 changed files with 59 additions and 6 deletions
|
@ -23,6 +23,13 @@ module CommitsHelper
|
|||
end
|
||||
end
|
||||
|
||||
def side_diff_line(diff, index)
|
||||
Gitlab::DiffParser.new(diff.diff.lines.to_a, diff.new_path)
|
||||
.each_for_parallel do |full_line, type, line_code, line_new, line_old, next_line|
|
||||
yield(full_line, type, line_code, line_new, line_old, next_line)
|
||||
end
|
||||
end
|
||||
|
||||
def each_diff_line_near(diff, index, expected_line_code)
|
||||
max_number_of_lines = 16
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
/ Side-by-side diff view
|
||||
%div.text-file
|
||||
%table
|
||||
- each_diff_line(diff, index) do |line, type, line_code, line_new, line_old, raw_line, e|
|
||||
- side_diff_line(diff, index) do |line, type, line_code, line_new, line_old, next_line|
|
||||
- next if type == 'new'
|
||||
%tr.line_holder.parallel{ id: line_code, class: "#{type}" }
|
||||
- if type != 'match'
|
||||
%td.old_line
|
||||
= link_to raw(type == "new" ? " " : line_old), "##{line_code}", id: line_code
|
||||
= link_to raw(line_old), "##{line_code}", id: line_code
|
||||
- if type == 'old'
|
||||
%td.line_content{class: "parallel noteable_line old #{line_code}", "line_code" => line_code}= line
|
||||
%td.line_content{class: "parallel noteable_line old #{line_code}", "line_code" => line_code}= raw line
|
||||
- else
|
||||
%td.line_content.parallel= line
|
||||
%td.new_line{data: {linenumber: line_new}}
|
||||
= link_to raw(type == "old" ? " " : line_new) , "##{line_code}", id: line_code
|
||||
- if type == 'new'
|
||||
%td.line_content.parallel{class: "noteable_line #{type} #{line_code}", "line_code" => line_code}= line
|
||||
= link_to raw(line_new) , "##{line_code}", id: line_code
|
||||
- if type == 'old'
|
||||
%td.line_content.parallel{class: "noteable_line new #{line_code}", "line_code" => line_code}= raw next_line
|
||||
- else
|
||||
%td.line_content.parallel= line
|
||||
|
|
|
@ -50,6 +50,51 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
def each_for_parallel
|
||||
line_old = 1
|
||||
line_new = 1
|
||||
type = nil
|
||||
|
||||
lines_arr = ::Gitlab::InlineDiff.processing lines
|
||||
|
||||
lines_arr.each_cons(2) do |line, next_line|
|
||||
raw_line = line.dup
|
||||
|
||||
next if filename?(line)
|
||||
|
||||
full_line = html_escape(line.gsub(/\n/, ''))
|
||||
full_line = ::Gitlab::InlineDiff.replace_markers full_line
|
||||
|
||||
next_line = html_escape(next_line.gsub(/\n/, ''))
|
||||
next_line = ::Gitlab::InlineDiff.replace_markers next_line
|
||||
|
||||
if line.match(/^@@ -/)
|
||||
type = "match"
|
||||
|
||||
line_old = line.match(/\-[0-9]*/)[0].to_i.abs rescue 0
|
||||
line_new = line.match(/\+[0-9]*/)[0].to_i.abs rescue 0
|
||||
|
||||
next if line_old == 1 && line_new == 1 #top of file
|
||||
yield(full_line, type, nil, line_new, line_old)
|
||||
next
|
||||
else
|
||||
type = identification_type(line)
|
||||
line_code = generate_line_code(new_path, line_new, line_old)
|
||||
yield(full_line, type, line_code, line_new, line_old, next_line)
|
||||
end
|
||||
|
||||
|
||||
if line[0] == "+"
|
||||
line_new += 1
|
||||
elsif line[0] == "-"
|
||||
line_old += 1
|
||||
else
|
||||
line_new += 1
|
||||
line_old += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def empty?
|
||||
@lines.empty?
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue