~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/versionedfile.py

  • Committer: Alexander Belchenko
  • Date: 2007-10-04 05:50:44 UTC
  • mfrom: (2881 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2884.
  • Revision ID: bialix@ukr.net-20071004055044-pb88kgkfayawro8n
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
193
193
        already present in file history."""
194
194
        new_version_id = osutils.safe_revision_id(new_version_id)
195
195
        old_version_id = osutils.safe_revision_id(old_version_id)
 
196
        parents = [osutils.safe_revision_id(v) for v in parents]
196
197
        self._check_write_ok()
197
198
        return self._clone_text(new_version_id, old_version_id, parents)
198
199
 
212
213
    def get_format_signature(self):
213
214
        """Get a text description of the data encoding in this file.
214
215
        
215
 
        :since: 0.19
 
216
        :since: 0.90
216
217
        """
217
218
        raise NotImplementedError(self.get_format_signature)
218
219
 
219
220
    def make_mpdiffs(self, version_ids):
220
 
        """Create multiparent diffs for specified versions"""
 
221
        """Create multiparent diffs for specified versions."""
221
222
        knit_versions = set()
222
223
        for version_id in version_ids:
223
224
            knit_versions.add(version_id)
241
242
        return None
242
243
 
243
244
    def add_mpdiffs(self, records):
244
 
        """Add mpdiffs to this versionedfile
 
245
        """Add mpdiffs to this VersionedFile.
245
246
 
246
247
        Records should be iterables of version, parents, expected_sha1,
247
 
        mpdiff.  mpdiff should be a MultiParent instance.
 
248
        mpdiff. mpdiff should be a MultiParent instance.
248
249
        """
 
250
        # Does this need to call self._check_write_ok()? (IanC 20070919)
249
251
        vf_parents = {}
250
252
        mpvf = multiparent.MultiMemoryVersionedFile()
251
253
        versions = []
277
279
    def get_sha1(self, version_id):
278
280
        """Get the stored sha1 sum for the given revision.
279
281
        
280
 
        :param name: The name of the version to lookup
 
282
        :param version_id: The name of the version to lookup
281
283
        """
282
284
        raise NotImplementedError(self.get_sha1)
283
285
 
287
289
        :param version_ids: The names of the versions to lookup
288
290
        :return: a list of sha1s in order according to the version_ids
289
291
        """
290
 
        raise NotImplementedError(self.get_sha1)
 
292
        raise NotImplementedError(self.get_sha1s)
291
293
 
292
294
    def get_suffixes(self):
293
295
        """Return the file suffixes associated with this versioned file."""
399
401
        """Yield list of (version-id, line) pairs for the specified
400
402
        version.
401
403
 
402
 
        Must raise RevisionNotPresent if any of the given versions are
 
404
        Must raise RevisionNotPresent if the given version is
403
405
        not present in file history.
404
406
        """
405
407
        raise NotImplementedError(self.annotate_iter)
407
409
    def annotate(self, version_id):
408
410
        return list(self.annotate_iter(version_id))
409
411
 
410
 
    def _apply_delta(self, lines, delta):
411
 
        """Apply delta to lines."""
412
 
        lines = list(lines)
413
 
        offset = 0
414
 
        for start, end, count, delta_lines in delta:
415
 
            lines[offset+start:offset+end] = delta_lines
416
 
            offset = offset + (start - end) + count
417
 
        return lines
418
 
 
419
412
    def join(self, other, pb=None, msg=None, version_ids=None,
420
413
             ignore_missing=False):
421
414
        """Integrate versions from other into this versioned file.
424
417
        incorporated into this versioned file.
425
418
 
426
419
        Must raise RevisionNotPresent if any of the specified versions
427
 
        are not present in the other files history unless ignore_missing
428
 
        is supplied when they are silently skipped.
 
420
        are not present in the other file's history unless ignore_missing
 
421
        is supplied in which case they are silently skipped.
429
422
        """
430
423
        self._check_write_ok()
431
424
        return InterVersionedFile.get(other, self).join(
568
561
 
569
562
 
570
563
class WeaveMerge(PlanWeaveMerge):
571
 
    """Weave merge that takes a VersionedFile and two versions as its input"""
 
564
    """Weave merge that takes a VersionedFile and two versions as its input."""
572
565
 
573
566
    def __init__(self, versionedfile, ver_a, ver_b, 
574
567
        a_marker=PlanWeaveMerge.A_MARKER, b_marker=PlanWeaveMerge.B_MARKER):
577
570
 
578
571
 
579
572
class InterVersionedFile(InterObject):
580
 
    """This class represents operations taking place between two versionedfiles..
 
573
    """This class represents operations taking place between two VersionedFiles.
581
574
 
582
575
    Its instances have methods like join, and contain
583
576
    references to the source and target versionedfiles these operations can be 
598
591
        incorporated into this versioned file.
599
592
 
600
593
        Must raise RevisionNotPresent if any of the specified versions
601
 
        are not present in the other files history unless ignore_missing is 
602
 
        supplied when they are silently skipped.
 
594
        are not present in the other file's history unless ignore_missing is 
 
595
        supplied in which case they are silently skipped.
603
596
        """
604
597
        # the default join: 
605
598
        # - if the target is empty, just add all the versions from 
632
625
            # TODO: remove parent texts when they are not relevant any more for 
633
626
            # memory pressure reduction. RBC 20060313
634
627
            # pb.update('Converting versioned data', 0, len(order))
 
628
            total = len(order)
635
629
            for index, version in enumerate(order):
636
 
                pb.update('Converting versioned data', index, len(order))
 
630
                pb.update('Converting versioned data', index, total)
637
631
                _, _, parent_text = target.add_lines(version,
638
632
                                               self.source.get_parents(version),
639
633
                                               self.source.get_lines(version),
647
641
                                        msg,
648
642
                                        version_ids,
649
643
                                        ignore_missing)
 
644
            else:
 
645
                return total
650
646
        finally:
651
647
            pb.finished()
652
648