~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-12-21 14:50:08 UTC
  • mfrom: (2163.2.6 fileids_altered)
  • Revision ID: pqm@pqm.ubuntu.com-20061221145008-aa469cd5f3412a90
(John Arbash Meinel) more optimizations for fileids_altered

Show diffs side-by-side

added added

removed removed

Lines of Context:
1482
1482
                 as (stream, header_record)
1483
1483
        """
1484
1484
        df = GzipFile(mode='rb', fileobj=StringIO(raw_data))
1485
 
        rec = df.readline().split()
 
1485
        rec = self._check_header(version_id, df.readline())
 
1486
        return df, rec
 
1487
 
 
1488
    def _check_header(self, version_id, line):
 
1489
        rec = line.split()
1486
1490
        if len(rec) != 4:
1487
 
            raise KnitCorrupt(self._filename, 'unexpected number of elements in record header')
 
1491
            raise KnitCorrupt(self._filename,
 
1492
                              'unexpected number of elements in record header')
1488
1493
        if cache_utf8.decode(rec[1]) != version_id:
1489
 
            raise KnitCorrupt(self._filename, 
1490
 
                              'unexpected version, wanted %r, got %r' % (
1491
 
                                version_id, rec[1]))
1492
 
        return df, rec
 
1494
            raise KnitCorrupt(self._filename,
 
1495
                              'unexpected version, wanted %r, got %r'
 
1496
                              % (version_id, rec[1]))
 
1497
        return rec
1493
1498
 
1494
1499
    def _parse_record(self, version_id, data):
1495
1500
        # profiling notes:
1496
1501
        # 4168 calls in 2880 217 internal
1497
1502
        # 4168 calls to _parse_record_header in 2121
1498
1503
        # 4168 calls to readlines in 330
1499
 
        df, rec = self._parse_record_header(version_id, data)
 
1504
        df = GzipFile(mode='rb', fileobj=StringIO(data))
 
1505
 
1500
1506
        record_contents = df.readlines()
1501
 
        l = record_contents.pop()
 
1507
        header = record_contents.pop(0)
 
1508
        rec = self._check_header(version_id, header)
 
1509
 
 
1510
        last_line = record_contents.pop()
1502
1511
        assert len(record_contents) == int(rec[2])
1503
 
        if l != 'end %s\n' % cache_utf8.encode(version_id):
1504
 
            raise KnitCorrupt(self._filename, 'unexpected version end line %r, wanted %r' 
1505
 
                        % (l, version_id))
 
1512
        if last_line != 'end %s\n' % rec[1]:
 
1513
            raise KnitCorrupt(self._filename,
 
1514
                              'unexpected version end line %r, wanted %r' 
 
1515
                              % (last_line, version_id))
1506
1516
        df.close()
1507
1517
        return record_contents, rec[3]
1508
1518