tests/test-issue2137.t
author Sune Foldager <cryo@cyanite.org>
Sat, 07 May 2011 22:40:14 +0200
changeset 14252 19067884c5f5
parent 12328 b63f6422d2a7
child 16913 f2719b387380
permissions -rw-r--r--
revlog: calculate base revisions iteratively This is in preparation for generaldelta, where the revlog entry base field is reinterpreted as the deltaparent. For that reason we also rename the base function to chainbase. Without generaldelta, performance is unaffected, but generaldelta will suffer from this in _addrevision, since delta chains will be walked repeatedly. A cache has been added to eliminate this problem completely.

http://mercurial.selenic.com/bts/issue2137

Setup:

create a little extension that has 3 side-effects:
1) ensure changelog data is not inlined
2) make revlog to use lazyparser
3) test that repo.lookup() works
1 and 2 are preconditions for the bug; 3 is the bug.

  $ cat > commitwrapper.py <<EOF
  > from mercurial import extensions, node, revlog
  > 
  > def reposetup(ui, repo):
  >     def wrapcommit(orig, *args, **kwargs):
  >         result = orig(*args, **kwargs)
  >         tip1 = node.short(repo.changelog.tip())
  >         tip2 = node.short(repo.lookup(tip1))
  >         assert tip1 == tip2
  >         ui.write('new tip: %s\n' % tip1)
  >         return result
  > 
  >     extensions.wrapfunction(repo, 'commit', wrapcommit)
  > 
  > def extsetup(ui):
  >     revlog._maxinline = 8             # split out 00changelog.d early
  >     revlog._prereadsize = 8           # use revlog.lazyparser
  > EOF

  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > commitwrapper = `pwd`/commitwrapper.py
  > EOF

  $ hg init repo1
  $ cd repo1
  $ echo a > a
  $ hg commit -A -m'add a with a long commit message to make the changelog a bit bigger'
  adding a
  new tip: 553596fad57b

Test that new changesets are visible to repo.lookup():

  $ echo a >> a
  $ hg commit -m'one more commit to demonstrate the bug'
  new tip: 799ae3599e0e

  $ hg tip
  changeset:   1:799ae3599e0e
  tag:         tip
  user:        test
  date:        Thu Jan 01 00:00:00 1970 +0000
  summary:     one more commit to demonstrate the bug