monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Monotone-devel] change_set.cc:526: invariant 'I(j != p2.end())' vio


From: Nathaniel Smith
Subject: Re: [Monotone-devel] change_set.cc:526: invariant 'I(j != p2.end())' violated
Date: Tue, 25 Jan 2005 13:36:04 -0800
User-agent: Mutt/1.5.6+20040907i

On Fri, Jan 21, 2005 at 02:14:17PM +0100, Peter Simons wrote:
>   monotone: fatal: std::logic_error: change_set.cc:526: invariant 'I(j != 
> p2.end())' violated

Okay, tracked this down.  *sigh* It _is_ a rename bug.  A different
sort than we've seen before; your revision
  216389124693aecb505df1f6c675a9de278724e9
says:
  rename_file "installed_packages/bnv_have_qt.m4"
           to "bnv_have_qt.m4"
however, the previous revision 80440e1b3db0cabb4d985e670bbcec2bbfb6c270
already has a file named bnv_have_qt.m4, which does not get deleted or
renamed or anything.  Which is invalid; you can't have two files with
the same name, you have to say what happened to the one that had that
name originally...

So the root cause seems to be that you renamed one file on top of
another one, and we somehow forgot to put in a check for this so it
went into your database.  Working on fixing that part now.

In the mean time, you have a few options...
  -- "db rebuild" will rebuild your database, degrading all renames to
     add+dels; this will clear out the bad one, while, unfortunately,
     breaking your history
  -- throw out history back to the merge: it looks like there are 9
     revisions since the bad one; some judicious use of 'db execute'
     could get rid of them.  (Presumably keeping some diffs or the
     like to recreate the changes afterwards.  Or you could actually
     keep the full trees; 'monotone checkout <id>' should work on each
     of those trees, it's only merge operations that have to deal with
     the changesets.)
It would be nice to have some more surgical and automated way to do
this, but none jumps to mind.  If these are both very problematic
options, though, then I can try to think of something.

Very sorry for the inconvenience :-(  After 0.15 we added invariants
every few lines all through the merge logic; at this point I'm adding
extensive invariants and checking right inside database::put_revision
too, just in hopes that we'll never have to deal with this again...

-- Nathaniel

-- 
The Universe may  /  Be as large as they say
But it wouldn't be missed  /  If it didn't exist.
  -- Piet Hein




reply via email to

[Prev in Thread] Current Thread [Next in Thread]