strip crash: IndexError in revlog.node()

Matt Mackall mpm at selenic.com
Thu Feb 16 18:13:17 CST 2012


On Wed, 2012-02-15 at 18:02 -0500, Greg Ward wrote:
> Hi all --
> 
> I've found a bug in strip in 2.1 that I'm having a hard time reducing
> to a small test case. The good news is that it's 100% reproducible
> with an artificial test repository, and I have bisected to find the
> responsible changeset. But I haven't been able to figure what it is
> about the topology of my test repo that tickles the bug.
...
> Anyways, from those bits and pieces I have a pretty good idea of what
> the bug is, a very vague idea about how to fix it, and no idea at all
> about how to reproduce it with a *small* test case.

If you told us what you thought the bug was, someone would be more
likely to suggest a test.

It seems that clstart stops existing by the time the lock is released.
My guess:

lock is taken
 some stuff is bundled for reapply
 some stuff is stripped
 some stuff is reapplied
  lock is recursively taken
   N = tip revision
   changesets are added
   changegroup hook is queued
  lock is released, but only recursively
 some more stuff is stripped
  rev count drops below N
lock is fully released
changegroup callback is called, but rev N is gone!

So:

a) it appears strip is happening several times under a single lock but
there's no reason we can't join all the things we want to strip in a
single operation
b) the queued hook should probably not track a revision NUMBER in any
case

-- 
Mathematics is the supreme nostalgia of our time.




More information about the Mercurial-devel mailing list