~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

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