Commit b4cc04d7e17eeefe6d89bbb72661a43d7d9e3e2e

Authored by Dmitriy Zaporozhets
1 parent 73efb837

Commit diff fixes, per-line comments fixed

app/helpers/commits_helper.rb
@@ -7,16 +7,6 @@ module CommitsHelper @@ -7,16 +7,6 @@ module CommitsHelper
7 7
8 end 8 end
9 9
10 - def diff_line_class(line)  
11 - if line[0] == "+"  
12 - "new"  
13 - elsif line[0] == "-"  
14 - "old"  
15 - else  
16 - nil  
17 - end  
18 - end  
19 -  
20 def more_commits_link 10 def more_commits_link
21 offset = params[:offset] || 0 11 offset = params[:offset] || 0
22 limit = params[:limit] || 100 12 limit = params[:limit] || 100
@@ -42,11 +32,56 @@ module CommitsHelper @@ -42,11 +32,56 @@ module CommitsHelper
42 preserve out 32 preserve out
43 end 33 end
44 34
45 - def build_line_code(line, index, line_new, line_old)  
46 - if diff_line_class(line) == "new"  
47 - "NEW_#{index}_#{line_new}" 35 + def diff_line_class(line)
  36 + if line[0] == "+"
  37 + "new"
  38 + elsif line[0] == "-"
  39 + "old"
48 else 40 else
49 - "OLD_#{index}_#{line_old}" 41 + nil
  42 + end
  43 + end
  44 +
  45 + def build_line_code(line, index, line_new, line_old)
  46 + "#{index}_#{line_old}_#{line_new}"
  47 + end
  48 +
  49 + def each_diff_line(diff_arr, index)
  50 + line_old = 1
  51 + line_new = 1
  52 + type = nil
  53 +
  54 + lines_arr = diff_arr
  55 + lines_arr.each do |line|
  56 + full_line = html_escape(line.gsub(/\n/, ''))
  57 +
  58 + next if line.match(/^--- \/dev\/null/)
  59 + next if line.match(/^--- a/)
  60 + next if line.match(/^\+\+\+ b/)
  61 + if line.match(/^@@ -/)
  62 + next if line_old == 1 && line_new == 1
  63 + type = "match"
  64 +
  65 + line_old = line.match(/\-[0-9]*/)[0].to_i.abs rescue 0
  66 + line_new = line.match(/\+[0-9]*/)[0].to_i.abs rescue 0
  67 +
  68 + yield(nil, type, nil, nil, nil)
  69 + next
  70 + else
  71 + type = diff_line_class(line)
  72 + line_code = build_line_code(line, index, line_new, line_old)
  73 + yield(full_line, type, line_code, line_new, line_old)
  74 + end
  75 +
  76 +
  77 + if line[0] == "+"
  78 + line_new += 1
  79 + elsif line[0] == "-"
  80 + line_old += 1
  81 + else
  82 + line_new += 1
  83 + line_old += 1
  84 + end
50 end 85 end
51 end 86 end
52 end 87 end
app/models/note.rb
@@ -57,23 +57,6 @@ class Note < ActiveRecord::Base @@ -57,23 +57,6 @@ class Note < ActiveRecord::Base
57 rescue 57 rescue
58 nil 58 nil
59 end 59 end
60 -  
61 - def line_file_id  
62 - @line_file_id ||= line_code.split("_")[1].to_i if line_code  
63 - end  
64 -  
65 - def line_type_id  
66 - @line_type_id ||= line_code.split("_").first if line_code  
67 - end  
68 -  
69 - def line_number  
70 - @line_number ||= line_code.split("_").last.to_i if line_code  
71 - end  
72 -  
73 - def for_line?(file_id, old_line, new_line)  
74 - line_file_id == file_id &&  
75 - ((line_type_id == "NEW" && line_number == new_line) || (line_type_id == "OLD" && line_number == old_line ))  
76 - end  
77 end 60 end
78 # == Schema Information 61 # == Schema Information
79 # 62 #
app/views/commits/_text_file.html.haml
1 %table 1 %table
2 - - line_old = 0  
3 - - line_new = 0  
4 - - diff_str = diff.diff  
5 - - lines_arr = diff_str.lines.to_a  
6 - - lines_arr.each do |line|  
7 - - next if line.match(/^--- \/dev\/null/)  
8 - - next if line.match(/^--- a/)  
9 - - next if line.match(/^\+\+\+ b/)  
10 - - if line.match(/^@@ -/)  
11 - - unless line_old.zero? && line_new.zero?  
12 - %tr.line_holder  
13 - %td.old_line= "..."  
14 - %td.new_line= "..."  
15 - %td.line_content    
16 -  
17 - - line_old = line.match(/\-[0-9]*/)[0].to_i.abs rescue 0  
18 - - line_new = line.match(/\+[0-9]*/)[0].to_i.abs rescue 0  
19 - - next  
20 -  
21 - - full_line = html_escape(line.gsub(/\n/, '')) 2 + - each_diff_line(diff.diff.lines.to_a, index) do |line, type, line_code, line_new, line_old|
22 %tr.line_holder 3 %tr.line_holder
23 - %td.old_line  
24 - = link_to raw(diff_line_class(line) == "new" ? " " : line_old), "#OLD#{index}-#{line_old}", :id => "OLD#{index}-#{line_old}"  
25 - %td.new_line  
26 - = link_to raw(diff_line_class(line) == "old" ? " " : line_new) , "#NEW#{index}-#{line_new}", :id => "NEW#{index}-#{line_new}"  
27 - %td.line_content{:class => "#{diff_line_class(full_line)} #{build_line_code(line, index, line_new, line_old)}", "line_code" => build_line_code(line, index, line_new, line_old)}= raw "#{full_line}  "  
28 - - comments = @line_notes.select { |n| n.for_line?(index, line_old, line_new) }.sort_by(&:created_at).reverse  
29 - - unless comments.empty?  
30 - - comments.each do |note|  
31 - = render "notes/per_line_show", :note => note  
32 - - if line[0] == "+"  
33 - - line_new += 1  
34 - - elsif line[0] == "-"  
35 - - line_old += 1  
36 - - else  
37 - - line_new += 1  
38 - - line_old += 1 4 + - if type == "match"
  5 + %td.old_line= "..."
  6 + %td.new_line= "..."
  7 + %td.line_content  
  8 + - else
  9 + %td.old_line= link_to raw(type == "new" ? " " : line_old), "##{line_code}", :id => line_code
  10 + %td.new_line= link_to raw(type == "old" ? " " : line_new) , "##{line_code}", :id => line_code
  11 + %td.line_content{:class => "noteable_line #{type} #{line_code}", "line_code" => line_code}= raw "#{line}  "
  12 +
  13 + - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at).reverse
  14 + - unless comments.empty?
  15 + - comments.each do |note|
  16 + = render "notes/per_line_show", :note => note
  17 + - @line_notes.reject!{ |n| n == note }
app/views/commits/show.html.haml
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 29
30 :javascript 30 :javascript
31 $(document).ready(function(){ 31 $(document).ready(function(){
32 - $(".line_content").live("dblclick", function(e) { 32 + $(".noteable_line").live("dblclick", function(e) {
33 var form = $(".per_line_form"); 33 var form = $(".per_line_form");
34 $(this).parent().after(form); 34 $(this).parent().after(form);
35 form.find("#note_line_code").val($(this).attr("line_code")); 35 form.find("#note_line_code").val($(this).attr("line_code"));
spec/models/note_spec.rb
@@ -42,27 +42,13 @@ describe Note do @@ -42,27 +42,13 @@ describe Note do
42 :project => project, 42 :project => project,
43 :noteable_id => commit.id, 43 :noteable_id => commit.id,
44 :noteable_type => "Commit", 44 :noteable_type => "Commit",
45 - :line_code => "OLD_1_23" 45 + :line_code => "0_16_1"
46 end 46 end
47 47
48 it "should save a valid note" do 48 it "should save a valid note" do
49 @note.noteable_id.should == commit.id 49 @note.noteable_id.should == commit.id
50 @note.target.id.should == commit.id 50 @note.target.id.should == commit.id
51 end 51 end
52 -  
53 - it { @note.line_type_id.should == "OLD" }  
54 - it { @note.line_file_id.should == 1 }  
55 - it { @note.line_number.should == 23 }  
56 -  
57 - it { @note.for_line?(1, 23, 34).should be_true }  
58 - it { @note.for_line?(1, 23, nil).should be_true }  
59 - it { @note.for_line?(1, 23, 0).should be_true }  
60 - it { @note.for_line?(1, 23, 23).should be_true }  
61 -  
62 - it { @note.for_line?(1, nil, 34).should be_false }  
63 - it { @note.for_line?(1, 24, nil).should be_false }  
64 - it { @note.for_line?(1, 24, 0).should be_false }  
65 - it { @note.for_line?(1, 24, 23).should be_false }  
66 end 52 end
67 53
68 describe :authorization do 54 describe :authorization do