Hi, On Mon, 20 Apr 2009, Adrian Schröter wrote:
The fix, as I have already pointed out, is very easy: don't forget what diffs were generated from:
A / \ dAB A'
A''
Then, it is trivial to see that A'' and B have A as their common ancestor, and merging suddenly becomes easy:
B = apply(dAB, A) merge(B, A, A'')
All this is true and applies perfectly on manual merging. But please keep in mind that the B branch is maintained by different people than the A branch.
That doesn't affect anything ...
And we can not allow that someone is blocking someone else.
... nor does it do that. If you fear or think it does you're still confused.
So is this example a true scenario for you(?): A, A' and A'' are changes in Factory or any Devel Project upstream branch for example and B is some random change which might become a submission later.
That means that B has a change for A and lets assume it conflicts with the change in A'. Something which can not get solved automatically but needs to be decided by the contributors.
It is essential for us that the A branch still works and also the people responsible for A* are not blocked by the changes in B.
They aren't. The whole excersice is precisely so that the submitter (the author of B) can adapt easily to the conflicting change in A', by trivially merging in all non-conflicting changes therein, and then resolving the conflict himself. Creating a B' if you will, now based on A''.
So it is the responsibility of B to rebase his change on A''. It might be that manual merge tools can work better in the order you have described in some cases. But I assume that most people will just re-apply their changes based on A'' and fix manually where it breaks.
And this exactly (the manual application) is what Andreas, and many others, gripe about. It's simply too much work without a real three-way merge. Ciao, Michael.