/usr/lib/python2.7/dist-packages/bzrlib/_knit_load_data_py.py is in python-bzrlib 2.7.0-2ubuntu3.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # Copyright (C) 2007 Canonical Ltd
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from __future__ import absolute_import
from bzrlib import errors
def _load_data_py(kndx, fp):
"""Read in a knit index."""
cache = kndx._cache
history = kndx._history
kndx.check_header(fp)
# readlines reads the whole file at once:
# bad for transports like http, good for local disk
# we save 60 ms doing this one change (
# from calling readline each time to calling
# readlines once.
# probably what we want for nice behaviour on
# http is a incremental readlines that yields, or
# a check for local vs non local indexes,
history_top = len(history) - 1
for line in fp.readlines():
rec = line.split()
if len(rec) < 5 or rec[-1] != ':':
# corrupt line.
# FIXME: in the future we should determine if its a
# short write - and ignore it
# or a different failure, and raise. RBC 20060407
continue
try:
parents = []
for value in rec[4:-1]:
if value[0] == '.':
# uncompressed reference
parent_id = value[1:]
else:
parent_id = history[int(value)]
parents.append(parent_id)
except (IndexError, ValueError), e:
# The parent could not be decoded to get its parent row. This
# at a minimum will cause this row to have wrong parents, or
# even to apply a delta to the wrong base and decode
# incorrectly. its therefore not usable, and because we have
# encountered a situation where a new knit index had this
# corrupt we can't asssume that no other rows referring to the
# index of this record actually mean the subsequent uncorrupt
# one, so we error.
raise errors.KnitCorrupt(kndx._filename, "line %r: %s" % (rec, e))
version_id, options, pos, size = rec[:4]
version_id = version_id
try:
pos = int(pos)
except ValueError, e:
raise errors.KnitCorrupt(kndx._filename,
"invalid position on line %r: %s"
% (rec, e))
try:
size = int(size)
except ValueError, e:
raise errors.KnitCorrupt(kndx._filename,
"invalid size on line %r: %s"
% (rec, e))
# See kndx._cache_version
# only want the _history index to reference the 1st
# index entry for version_id
if version_id not in cache:
history_top += 1
index = history_top
history.append(version_id)
else:
index = cache[version_id][5]
cache[version_id] = (version_id,
options.split(','),
pos,
size,
tuple(parents),
index)
# end kndx._cache_version
|