~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Robert Collins
  • Date: 2006-04-19 23:32:08 UTC
  • mto: (1711.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 1674.
  • Revision ID: robertc@robertcollins.net-20060419233208-2ed6906796994316
Make knit the default format.
Adjust affect tests to either have knit specific values or to be more generic,
as appropriate.
Disable all SFTP prefetching for known paramikos - direct readv support is now
a TODO.

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.
820
824
class _KnitComponentFile(object):
821
825
    """One of the files used to implement a knit database"""
822
826
 
823
 
    def __init__(self, transport, filename, mode):
 
827
    def __init__(self, transport, filename, mode, file_mode=None):
824
828
        self._transport = transport
825
829
        self._filename = filename
826
830
        self._mode = mode
 
831
        self._file_mode=file_mode
827
832
 
828
833
    def write_header(self):
829
 
        if self._transport.append(self._filename, StringIO(self.HEADER)):
 
834
        if self._transport.append(self._filename, StringIO(self.HEADER),
 
835
            mode=self._file_mode):
830
836
            raise KnitCorrupt(self._filename, 'misaligned after writing header')
831
837
 
832
838
    def check_header(self, fp):
894
900
    missing a trailing newline. One can be added with no harmful effects.
895
901
    """
896
902
 
897
 
    HEADER = "# bzr knit index 7\n"
 
903
    HEADER = "# bzr knit index 8\n"
898
904
 
899
905
    # speed of knit parsing went from 280 ms to 280 ms with slots addition.
900
906
    # __slots__ = ['_cache', '_history', '_transport', '_filename']
920
926
                                   parents,
921
927
                                   index)
922
928
 
923
 
    def __init__(self, transport, filename, mode, create=False):
924
 
        _KnitComponentFile.__init__(self, transport, filename, mode)
 
929
    def __init__(self, transport, filename, mode, create=False, file_mode=None):
 
930
        _KnitComponentFile.__init__(self, transport, filename, mode, file_mode)
925
931
        self._cache = {}
926
932
        # position in _history is the 'official' index for a revision
927
933
        # but the values may have come from a newer entry.
1147
1153
class _KnitData(_KnitComponentFile):
1148
1154
    """Contents of the knit data file"""
1149
1155
 
1150
 
    HEADER = "# bzr knit data 7\n"
 
1156
    HEADER = "# bzr knit data 8\n"
1151
1157
 
1152
 
    def __init__(self, transport, filename, mode, create=False):
 
1158
    def __init__(self, transport, filename, mode, create=False, file_mode=None):
1153
1159
        _KnitComponentFile.__init__(self, transport, filename, mode)
1154
1160
        self._file = None
1155
1161
        self._checked = False
1156
1162
        if create:
1157
 
            self._transport.put(self._filename, StringIO(''))
 
1163
            self._transport.put(self._filename, StringIO(''), mode=file_mode)
1158
1164
        self._records = {}
1159
1165
 
1160
1166
    def clear_cache(self):