Commit 8f05fbbab5754b2a05547bae7ed3f9c409d8a640
1 parent
2d75b454
Exists in
master
and in
4 other branches
Dont show comment on diff if diff line was changed after comment left
Showing
4 changed files
with
27 additions
and
12 deletions
Show diff stats
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 | ... | ... |