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