tests/test-parseindex.t
author Martin Geisler <mg@lazybytes.net>
Fri, 01 Oct 2010 23:16:11 +0200
changeset 12613 f365aed7cc5b
parent 12476 4cce5194c307
child 13970 d13913355390
permissions -rw-r--r--
heads: mention STARTREV in synopsis and help for --rev Before this change, "hg help heads" said hg heads [-ac] [-r REV] [REV]... [...] If STARTREV is specified, only those heads that are descendants of STARTREV will be displayed. [...] -r --rev REV show only heads which are descendants of REV [...] which made little sense since there are two things called REV in the synopsis and nothing called STARTREV. A little digging reveals that the "[-r REV]" part of the synopsis was introduced in 8e503fa54d2d, changed to "[-r STARTREV]" in 2bcef677a6c3, and then changed back to "[-r REV]" in 4b02fc71bbba. The last change seems to be based on a patch[1] on our mailinglist that actually *inserted* STARTREV again in the help for the command line option itself. For some reason, the patch was changed to remove STARTREV from the synopsis. This change finally makes the help consistent by putting STARTREV back into the help in all places where it is needed: hg heads [-ac] [-r STARTREV] [REV]... [...] If STARTREV is specified, only those heads that are descendants of STARTREV will be displayed. [...] -r --rev STARTREV show only heads which are descendants of STARTREV [...] This was not possible until 40c06bbf58be, which introduced the possibility of naming the meta variables for each option. [1]: http://mercurial.markmail.org/message/qgc55gd4fam4ogvz

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, 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 len(cl), 'revisions:'
  > for r in cl:
  >     print short(cl.node(r))
  > EOF
  $ python test.py
  2 revisions:
  7c31755bf9b5
  26333235a41c