~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

MergeĀ inĀ upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
232
232
    """
233
233
 
234
234
    def __init__(self, relpath, transport, file_mode=None, access_mode=None, factory=None,
235
 
                 basis_knit=None, delta=True):
236
 
        """Construct a knit at location specified by relpath."""
 
235
                 basis_knit=None, delta=True, create=False):
 
236
        """Construct a knit at location specified by relpath.
 
237
        
 
238
        :param create: If not True, only open an existing knit.
 
239
        """
237
240
        if access_mode is None:
238
241
            access_mode = 'w'
239
242
        assert access_mode in ('r', 'w'), "invalid mode specified %r" % access_mode
248
251
        self.delta = delta
249
252
 
250
253
        self._index = _KnitIndex(transport, relpath + INDEX_SUFFIX,
251
 
            access_mode)
 
254
            access_mode, create=create)
252
255
        self._data = _KnitData(transport, relpath + DATA_SUFFIX,
253
256
            access_mode)
254
257
 
263
266
        transport.rename(name + INDEX_SUFFIX + '.tmp', name + INDEX_SUFFIX)
264
267
 
265
268
    def create_empty(self, name, transport, mode=None):
266
 
        return KnitVersionedFile(name, transport, factory=self.factory, delta=self.delta)
 
269
        return KnitVersionedFile(name, transport, factory=self.factory, delta=self.delta, create=True)
267
270
    
268
271
    @staticmethod
269
272
    def get_suffixes():
605
608
        for l in lines.splitlines(False):
606
609
            yield l.split()
607
610
 
608
 
    def __init__(self, transport, filename, mode):
 
611
    def __init__(self, transport, filename, mode, create=False):
609
612
        _KnitComponentFile.__init__(self, transport, filename, mode)
610
613
        self._cache = {}
611
614
        # position in _history is the 'official' index for a revision
620
623
                self._cache_version(rec[0], rec[1].split(','), int(rec[2]), int(rec[3]),
621
624
                    [self._history[int(i)] for i in rec[4:]])
622
625
        except NoSuchFile, e:
623
 
            if mode != 'w':
624
 
                raise e
 
626
            if mode != 'w' or not create:
 
627
                raise
625
628
            self.write_header()
626
629
 
627
630
    def get_graph(self):