strip crash: IndexError in revlog.node()
Matt Mackall
mpm at selenic.com
Fri Feb 17 00:13:17 UTC 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