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 7  
8 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 10 def more_commits_link
21 11 offset = params[:offset] || 0
22 12 limit = params[:limit] || 100
... ... @@ -42,11 +32,56 @@ module CommitsHelper
42 32 preserve out
43 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 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 85 end
51 86 end
52 87 end
... ...
app/models/note.rb
... ... @@ -57,23 +57,6 @@ class Note < ActiveRecord::Base
57 57 rescue
58 58 nil
59 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 60 end
78 61 # == Schema Information
79 62 #
... ...
app/views/commits/_text_file.html.haml
1 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 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 29  
30 30 :javascript
31 31 $(document).ready(function(){
32   - $(".line_content").live("dblclick", function(e) {
  32 + $(".noteable_line").live("dblclick", function(e) {
33 33 var form = $(".per_line_form");
34 34 $(this).parent().after(form);
35 35 form.find("#note_line_code").val($(this).attr("line_code"));
... ...
spec/models/note_spec.rb
... ... @@ -42,27 +42,13 @@ describe Note do
42 42 :project => project,
43 43 :noteable_id => commit.id,
44 44 :noteable_type => "Commit",
45   - :line_code => "OLD_1_23"
  45 + :line_code => "0_16_1"
46 46 end
47 47  
48 48 it "should save a valid note" do
49 49 @note.noteable_id.should == commit.id
50 50 @note.target.id.should == commit.id
51 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 52 end
67 53  
68 54 describe :authorization do
... ...