~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

Late bind to PatienceSequenceMatcher to allow plugin to override.

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
 
71
71
from copy import copy
72
72
from cStringIO import StringIO
73
 
from difflib import SequenceMatcher
74
73
import os
75
74
import sha
76
75
import time
84
83
        )
85
84
import bzrlib.errors as errors
86
85
from bzrlib.osutils import sha_strings
 
86
import bzrlib.patiencediff
87
87
from bzrlib.symbol_versioning import *
88
88
from bzrlib.tsort import topo_sort
89
89
from bzrlib.versionedfile import VersionedFile, InterVersionedFile
180
180
    """
181
181
 
182
182
    __slots__ = ['_weave', '_parents', '_sha1s', '_names', '_name_map',
183
 
                 '_weave_name']
 
183
                 '_weave_name', '_matcher']
184
184
    
185
 
    def __init__(self, weave_name=None, access_mode='w'):
 
185
    def __init__(self, weave_name=None, access_mode='w', matcher=None):
186
186
        super(Weave, self).__init__(access_mode)
187
187
        self._weave = []
188
188
        self._parents = []
190
190
        self._names = []
191
191
        self._name_map = {}
192
192
        self._weave_name = weave_name
 
193
        if matcher is None:
 
194
            self._matcher = bzrlib.patiencediff.PatienceSequenceMatcher
 
195
        else:
 
196
            self._matcher = matcher
193
197
 
194
198
    def __repr__(self):
195
199
        return "Weave(%r)" % self._weave_name
528
532
        #print 'basis_lines:', basis_lines
529
533
        #print 'new_lines:  ', lines
530
534
 
531
 
        s = SequenceMatcher(None, basis_lines, lines)
 
535
        s = self._matcher(None, basis_lines, lines)
532
536
 
533
537
        # offset gives the number of lines that have been inserted
534
538
        # into the weave up to the current point; if the original edit instruction
1356
1360
        sys.stdout.writelines(w.get_iter(int(argv[3])))
1357
1361
        
1358
1362
    elif cmd == 'diff':
1359
 
        from difflib import unified_diff
1360
1363
        w = readit()
1361
1364
        fn = argv[2]
1362
1365
        v1, v2 = map(int, argv[3:5])
1363
1366
        lines1 = w.get(v1)
1364
1367
        lines2 = w.get(v2)
1365
 
        diff_gen = unified_diff(lines1, lines2,
 
1368
        diff_gen = bzrlib.patiencediff.unified_diff(lines1, lines2,
1366
1369
                                '%s version %d' % (fn, v1),
1367
1370
                                '%s version %d' % (fn, v2))
1368
1371
        sys.stdout.writelines(diff_gen)