summaryrefslogtreecommitdiff
path: root/tests/test-parseindex.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-parseindex.t')
-rw-r--r--tests/test-parseindex.t61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/test-parseindex.t b/tests/test-parseindex.t
new file mode 100644
index 0000000..6807f50
--- /dev/null
+++ b/tests/test-parseindex.t
@@ -0,0 +1,61 @@
+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'
+ $ echo >> foo
+ $ hg commit -m 'change foo'
+ $ hg log -r 0:
+ changeset: 0:7c31755bf9b5
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add foo
+
+ changeset: 1:26333235a41c
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: change foo
+
+ $ cat >> test.py << EOF
+ > from mercurial import changelog, scmutil
+ > 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 = scmutil.opener(*args)
+ > def wrapper(*a):
+ > f = o(*a)
+ > return singlebyteread(f)
+ > return wrapper
+ >
+ > cl = changelog.changelog(opener('.hg/store'))
+ > print len(cl), 'revisions:'
+ > for r in cl:
+ > print short(cl.node(r))
+ > EOF
+ $ python test.py
+ 2 revisions:
+ 7c31755bf9b5
+ 26333235a41c
+
+ $ cd ..