On Mon, Jan 30, 2012 at 10:19 PM, Stefan Sperling <s...@elego.de> wrote: > On Mon, Jan 30, 2012 at 09:38:15PM +0100, Johan Corveleyn wrote: >> No, AFAIU, Brane's suggestion was not that we shouldn't use the >> "reintegrate-way" for 3.2, but rather that we should *always* use the >> "reintegrate-way", also for sync merges. So that a sync merge picks >> its arguments for the 2-URL merge in the same way as a reintegrate >> merge. Unless I misunderstood what Brane meant. >> >> And I think he's got a point. I don't have the time to write up a >> detailed example right now, but I think it should work. >> >> If that would be the case, then we effectively implement the merges >> completely symmetrical: always the "reintegrate-way". > > Counter-example: > > +b@r2---b@r4---b@r5------b@r7----- > (branch) / ^ ^ (merge 2) > / | (merge 1) | > --- a@r1---a@r3-+---------a@r6--+------- > > This performs two "sync" merges from a to b. > > The first merge can be done the "reintegrate way": > > svn co b > svn merge b@r2 a@r3 b > > This merge applies the a@r3 change to b@r2, yielding b@r4. Fine. > > But how would you perform the second merge, which applies a@r6 to > b@r5 yielding b@r7, using the "reintegrate way", without undoing > b@r5 (a non-merge commit)? > > You cannot do this: > svn co b > svn merge b@r2 a@r6 b > because this applies the a@r3 change again (conflict due to diff3) > since it re-uses the branch point as left anchor for the diff. > > But you cannot use the last-synced revision as left anchor either: > svn co b > svn merge b@r4 a@r6 b > Because applying this delta reverts b@r5 (this change appears reversed > in the diff between b@r4 and a@r6 since it isn't present on branch a).
No, I don't think it does. The change b@r5 doesn't appear in this diff, neither forward nor reversed. Say b@r5 adds a line in file b/X, I see no reason this change (forward or reversed) would be part of the difference between b@r4 and a@r6. > The way to specify the diff you want to merge is thus: > svn co b > svn merge a@r3 a@r6 b > Which is what "svn merge ^/trunk" would do. AFAICS, diff(b@r4, a@r6) should be identical to diff(a@r3, a@r6), modulo the variation that is specific to b@<4. Which seems to be effectively desirable, because that makes it easier for diff3 (same as for reintegrate). -- Johan