Method: GitCommitNotifier::DiffToHtml#lcs_diff

Defined in:
lib/git_commit_notifier/diff_to_html.rb

#lcs_diff(removals, additions) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/git_commit_notifier/diff_to_html.rb', line 140

def lcs_diff(removals, additions)
  # arrays always have at least 1 element
  callback = DiffCallback.new

  s1 = extract_block_content(removals)
  s2 = extract_block_content(additions)

  s1 = tokenize_string(s1)
  s2 = tokenize_string(s2)

  Diff::LCS.traverse_balanced(s1, s2, callback)

  processor = ResultProcessor.new(callback.tags)

  diff_for_removals, diff_for_additions = processor.results
  result = []

  ln_start = removals[0][:removed]
  diff_for_removals.each_with_index do |line, i|
    result << { :removed => ln_start + i, :added => nil, :op => :removal, :content => line}
  end

  ln_start = additions[0][:added]
  diff_for_additions.each_with_index do |line, i|
    result << { :removed => nil, :added => ln_start + i, :op => :addition, :content => line}
  end

  result
end