monotone-devel
[Top][All Lists]
Advanced

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

Re: [Monotone-devel] Deterministic *-merge


From: Oren Ben-Kiki
Subject: Re: [Monotone-devel] Deterministic *-merge
Date: Fri, 12 Jan 2007 08:02:48 -0800

On Fri, 2007-01-12 at 03:00 -0800, Nathaniel J. Smith wrote:
> ...
>
> Deterministic merging
> =====================

Beautiful! There's just one point I didn't follow, though.

> But, magically, with deterministic *-merge, all orders work the same
> -- it even turns out to be possible to merge two conflicts and get out
> a non-conflict (!):
> 
>       a             a             a
>      / \           / \           / \
>     b*  b*        b*  b*        b*  b*
>    / \ / \       / \ / \       / \ / \
>   c*  b   c*    c*  b   c*    c*  b   c*
>    \ /   /       \   \ /       \ / \ /
>     #   /         \   #         #   #
>      \ /           \ /           \ /
>       c             c             c

You lost me here. In the '#' node, you lost the specific values 'b' and
'c' - all you have is 'some unknown value'. How does merging two
'unknown values' produce a specific value?

I like the idea of not using the generic '#' and instead listing the set
of candidate values. This can be done in text files by some
not-so-pretty syntax tricks. Speaking of which, how did you envision
representing '#' in actual text files?

If the result of a conflict was replacing a scalar with a set of
conflicting values, we'd get a user action (creating a separate node)
that would pick one or replace the set by a new one. It seems like this
would be very useful when users need to resolve conflicts in practice...

At first I thought that was how you obtained 'c' above, but it turns out
not to be the case:

      a             a             a
     / \           / \           / \
    b*  b*        b*  b*        b*  b*
   / \ / \       / \ / \       / \ / \
  c*  b   c*    c*  b   c*    c*  b   c*
   \ /   /       \   \ /       \ / \ /
  {b,c} /         \ {b,c}     {b,c}{b,c}
     \ /           \ /           \ /
      c             c           {b,c}

So I'm still stumped on how you obtained 'c' in all three cases. I must have 
missed some important point here...





reply via email to

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