test-parseindex
52 lines
| 1.2 KiB
| text/plain
|
TextLexer
/ tests / test-parseindex
Alexis S. L. Carvalho
|
r2290 | #!/bin/sh | ||
# | ||||
# revlog.parseindex must be able to parse the index file even if | ||||
# an index entry is split between two 64k blocks. The ideal test | ||||
# would be to create an index file with inline data where | ||||
# 64k < size < 64k + 64 (64k is the size of the read buffer, 64 is | ||||
# the size of an index entry) and with an index entry starting right | ||||
# before the 64k block boundary, and try to read it. | ||||
# | ||||
# We approximate that by reducing the read buffer to 1 byte. | ||||
# | ||||
hg init a | ||||
cd a | ||||
echo abc > foo | ||||
hg add foo | ||||
hg commit -m 'add foo' -d '1000000 0' | ||||
echo >> foo | ||||
hg commit -m 'change foo' -d '1000001 0' | ||||
hg log -r 0: | ||||
cat >> test.py << EOF | ||||
from mercurial import changelog, util | ||||
from mercurial.node import * | ||||
class singlebyteread(object): | ||||
def __init__(self, real): | ||||
self.real = real | ||||
def read(self, size=-1): | ||||
if size == 65536: | ||||
size = 1 | ||||
return self.real.read(size) | ||||
def __getattr__(self, key): | ||||
return getattr(self.real, key) | ||||
def opener(*args): | ||||
o = util.opener(*args) | ||||
def wrapper(*a): | ||||
f = o(*a) | ||||
return singlebyteread(f) | ||||
return wrapper | ||||
cl = changelog.changelog(opener('.hg')) | ||||
print cl.count(), 'revisions:' | ||||
for r in xrange(cl.count()): | ||||
print short(cl.node(r)) | ||||
EOF | ||||
python test.py | ||||