Commit 8f05fbbab5754b2a05547bae7ed3f9c409d8a640

Authored by Dmitriy Zaporozhets
1 parent 2d75b454

Dont show comment on diff if diff line was changed after comment left

app/helpers/commits_helper.rb
... ... @@ -38,6 +38,8 @@ module CommitsHelper
38 38  
39 39 lines_arr = ::Gitlab::InlineDiff.processing diff_arr
40 40 lines_arr.each do |line|
  41 + raw_line = line.dup
  42 +
41 43 next if line.match(/^\-\-\- \/dev\/null/)
42 44 next if line.match(/^\+\+\+ \/dev\/null/)
43 45 next if line.match(/^\-\-\- a/)
... ... @@ -58,7 +60,7 @@ module CommitsHelper
58 60 else
59 61 type = identification_type(line)
60 62 line_code = build_line_anchor(diff, line_new, line_old)
61   - yield(full_line, type, line_code, line_new, line_old)
  63 + yield(full_line, type, line_code, line_new, line_old, raw_line)
62 64 end
63 65  
64 66  
... ...
app/models/note.rb
... ... @@ -99,10 +99,21 @@ class Note < ActiveRecord::Base
99 99 diff.new_path if diff
100 100 end
101 101  
  102 + def diff_old_line
  103 + line_code.split('_')[1].to_i
  104 + end
  105 +
102 106 def diff_new_line
103 107 line_code.split('_')[2].to_i
104 108 end
105 109  
  110 + def diff_line
  111 + if diff
  112 + @diff_line ||= diff.diff.lines.select { |line| line =~ /\A\+/ }[diff_new_line] ||
  113 + diff.diff.lines.select { |line| line =~ /\A\-/ }[diff_old_line]
  114 + end
  115 + end
  116 +
106 117 def discussion_id
107 118 @discussion_id ||= [:discussion, noteable_type.try(:underscore), noteable_id || commit_id, line_code].join("-").to_sym
108 119 end
... ...
app/views/projects/commits/_text_file.html.haml
... ... @@ -3,7 +3,7 @@
3 3 %a.supp_diff_link Diff suppressed. Click to show
4 4  
5 5 %table.text-file{class: "#{'hide' if too_big}"}
6   - - each_diff_line(diff, index) do |line, type, line_code, line_new, line_old|
  6 + - each_diff_line(diff, index) do |line, type, line_code, line_new, line_old, raw_line|
7 7 %tr.line_holder{ id: line_code, class: "#{type}" }
8 8 - if type == "match"
9 9 %td.old_line= "..."
... ... @@ -20,4 +20,4 @@
20 20 - if @reply_allowed
21 21 - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at)
22 22 - unless comments.empty?
23   - = render "projects/notes/diff_notes_with_reply", notes: comments
  23 + = render "projects/notes/diff_notes_with_reply", notes: comments, raw_line: raw_line
... ...
app/views/projects/notes/_diff_notes_with_reply.html.haml
1 1 - note = notes.first # example note
2   -%tr.notes_holder
3   - %td.notes_line{ colspan: 2 }
4   - %span.btn.disabled
5   - %i.icon-comment
6   - = notes.count
7   - %td.notes_content
8   - %ul.notes{ rel: note.discussion_id }
9   - = render notes
  2 +-# Check if line want not changed since comment was left
  3 +- if !defined?(raw_line) || raw_line == note.diff_line
  4 + %tr.notes_holder
  5 + %td.notes_line{ colspan: 2 }
  6 + %span.btn.disabled
  7 + %i.icon-comment
  8 + = notes.count
  9 + %td.notes_content
  10 + %ul.notes{ rel: note.discussion_id }
  11 + = render notes
10 12  
11   - = render "projects/notes/discussion_reply_button", note: note
  13 + = render "projects/notes/discussion_reply_button", note: note
... ...