/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: v.ladeuil+lp at free
  • Date: 2006-11-08 07:44:30 UTC
  • mfrom: (2123 +trunk)
  • mto: (2145.1.1 keepalive)
  • mto: This revision was merged to the branch mainline in revision 2146.
  • Revision ID: v.ladeuil+lp@free.fr-20061108074430-a9c08d4a475bd97f
Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
77
77
from bzrlib import (
78
78
    cache_utf8,
79
79
    errors,
 
80
    patiencediff,
80
81
    progress,
81
82
    )
82
83
from bzrlib.errors import FileExists, NoSuchFile, KnitError, \
522
523
            delta_seq = None
523
524
            for parent_id in parents:
524
525
                merge_content = self._get_content(parent_id, parent_texts)
525
 
                seq = KnitSequenceMatcher(None, merge_content.text(), content.text())
 
526
                seq = patiencediff.PatienceSequenceMatcher(
 
527
                                   None, merge_content.text(), content.text())
526
528
                if delta_seq is None:
527
529
                    # setup a delta seq to reuse.
528
530
                    delta_seq = seq
539
541
                reference_content = self._get_content(parents[0], parent_texts)
540
542
                new_texts = content.text()
541
543
                old_texts = reference_content.text()
542
 
                delta_seq = KnitSequenceMatcher(None, old_texts, new_texts)
 
544
                delta_seq = patiencediff.PatienceSequenceMatcher(
 
545
                                                 None, old_texts, new_texts)
543
546
            return self._make_line_delta(delta_seq, content)
544
547
 
545
548
    def _make_line_delta(self, delta_seq, new_content):
1253
1256
        """
1254
1257
        lines = []
1255
1258
        encode_utf8 = cache_utf8.encode
1256
 
        for version_id, options, pos, size, parents in versions:
1257
 
            line = "\n%s %s %s %s %s :" % (encode_utf8(version_id),
1258
 
                                           ','.join(options),
1259
 
                                           pos,
1260
 
                                           size,
1261
 
                                           self._version_list_to_index(parents))
1262
 
            assert isinstance(line, str), \
1263
 
                'content must be utf-8 encoded: %r' % (line,)
1264
 
            lines.append(line)
1265
 
        if not self._need_to_create:
1266
 
            self._transport.append_bytes(self._filename, ''.join(lines))
1267
 
        else:
1268
 
            sio = StringIO()
1269
 
            sio.write(self.HEADER)
1270
 
            sio.writelines(lines)
1271
 
            sio.seek(0)
1272
 
            self._transport.put_file_non_atomic(self._filename, sio,
1273
 
                                create_parent_dir=self._create_parent_dir,
1274
 
                                mode=self._file_mode,
1275
 
                                dir_mode=self._dir_mode)
1276
 
            self._need_to_create = False
1277
 
 
1278
 
        # cache after writing, so that a failed write leads to missing cache
1279
 
        # entries not extra ones. XXX TODO: RBC 20060502 in the event of a 
1280
 
        # failure, reload the index or flush it or some such, to prevent
1281
 
        # writing records that did complete twice.
1282
 
        for version_id, options, pos, size, parents in versions:
1283
 
            self._cache_version(version_id, options, pos, size, parents)
1284
 
        
 
1259
        orig_history = self._history[:]
 
1260
        orig_cache = self._cache.copy()
 
1261
 
 
1262
        try:
 
1263
            for version_id, options, pos, size, parents in versions:
 
1264
                line = "\n%s %s %s %s %s :" % (encode_utf8(version_id),
 
1265
                                               ','.join(options),
 
1266
                                               pos,
 
1267
                                               size,
 
1268
                                               self._version_list_to_index(parents))
 
1269
                assert isinstance(line, str), \
 
1270
                    'content must be utf-8 encoded: %r' % (line,)
 
1271
                lines.append(line)
 
1272
                self._cache_version(version_id, options, pos, size, parents)
 
1273
            if not self._need_to_create:
 
1274
                self._transport.append_bytes(self._filename, ''.join(lines))
 
1275
            else:
 
1276
                sio = StringIO()
 
1277
                sio.write(self.HEADER)
 
1278
                sio.writelines(lines)
 
1279
                sio.seek(0)
 
1280
                self._transport.put_file_non_atomic(self._filename, sio,
 
1281
                                    create_parent_dir=self._create_parent_dir,
 
1282
                                    mode=self._file_mode,
 
1283
                                    dir_mode=self._dir_mode)
 
1284
                self._need_to_create = False
 
1285
        except:
 
1286
            # If any problems happen, restore the original values and re-raise
 
1287
            self._history = orig_history
 
1288
            self._cache = orig_cache
 
1289
            raise
 
1290
 
1285
1291
    def has_version(self, version_id):
1286
1292
        """True if the version is in the index."""
1287
1293
        return (version_id in self._cache)