~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

  • Committer: Robert Collins
  • Date: 2006-03-01 12:09:59 UTC
  • mto: (1594.2.4 integration)
  • mto: This revision was merged to the branch mainline in revision 1596.
  • Revision ID: robertc@robertcollins.net-20060301120959-b58a073b9f7f7a00
Consolidate reweave and join as we have no separate usage, make reweave tests apply to all versionedfile implementations and deprecate the old reweave apis.

Show diffs side-by-side

added added

removed removed

Lines of Context:
258
258
 
259
259
    __contains__ = has_version
260
260
 
261
 
    @deprecated_method(zero_eight)
262
 
    def parent_names(self, version):
263
 
        """Return version names for parents of a version.
264
 
        
265
 
        See get_parents for the current api.
266
 
        """
267
 
        return self.get_parents(version)
268
 
 
269
261
    def get_parents(self, version_id):
270
262
        """See VersionedFile.get_parent."""
271
263
        return map(self._idx_to_name, self._parents[self._lookup(version_id)])
730
722
        :param pb: An optional progress bar
731
723
        :param msg: An optional message to display for progress
732
724
        """
 
725
        try:
 
726
            self._join(other, pb, msg, version_ids)
 
727
        except errors.WeaveParentMismatch:
 
728
            self._reweave(other, pb, msg)
 
729
 
 
730
    def _join(self, other, pb, msg, version_ids):
 
731
        """Worker routine for join()."""
733
732
        if not other.versions():
734
733
            return          # nothing to update, easy
735
734
 
809
808
        this_idx = self._name_map.get(name, -1)
810
809
        if this_idx != -1:
811
810
            if self._sha1s[this_idx] != other._sha1s[other_idx]:
812
 
                raise WeaveError("inconsistent texts for version {%s} "
813
 
                                 "when joining weaves"
814
 
                                 % (name))
 
811
                raise errors.WeaveTextDiffers(name, self, other)
815
812
            self_parents = self._parents[this_idx]
816
813
            other_parents = other._parents[other_idx]
817
814
            n1 = set([self._names[i] for i in self_parents])
824
821
        else:
825
822
            return False
826
823
 
 
824
    @deprecated_method(zero_eight)
827
825
    def reweave(self, other, pb=None, msg=None):
828
 
        """Reweave self with other.
 
826
        """reweave has been superceded by plain use of join."""
 
827
        return self.join(other, pb, msg)
 
828
 
 
829
    def _reweave(self, other, pb, msg):
 
830
        """Reweave self with other - internal helper for join().
829
831
 
830
832
        :param other: The other weave to merge
831
833
        :param pb: An optional progress bar, indicating how far done we are
832
834
        :param msg: An optional message for the progress
833
835
        """
834
 
        new_weave = reweave(self, other, pb=pb, msg=msg)
 
836
        new_weave = _reweave(self, other, pb=pb, msg=msg)
835
837
        for attr in self.__slots__:
836
 
            setattr(self, attr, getattr(new_weave, attr))
 
838
            if attr != '_weave_name':
 
839
                setattr(self, attr, getattr(new_weave, attr))
837
840
 
838
841
 
839
842
class WeaveFile(Weave):
867
870
        self._save()
868
871
 
869
872
 
 
873
@deprecated_function(zero_eight)
870
874
def reweave(wa, wb, pb=None, msg=None):
 
875
    """reweaving is deprecation, please just use weave.join()."""
 
876
    _reweave(wa, wb, pb, msg)
 
877
 
 
878
def _reweave(wa, wb, pb=None, msg=None):
871
879
    """Combine two weaves and return the result.
872
880
 
873
881
    This works even if a revision R has different parents in