view tests/test-parseindex @ 6743:86e8187b721a

simplify flag handling add _checklink var to dirstate introduce dirstate.flagfunc switch users of util.execfunc/linkfunc to flagfunc change manifestdict.set to take a flags string change ctx.fileflags to ctx.flags change gitmode func to a dict remove util.execfunc/linkfunc
author Matt Mackall <mpm@selenic.com>
date Thu, 26 Jun 2008 13:46:34 -0500
parents c0b449154a90
children fb42030d79d6
line wrap: on
line source

#!/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