~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-04-20 02:28:21 UTC
  • mfrom: (1666.1.10 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20060420022821-4337b8fa4942d8fe
Make knits the default format.

Show diffs side-by-side

added added

removed removed

Lines of Context:
285
285
        self.delta = delta
286
286
 
287
287
        self._index = _KnitIndex(transport, relpath + INDEX_SUFFIX,
288
 
            access_mode, create=create)
 
288
            access_mode, create=create, file_mode=file_mode)
289
289
        self._data = _KnitData(transport, relpath + DATA_SUFFIX,
290
 
            access_mode, create=not len(self.versions()))
 
290
            access_mode, create=create and not len(self), file_mode=file_mode)
291
291
 
292
292
    def _add_delta(self, version_id, parents, delta_parent, sha1, noeol, delta):
293
293
        """See VersionedFile._add_delta()."""
359
359
        """See VersionedFile.copy_to()."""
360
360
        # copy the current index to a temp index to avoid racing with local
361
361
        # writes
362
 
        transport.put(name + INDEX_SUFFIX + '.tmp', self.transport.get(self._index._filename))
 
362
        transport.put(name + INDEX_SUFFIX + '.tmp', self.transport.get(self._index._filename),)
363
363
        # copy the data file
364
364
        transport.put(name + DATA_SUFFIX, self._data._open_file())
365
365
        # rename the copied index into place
417
417
        graph_items = self._index.get_graph()
418
418
        return dict(graph_items)
419
419
 
 
420
    def get_sha1(self, version_id):
 
421
        """See VersionedFile.get_sha1()."""
 
422
        components = self._get_components(version_id)
 
423
        return components[-1][-1][-1]
 
424
 
420
425
    @staticmethod
421
426
    def get_suffixes():
422
427
        """See VersionedFile.get_suffixes()."""
575
580
            line = content._lines[-1][1].rstrip('\n')
576
581
            content._lines[-1] = (content._lines[-1][0], line)
577
582
 
 
583
        # digest here is the digest from the last applied component.
578
584
        if sha_strings(content.text()) != digest:
579
585
            import pdb;pdb.set_trace()
580
586
            raise KnitCorrupt(self.filename, 'sha-1 does not match %s' % version_id)
609
615
            raise InvalidRevisionId(version_id)
610
616
        if self.has_version(version_id):
611
617
            raise RevisionAlreadyPresent(version_id, self.filename)
612
 
 
613
 
        if False or __debug__:
614
 
            for l in lines:
615
 
                assert '\n' not in l[:-1]
 
618
        self._check_lines_not_unicode(lines)
 
619
        self._check_lines_are_lines(lines)
616
620
 
617
621
    def _add(self, version_id, lines, parents, delta, parent_texts):
618
622
        """Add a set of lines on top of version specified by parents.
859
863
class _KnitComponentFile(object):
860
864
    """One of the files used to implement a knit database"""
861
865
 
862
 
    def __init__(self, transport, filename, mode):
 
866
    def __init__(self, transport, filename, mode, file_mode=None):
863
867
        self._transport = transport
864
868
        self._filename = filename
865
869
        self._mode = mode
 
870
        self._file_mode=file_mode
866
871
 
867
872
    def write_header(self):
868
 
        if self._transport.append(self._filename, StringIO(self.HEADER)):
 
873
        if self._transport.append(self._filename, StringIO(self.HEADER),
 
874
            mode=self._file_mode):
869
875
            raise KnitCorrupt(self._filename, 'misaligned after writing header')
870
876
 
871
877
    def check_header(self, fp):
933
939
    missing a trailing newline. One can be added with no harmful effects.
934
940
    """
935
941
 
936
 
    HEADER = "# bzr knit index 7\n"
 
942
    HEADER = "# bzr knit index 8\n"
937
943
 
938
944
    # speed of knit parsing went from 280 ms to 280 ms with slots addition.
939
945
    # __slots__ = ['_cache', '_history', '_transport', '_filename']
959
965
                                   parents,
960
966
                                   index)
961
967
 
962
 
    def __init__(self, transport, filename, mode, create=False):
963
 
        _KnitComponentFile.__init__(self, transport, filename, mode)
 
968
    def __init__(self, transport, filename, mode, create=False, file_mode=None):
 
969
        _KnitComponentFile.__init__(self, transport, filename, mode, file_mode)
964
970
        self._cache = {}
965
971
        # position in _history is the 'official' index for a revision
966
972
        # but the values may have come from a newer entry.
1186
1192
class _KnitData(_KnitComponentFile):
1187
1193
    """Contents of the knit data file"""
1188
1194
 
1189
 
    HEADER = "# bzr knit data 7\n"
 
1195
    HEADER = "# bzr knit data 8\n"
1190
1196
 
1191
 
    def __init__(self, transport, filename, mode, create=False):
 
1197
    def __init__(self, transport, filename, mode, create=False, file_mode=None):
1192
1198
        _KnitComponentFile.__init__(self, transport, filename, mode)
1193
1199
        self._file = None
1194
1200
        self._checked = False
1195
1201
        if create:
1196
 
            self._transport.put(self._filename, StringIO(''))
 
1202
            self._transport.put(self._filename, StringIO(''), mode=file_mode)
1197
1203
        self._records = {}
1198
1204
 
1199
1205
    def clear_cache(self):