Fix diff fragment header expansion issues.

Review Request #6889 — Created Feb. 1, 2015 and submitted

Information

Review Board
master
6a71060...

Reviewers

Previously diff fragments would sometimes expand to the incorrect
place. This is beacuse the generated header information was using
original/patched line numbers instead of the virtual (unified original
and patched) line numbers. Header generation has been modified to use
these line numbers and the issue has been fixed.

Headers also used to sometimes select headers to expand to. The code
that searched for headers wasn't taking into account the difference
between the original/patched line numbers, which are what the headers
use, and the virtual line numbers. This would happen if a deletion or
insertion chunk was above the flagged comment lines.

Update the diff fragment template to allow the left header (which
corresponds to the original file) to be expanded to.

Remove dead code for generation headers from the
get_file_chunks_in_range function. The logic for header generation
wasn't quite right and the only caller of the function is using better
logic to find header information.

Add a unit test to test that the line numbers generated by the new
get_last_header_before_line function are both before the requested
line and have the correct unified line number.

Ran unit tests.

Manually tested the diff fragments with lines flagged that had deletes
and inserts above them. They expanded to the proper locations.

Tested expansion of the left-side of the fragment. It was expandable
and expanded to the correct position.

Description From Last Updated

One entry per line, like: header = { 'left': None, 'right': None, }

chipx86chipx86

We use lines[0][0] several times, so let's pull it out into a variable.

chipx86chipx86

The second line's indentation should match the 'right_headers' on the previous line.

chipx86chipx86

Can you add a blank line here?

daviddavid

Can you add a blank line here?

daviddavid
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
  2. 
      
brennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
  2. 
      
david
  1. Looks good, pending your investigation of the bug in your testing done.

  2. 
      
brennie
chipx86
  1. Can you craft a test case reproducing your original problem?

    Does meta no longer have header information?

    1. The chunk 'meta' field still has 'left_header' and 'right_header entries' (if they were generated).

      The header information generation was removed from get_file_chunks_in_range because the information wasn't useful there. The header information was only being generated for chunks that were in the range specified. It also generated information for all those chunks, whereas we really only need the information for chunks we are going to expand into (i.e. the previous chunks). The function also did not take into account the difference between original/modified line numbers (which are what the 'meta' field uses) and unified line numbers (what the diffviewer and diff fragment viewer use).

      This behaviour has been corrected and put into get_last_header_before_line.

    2. A unit test has been added.

  2. reviewboard/diffviewer/diffutils.py (Diff revision 2)
     
     
    Show all issues

    One entry per line, like:

    header = {
        'left': None,
        'right': None,
    }
    
  3. reviewboard/diffviewer/diffutils.py (Diff revision 2)
     
     
    Show all issues

    We use lines[0][0] several times, so let's pull it out into a variable.

  4. reviewboard/diffviewer/diffutils.py (Diff revision 2)
     
     
     
    Show all issues

    The second line's indentation should match the 'right_headers' on the previous line.

  5. 
      
brennie
reviewbot
  1. Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
    
    Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/templatetags/reviewtags.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/diffutils.py
    
    Ignored Files:
        reviewboard/templates/reviews/diff_comment_fragment.html
    
    
  2. 
      
brennie
david
  1. 
      
  2. reviewboard/diffviewer/tests.py (Diff revision 3)
     
     
     
    Show all issues

    Can you add a blank line here?

  3. reviewboard/diffviewer/tests.py (Diff revision 3)
     
     
     
    Show all issues

    Can you add a blank line here?

  4. 
      
brennie
Review request changed
Status:
Completed
Change Summary:
Pushed to master (567f659)