On mar, oct 02, 2007 at 08:13:18 +0000, Pierre Habouzit wrote: > Ancestor: (aa*, aaa, bbb) > Left child: (aa*, bbb) <-- remove aaa because aa* covers it > Right child: (aaa, aabcd, bbb, cc*) <-- remove aa* and be explicit > > The proper result is probably: (aaa, aabcd, bbb, cc*) but is in fact a > case of conflict, because the "left" child could have used the fact that > aa* was present and hide say a aaXXX that the right child did not had, > and the merge would be wrong. Okay this example blows, I believe this one is better: (a*) / \ (ab*) (ac*) \ / ???? gitignore are subsets of the set of words. if S is the ancestor set, S1 and S2 the left and right sets. let Δ1 and Δ2 be S1 \ S and S2 \ S respectively. I think there is a conflict if Δ1 n Δ2 != 0 and (Δ1 is not a subset of Δ2) and (Δ2 is not a subset of Δ1) If the condition holds, then I believe that the "merged" .gitignore would be: (S1 u S2) \ (Δ1 u Δ2) Though, don't take my word for it, I've only sketched this on a small piece of paper, and have no rigorous proof. -- ·O· Pierre Habouzit ··O madcoder@xxxxxxxxxx OOO http://www.madism.org
Attachment:
pgpRALBjYIjRY.pgp
Description: PGP signature