~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
from bzrlib.delta import compare_trees
18
18
from bzrlib.errors import BzrError
19
19
import bzrlib.errors as errors
 
20
from bzrlib.patiencediff import SequenceMatcher, unified_diff
20
21
from bzrlib.symbol_versioning import *
21
22
from bzrlib.textfile import check_text_lines
22
23
from bzrlib.trace import mutter
26
27
# list, write them out directly, etc etc.
27
28
 
28
29
def internal_diff(old_filename, oldlines, new_filename, newlines, to_file,
29
 
                  allow_binary=False):
30
 
    import difflib
31
 
    
 
30
                  allow_binary=False, sequence_matcher=None):
32
31
    # FIXME: difflib is wrong if there is no trailing newline.
33
32
    # The syntax used by patch seems to be "\ No newline at
34
33
    # end of file" following the last diff line from that
49
48
        check_text_lines(oldlines)
50
49
        check_text_lines(newlines)
51
50
 
52
 
    ud = difflib.unified_diff(oldlines, newlines,
53
 
                              fromfile=old_filename+'\t', 
54
 
                              tofile=new_filename+'\t')
 
51
    if sequence_matcher is None:
 
52
        sequence_matcher = SequenceMatcher
 
53
    ud = unified_diff(oldlines, newlines,
 
54
                      fromfile=old_filename+'\t', 
 
55
                      tofile=new_filename+'\t',
 
56
                      sequencematcher=sequence_matcher)
55
57
 
56
58
    ud = list(ud)
57
59
    # work-around for difflib being too smart for its own good