~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

Merge transaction finalisation and ensure iter_lines_added_or_present in knits does a old-to-new read in the knit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
181
181
    __slots__ = ['_weave', '_parents', '_sha1s', '_names', '_name_map',
182
182
                 '_weave_name']
183
183
    
184
 
    def __init__(self, weave_name=None):
 
184
    def __init__(self, weave_name=None, access_mode='w'):
 
185
        super(Weave, self).__init__(access_mode)
185
186
        self._weave = []
186
187
        self._parents = []
187
188
        self._sha1s = []
279
280
        """Please use Weave.clone_text now."""
280
281
        return self.clone_text(new_rev_id, old_rev_id, parents)
281
282
 
282
 
    def add_lines(self, version_id, parents, lines):
 
283
    def _add_lines(self, version_id, parents, lines):
283
284
        """See VersionedFile.add_lines."""
284
285
        return self._add(version_id, lines, map(self._lookup, parents))
285
286
 
407
408
                offset += 2 + (j2 - j1)
408
409
        return new_version
409
410
 
410
 
    def clone_text(self, new_version_id, old_version_id, parents):
 
411
    def _clone_text(self, new_version_id, old_version_id, parents):
411
412
        """See VersionedFile.clone_text."""
412
413
        old_lines = self.get_text(old_version_id)
413
414
        self.add_lines(new_version_id, parents, old_lines)
880
881
 
881
882
    WEAVE_SUFFIX = '.weave'
882
883
    
883
 
    def __init__(self, name, transport, mode=None, create=False):
 
884
    def __init__(self, name, transport, filemode=None, create=False, access_mode='w'):
884
885
        """Create a WeaveFile.
885
886
        
886
887
        :param create: If not True, only open an existing knit.
887
888
        """
888
 
        super(WeaveFile, self).__init__(name)
 
889
        super(WeaveFile, self).__init__(name, access_mode)
889
890
        self._transport = transport
890
 
        self._mode = mode
 
891
        self._filemode = filemode
891
892
        try:
892
893
            _read_weave_v5(self._transport.get(name + WeaveFile.WEAVE_SUFFIX), self)
893
894
        except errors.NoSuchFile:
896
897
            # new file, save it
897
898
            self._save()
898
899
 
899
 
    def add_lines(self, version_id, parents, lines):
 
900
    def _add_lines(self, version_id, parents, lines):
900
901
        """Add a version and save the weave."""
901
 
        super(WeaveFile, self).add_lines(version_id, parents, lines)
 
902
        super(WeaveFile, self)._add_lines(version_id, parents, lines)
902
903
        self._save()
903
904
 
 
905
    def _clone_text(self, new_version_id, old_version_id, parents):
 
906
        """See VersionedFile.clone_text."""
 
907
        super(WeaveFile, self)._clone_text(new_version_id, old_version_id, parents)
 
908
        self._save
 
909
 
904
910
    def copy_to(self, name, transport):
905
911
        """See VersionedFile.copy_to()."""
906
912
        # as we are all in memory always, just serialise to the new place.
907
913
        sio = StringIO()
908
914
        write_weave_v5(self, sio)
909
915
        sio.seek(0)
910
 
        transport.put(name + WeaveFile.WEAVE_SUFFIX, sio, self._mode)
 
916
        transport.put(name + WeaveFile.WEAVE_SUFFIX, sio, self._filemode)
911
917
 
912
 
    def create_empty(self, name, transport, mode=None):
913
 
        return WeaveFile(name, transport, mode, create=True)
 
918
    def create_empty(self, name, transport, filemode=None):
 
919
        return WeaveFile(name, transport, filemode, create=True)
914
920
 
915
921
    def _save(self):
916
922
        """Save the weave."""
 
923
        self._check_write_ok()
917
924
        sio = StringIO()
918
925
        write_weave_v5(self, sio)
919
926
        sio.seek(0)
920
927
        self._transport.put(self._weave_name + WeaveFile.WEAVE_SUFFIX,
921
928
                            sio,
922
 
                            self._mode)
 
929
                            self._filemode)
923
930
 
924
931
    @staticmethod
925
932
    def get_suffixes():