diff options
| author | Marin Jankovski <marin@gitlab.com> | 2014-09-04 10:46:35 +0200 |
|---|---|---|
| committer | Marin Jankovski <marin@gitlab.com> | 2014-09-08 09:05:16 +0200 |
| commit | 1067b00724c045b4fa46a9f8ff5acd09d65553e0 (patch) | |
| tree | baeba9612464d48a5ba59775c89587caef980ec9 /lib | |
| parent | b54f2393c3e952f8ff9f297b3c848c3c1cede1c9 (diff) | |
| download | gitlab-ce-1067b00724c045b4fa46a9f8ff5acd09d65553e0.tar.gz | |
Duplicate the behaviour and refactor for use with parallel diff.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gitlab/diff_parser.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/gitlab/diff_parser.rb b/lib/gitlab/diff_parser.rb index b244295027e..baec2e63baa 100644 --- a/lib/gitlab/diff_parser.rb +++ b/lib/gitlab/diff_parser.rb @@ -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 |
