~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

MergeĀ inĀ upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
315
315
 
316
316
        # if we abort after here the (in-memory) weave will be corrupt because only
317
317
        # some fields are updated
 
318
        # XXX: FIXME implement a succeed-or-fail of the rest of this routine.
 
319
        #      - Robert Collins 20060226
318
320
        self._parents.append(parents[:])
319
321
        self._sha1s.append(sha1)
320
322
        self._names.append(version_id)
843
845
 
844
846
    WEAVE_SUFFIX = '.weave'
845
847
    
846
 
    def __init__(self, name, transport, mode=None):
 
848
    def __init__(self, name, transport, mode=None, create=False):
 
849
        """Create a WeaveFile.
 
850
        
 
851
        :param create: If not True, only open an existing knit.
 
852
        """
847
853
        super(WeaveFile, self).__init__(name)
848
854
        self._transport = transport
849
855
        self._mode = mode
850
856
        try:
851
857
            _read_weave_v5(self._transport.get(name + WeaveFile.WEAVE_SUFFIX), self)
852
858
        except errors.NoSuchFile:
 
859
            if not create:
 
860
                raise
853
861
            # new file, save it
854
862
            self._save()
855
863
 
867
875
        transport.put(name + WeaveFile.WEAVE_SUFFIX, sio, self._mode)
868
876
 
869
877
    def create_empty(self, name, transport, mode=None):
870
 
        return WeaveFile(name, transport, mode)
 
878
        return WeaveFile(name, transport, mode, create=True)
871
879
 
872
880
    def _save(self):
873
881
        """Save the weave."""