On Fri, 2007-01-12 at 12:57 -0600, Timothy Brownawell wrote:
> What you're missing is the "minimal" part of the definition of *(node).
> You don't just union the mark sets of the parent nodes, you take that
> union and then run erase_ancestors() on it.

<smack self on head> of course. Its also sort of what I had in mind when
I thought of culling the set. Makes perfect sense. I knew I was missing
something obvious. Sorry.

One last question :-) Is the idea that the '#' nodes be completely
virtual? That is, if I have two actual versions in monotone, one with a
value of 'a' and one with a value of 'b', and I try to merge them...
what would happen in practice?

The simplest way would be to force the user to resolve every '#' to a
specific value (just like he does today when there is a conflict), so in
the monotone repository we would see:

  a*  b*
   \ /
    c*

Only during the merge algorithm the graph would be considered to be:

  a*  b*
   \ /
    #
    |
    c*

So all the '#' nodes would only exist virtually, never in a real
version. If that's the case, then the example of merging two '#' nodes
would be impossible to construct in practice.

The more complex alternative would be to allow '#" values in real
versions. This would allow merging two '#' nodes to cleanly remove the
conflict, but it would also require some way of actually representing
'#" values inside text files.

I assume that what you are proposing is the former (simple) method?



_______________________________________________
Monotone-devel mailing list
Monotone-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monotone-devel

Reply via email to