|
|
#!/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/store'))
|
|
|
print cl.count(), 'revisions:'
|
|
|
for r in xrange(cl.count()):
|
|
|
print short(cl.node(r))
|
|
|
EOF
|
|
|
|
|
|
python test.py
|
|
|
|