1482
1482
as (stream, header_record)
1484
1484
df = GzipFile(mode='rb', fileobj=StringIO(raw_data))
1485
rec = df.readline().split()
1485
rec = self._check_header(version_id, df.readline())
1488
def _check_header(self, version_id, line):
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]))
1494
raise KnitCorrupt(self._filename,
1495
'unexpected version, wanted %r, got %r'
1496
% (version_id, rec[1]))
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))
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)
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'
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))
1507
1517
return record_contents, rec[3]