Split DiffChunkGenerator into a general-purpose RawDiffChunkGenerator.

Review Request #7093 — Created March 19, 2015 and submitted

Information

Review Board
release-2.5.x
3b0ad74...

Reviewers

DiffChunkGenerator is a very useful and powerful class for producing a
set of chunks we can directly use for rendering diffs. To use it, it
required the whole diff machinery: FileDiff models, DiffSet,
repositories, the patching process, etc. That made it impractical for
any usage beyond showing diffs of files in a repository.

This change splits the heavy processing out into a RawDiffChunkGenerator
class, which can be used to generate chunks from any two strings.

DiffChunkGenerator subclasses RawDiffChunkGenerator, doing all the work
of handling interdiffs and generating suitable content from FileDiffs to
pass down to the RawDiffChunkGenerator functions.

Along with this, DiffOpcodeGenerator no longer needs FileDiffs as well.
It only ever needed the diff content stored on them, for interdiff
processing, so we just pass that directly in DiffChunkGenerator.

Browsed diffs and interdiffs, comparing them to versions without the path.
This covered all types of changes, including indentation. I didn't see any
differences in behavior.

Tested with raw strings, and got chunks out of them.

Unit tests pass.

Description From Last Updated

Col: 1 E303 too many blank lines (3)

reviewbotreviewbot

'os' imported but unused

reviewbotreviewbot

"Generate"

brenniebrennie

I know this isn't in the change, but aren't there also "replace" chunks?

brenniebrennie

You should use encoding_list=None and assign encoding_list to [] if it is None in the function.

brenniebrennie

"Generate"

brenniebrennie

Again, replace sections?

brenniebrennie

"Create"

brenniebrennie

Should be "Return".

brenniebrennie

Line needs b''

brenniebrennie

Blank line between these.

brenniebrennie
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
  2. Show all issues
    Col: 1
     E303 too many blank lines (3)
    
  3. reviewboard/diffviewer/tests.py (Diff revision 1)
     
     
    Show all issues
     'os' imported but unused
    
  4. 
      
chipx86
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
  2. 
      
brennie
  1. 
      
  2. Show all issues

    "Generate"

    1. IIRC, we only use that mood for functions, not classes. I'm not sure where it even says anything about this in the PEP though. Should get David's opinion.

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

    I know this isn't in the change, but aren't there also "replace" chunks?

  4. Show all issues

    You should use encoding_list=None and assign encoding_list to [] if it is None in the function.

  5. Show all issues

    "Generate"

  6. Show all issues

    Again, replace sections?

  7. Show all issues

    "Create"

  8. Show all issues

    Should be "Return".

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

    Line needs b''

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

    Blank line between these.

  11. 
      
chipx86
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/diffviewer/opcode_generator.py
        reviewboard/diffviewer/tests.py
        reviewboard/diffviewer/chunk_generator.py
        reviewboard/diffviewer/diffutils.py
    
    
  2. 
      
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-2.5.x (c246d7a)