/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Wouter van Heyst
  • Date: 2006-06-06 12:06:20 UTC
  • mfrom: (1740 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: larstiq@larstiq.dyndns.org-20060606120620-50066b0951e4ef7c
merge bzr.dev 1740

Show diffs side-by-side

added added

removed removed

Lines of Context:
120
120
        """Generate line-based delta from this content to new_lines."""
121
121
        new_texts = [text for origin, text in new_lines._lines]
122
122
        old_texts = [text for origin, text in self._lines]
123
 
        s = SequenceMatcher(None, old_texts, new_texts)
 
123
        s = KnitSequenceMatcher(None, old_texts, new_texts)
124
124
        for op in s.get_opcodes():
125
125
            if op[0] == 'equal':
126
126
                continue
290
290
        self._data = _KnitData(transport, relpath + DATA_SUFFIX,
291
291
            access_mode, create=create and not len(self), file_mode=file_mode)
292
292
 
 
293
    def __repr__(self):
 
294
        return '%s(%s)' % (self.__class__.__name__, 
 
295
                           self.transport.abspath(self.filename))
 
296
    
293
297
    def _add_delta(self, version_id, parents, delta_parent, sha1, noeol, delta):
294
298
        """See VersionedFile._add_delta()."""
295
299
        self._check_add(version_id, []) # should we check the lines ?
423
427
            else:
424
428
                old_texts = []
425
429
            new_texts = new_content.text()
426
 
            delta_seq = SequenceMatcher(None, old_texts, new_texts)
 
430
            delta_seq = KnitSequenceMatcher(None, old_texts, new_texts)
427
431
            return parent, sha1, noeol, self._make_line_delta(delta_seq, new_content)
428
432
        else:
429
433
            delta = self.factory.parse_line_delta(data, version_idx)
477
481
            delta_seq = None
478
482
            for parent_id in parents:
479
483
                merge_content = self._get_content(parent_id, parent_texts)
480
 
                seq = SequenceMatcher(None, merge_content.text(), content.text())
 
484
                seq = KnitSequenceMatcher(None, merge_content.text(), content.text())
481
485
                if delta_seq is None:
482
486
                    # setup a delta seq to reuse.
483
487
                    delta_seq = seq
494
498
                reference_content = self._get_content(parents[0], parent_texts)
495
499
                new_texts = content.text()
496
500
                old_texts = reference_content.text()
497
 
                delta_seq = SequenceMatcher(None, old_texts, new_texts)
 
501
                delta_seq = KnitSequenceMatcher(None, old_texts, new_texts)
498
502
            return self._make_line_delta(delta_seq, content)
499
503
 
500
504
    def _make_line_delta(self, delta_seq, new_content):
629
633
        assert self.writable, "knit is not opened for write"
630
634
        ### FIXME escape. RBC 20060228
631
635
        if contains_whitespace(version_id):
632
 
            raise InvalidRevisionId(version_id)
 
636
            raise InvalidRevisionId(version_id, self.filename)
633
637
        if self.has_version(version_id):
634
638
            raise RevisionAlreadyPresent(version_id, self.filename)
635
639
        self._check_lines_not_unicode(lines)
857
861
        annotated_b = self.annotate(ver_b)
858
862
        plain_a = [t for (a, t) in annotated_a]
859
863
        plain_b = [t for (a, t) in annotated_b]
860
 
        blocks = SequenceMatcher(None, plain_a, plain_b).get_matching_blocks()
 
864
        blocks = KnitSequenceMatcher(None, plain_a, plain_b).get_matching_blocks()
861
865
        a_cur = 0
862
866
        b_cur = 0
863
867
        for ai, bi, l in blocks:
1599
1603
InterVersionedFile.register_optimiser(WeaveToKnit)
1600
1604
 
1601
1605
 
1602
 
class SequenceMatcher(difflib.SequenceMatcher):
 
1606
class KnitSequenceMatcher(difflib.SequenceMatcher):
1603
1607
    """Knit tuned sequence matcher.
1604
1608
 
1605
1609
    This is based on profiling of difflib which indicated some improvements