share + rollback: potential confusion

Greg Ward greg at gerg.ca
Wed Jan 13 08:26:35 CST 2010


A colleague stumbled across a nasty interaction between shared clones
and rollback yesterday.  In a nutshell, you can trivially get one
clone into the dreaded "abort: working directory has unknown parent"
state.  Here's how to do it:

  $ hg init r1
  $ cd r1
  $ touch a
  $ hg commit -A -m init
  $ cd ..
  $ hg share r1 r2
  $ cd r1
  $ hg rollback
  rolling back last transaction
  $ cd ../r2
  $ hg par
  abort: working directory has unknown parent '2cf853de8aa2'!

Once I understood what was happening, it was clear to me... but I
think this could be very confusing for the average user.

The good news is that the workaround is pretty easy:

  $ hg debugsetparents <branchname>

What to do?  I could file a bug report on the grounds that I got an
"abort" doing basic operations without any sneaky tricks.  But if this
is a bug, I cannot think of a way to fix it.  After all, r1 has no
idea that there are shared clones of it out there somewhere, never
mind what the parent of the working dir is in those shared clones.  So
it's not like we can somehow detect that this rollback is a bad idea.

At the very least, I'm going to add something to the ShareExtension
wiki page.  It's hinted at, but I think this deserves an explicit
mention.

Greg


More information about the Mercurial-devel mailing list