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... _______________________________________________ Monotone-devel mailing list Monotone-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/monotone-devel