monotone-devel
[Top][All Lists]
Advanced

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

Re: [Monotone-devel] Re: Merge conflicts


From: Nathaniel Smith
Subject: Re: [Monotone-devel] Re: Merge conflicts
Date: Sun, 9 Apr 2006 04:11:52 -0700
User-agent: Mutt/1.5.11

On Sun, Apr 09, 2006 at 12:04:45PM +0200, Peter Simons wrote:
> Thank you for the explanation. The branch in question is very
> messed up, unfortunately, I remember doing several wild directory
> renames.

And at least one directory delete, apparently :-).

Possibly followed by a directory re-creation.  Just because two
directories have the same name, recall, doesn't mean that they have
any actual relation to each other... which might have some bearing on
how identical the heads actually are.

> My biggest problem is figuring out _what exactly_ to change to
> fix the problem. Both heads are identical ...
> 
>   diff -r head1 head2
>   diff -r head1/_MTN/revision head2/_MTN/revision
>   1c1
>   < 1bfd0c9f4a347913d2573f3bf8b5e3192350f6a8
>   ---
>   > 1f7b551d990fa8d8f64072f6563874312e3ed62d
> 
> ... but apparently the problem is in their history. When Monotone
> prints an error message like this one:
> 
>   mtn: warning: orphaned node conflict on node 20547, dead parent 52, name foo
> 
> I simply don't know what it means! What is a "node"? How does
> that translate to a revision?

Oops.  A 'node' is our new developer-speak for "logical file or
directory".  20547 is a meaningless number, that just happens to be
the one your local mtn assigned to that particular file, to keep track
of it through history.  52, similarly, is another meaningless number,
the one that your monotone chose to use to track the directory that
used to contain that file.  The parent directory does not have a name,
because it is dead.  The orphaned file, however, does have a name;
that name is "foo".  It wanted to be <whatever the parent's name
is>/foo, but it can't be.

In principle it would be possible to figure out what the parent's name
used to be, before it died -- the debugging command 'get_roster' might
help with this -- if you can't otherwise figure out which file it is
that's encountering problems.

Once you've found the file that's encountering a conflict, you can
(for instance) simply rename it somewhere safe in both parents (e.g.,
somewhere in the root dir), it should merge cleanly through after
that[1], and then you can fix it up however you like after the merge.
That's probably the most universally easy solution; there are likely
other easy solutions available, but they depend more on what exactly
you have now and want to get.

Does that help?

[1] Unless your two root dirs are actually different, which is
_highly_ unlikely unless you've gone wild with pivot_root, or maybe if
you're working with a history that had root sutures before you
rosterified tt -- this situation would still be recoverable, but
requires pulling out some bigger guns.

-- Nathaniel

-- 
"But in Middle-earth, the distinct accusative case disappeared from
the speech of the Noldor (such things happen when you are busy
fighting Orcs, Balrogs, and Dragons)."




reply via email to

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