On Wed, Mar 20, 2013 at 4:15 PM, Julian Foad <julianf...@btopenworld.com> wrote: > > -- > Certified & Supported Apache Subversion Downloads: > http://www.wandisco.com/subversion/download > ----- Original Message ----- >> From: Julian Foad <julianf...@btopenworld.com> >> To: C. Michael Pilato <cmpil...@collab.net> >> Cc: Subversion Development <dev@subversion.apache.org> >> Sent: Wednesday, 20 March 2013, 15:38 >> Subject: Re: [PATCH] Fix issue #4316 - Merge errors out after resolving >> conflicts >> >> C. Michael Pilato wrote: >>> On 03/15/2013 06:03 PM, Julian Foad wrote: >>>> NOTIFICATIONS CHANGED >>>> >>>> As I mentioned in my "Conflict resolver callback design" >> email, >>>> doing this does mean that the notification receiver will get a >> 'C' >>>> (conflict) notification for every conflict even if that conflict is >> going to be >>>> resolved to a pre-determined choice. In terms of the 'svn' >> client and >>>> the 'svn merge' command, this means that 'svn merge >>>> --accept=[mine-full, etc.]' will, if we don't take further >> action, print >>>> something like in this example: >>>> >>>> [[[ >>>> --- Merging r3 through r4 into 'merge_tests-135/A2/mu': >>>> C merge_tests-135/A2/mu >>>> --- Recording mergeinfo for merge of r3 through r4 into >>>> 'merge_tests-135/A2/mu': >>>> G merge_tests-135/A2/mu >>>> Resolved conflicted state of 'merge_tests-135/A2/mu' >>>> --- Merging r6 through r8 into 'merge_tests-135/A2/mu': >>>> U merge_tests-135/A2/mu >>>> --- Merging r10 through r11 into 'merge_tests-135/A2/mu': >>>> U merge_tests-135/A2/mu >>>> --- Recording mergeinfo for merge of r5 through r11 into >>>> 'merge_tests-135/A2/mu': >>>> G merge_tests-135/A2/mu >>>> Summary of conflicts: >>>> Property conflicts: 1 >>>> ]]] >>>> >>>> I think if this was changed to print a slightly different summary, >>>> something like... >>>> >>>> [[[ >>>> Summary of conflicts: >>>> Property conflicts: 0 (and 1 already resolved) >>>> ]]] >>>> >>>> ... then it would be fine. I don't see that the interleaved >>>> 'Resolved ...' line is a problem. >>>> >>>> Do others agree? >>> >>> The point of the summary section is to draw attention to details that might >>> have whizzed by the screen. Given that, I agree it's a bit misleading >> to >>> alert the user to a problem which may not really be a problem any longer. >>> So yeah, a change such as what you've suggested makes sense to me. >>> >>> (Sorry, no feedback on your actual patch.) >> >> I have committed a complete fix, with the Summary of Conflicts as discussed >> here, in <http://svn.apache.org/r1459012>. > > Remaining issues: > > * There is an inconsistency with what rev ranges get recorded as merged, in > a file merge vs. a dir merge -- see the comment and work-around in > merge_tests.py 138.
Hi Julian, I see the inconsistency, but I don't believe there is a bug (assuming we are talking about the same thing -- if not please point me in the right direction). Looking at the spot in the test where your comment is, the test currently does this merge: Uniform revision: 1.8.0-dev>svn up Updating '.': At revision 11. Local prop mod that will conflict with the coming merge: 1.8.0-dev>svn st M A2\mu 1.8.0-dev>svn diff Index: A2/mu =================================================================== --- A2/mu (revision 11) +++ A2/mu (working copy) Property changes on: A2/mu ___________________________________________________________________ Modified: prop-4 ## -1 +1 ## -Old pval 4 \ No newline at end of property +Conflict pval 4 \ No newline at end of property Fragmented mergeinfo inherited by the target... 1.8.0-dev>svn pg svn:mergeinfo -vR A2 Properties on 'A2': svn:mergeinfo /A:5,9 ...breaks the merge into multiple editor drives, starting with r3: 1.8.0-dev>svn.exe merge ^^/A/mu@11 A2\mu --accept mine-full --- Merging r3 through r4 into 'A2\mu': C A2\mu --- Recording mergeinfo for merge of r3 through r4 into 'A2\mu': G A2\mu Resolved conflicted state of 'A2\mu' --- Merging r6 through r8 into 'A2\mu': U A2\mu --- Merging r10 through r11 into 'A2\mu': U A2\mu --- Recording mergeinfo for merge of r5 through r11 into 'A2\mu': G A2\mu Summary of conflicts: Property conflicts: 0 remaining (and 1 already resolved) The gaps in the mergeinfo are all filled: 1.8.0-dev>svn pg svn:mergeinfo -vR A2 Properties on 'A2': svn:mergeinfo /A:5,9 Properties on 'A2\mu': svn:mergeinfo /A/mu:3-11 If we instead try the above merge as a directory merge targeting A2/mu's parent, the merge starts with r2: 1.8.0-dev>svn.exe merge ^^/A@11 A2 --accept mine-full --- Merging r2 through r4 into 'A2': C A2\B C A2\mu --- Recording mergeinfo for merge of r2 through r4 into 'A2': U A2 Resolved conflicted state of 'A2\B' Resolved conflicted state of 'A2\mu' --- Merging r6 through r8 into 'A2': U A2\B U A2\mu --- Merging r10 through r11 into 'A2': U A2\B U A2\mu --- Recording mergeinfo for merge of r6 through r11 into 'A2': G A2 Summary of conflicts: Property conflicts: 0 remaining (and 2 already resolved) 1.8.0-dev>svn st M A2 M A2\B M A2\mu And the recorded mergeinfo also starts with r2: 1.8.0-dev>svn pg svn:mergeinfo -vR A2 Properties on 'A2': svn:mergeinfo /A:2-11 If that is the inconsistency you mean? I don't think that's a problem. Let's look at the history of ^/A2 vs ^/A2/mu: 1.8.0-dev>svn log -v -r1:HEAD ^^/A2 ------------------------------------------------------------------------ r1 | jrandom | 2013-03-21 10:16:18 -0400 (Thu, 21 Mar 2013) | 1 line Changed paths: A /A A /A/B A /A/B/E A /A/B/E/alpha A /A/B/E/beta A /A/B/F A /A/B/lambda A /A/C A /A/D A /A/D/G A /A/D/G/pi A /A/D/G/rho A /A/D/G/tau A /A/D/H A /A/D/H/chi A /A/D/H/omega A /A/D/H/psi A /A/D/gamma A /A/mu A /iota Log message for revision 1. ------------------------------------------------------------------------ r3 | jrandom | 2013-03-21 10:16:26 -0400 (Thu, 21 Mar 2013) | 1 line Changed paths: A /A2 (from /A:1) R /A2/B (from /A/B:2) R /A2/mu (from /A/mu:2) File 'C:\SVN\src-trunk-3\\subversion\tests\cmdline\merge_tests.py', line 18796, in conflicted_split_merge_with_resolve ------------------------------------------------------------------------ r11 | jrandom | 2013-03-21 10:16:27 -0400 (Thu, 21 Mar 2013) | 1 line Changed paths: M /A2 M /A2/B M /A2/mu File 'C:\SVN\src-trunk-3\\subversion\tests\cmdline\merge_tests.py', line 18814, in conflicted_split_merge_with_resolve ------------------------------------------------------------------------ Since ^/A2/mu was replaced with a copy of ^/A/mu@2 wouldn't we expect a merge targeting the former (since ^/A2/mu@2 is the yca of the two branches) to merge -r2:HEAD? Likewise, if we target /A2, the yca is older, ^/A@1, so the merge is -r1:HEAD. This explains the mergeinfo differences between the file and dir merge. ~~~~~ r3 is explained by the fact that your test makes a copy of a mixed-revision WC to create the branch in r3: 1.8.0-dev>svn st -v 1 1 jrandom . 1 1 jrandom A 2 2 jrandom A\B 1 1 jrandom A\B\E 1 1 jrandom A\B\E\alpha 1 1 jrandom A\B\E\beta 1 1 jrandom A\B\F 1 1 jrandom A\B\lambda 1 1 jrandom A\C 1 1 jrandom A\D 1 1 jrandom A\D\G 1 1 jrandom A\D\G\pi 1 1 jrandom A\D\G\rho 1 1 jrandom A\D\G\tau 1 1 jrandom A\D\H 1 1 jrandom A\D\H\chi 1 1 jrandom A\D\H\omega 1 1 jrandom A\D\H\psi 1 1 jrandom A\D\gamma 2 2 jrandom A\mu 1 1 jrandom iota 1.8.0-dev>svn copy A A2 A A2 1.8.0-dev>svn ci -m "" Adding A2 Adding A2\B Adding A2\B\E Adding A2\B\F Adding A2\B\lambda Adding A2\mu Committed revision 3. 1.8.0-dev>svn log -v -r3 ------------------------------------------------------------------------ r3 | pburba | 2013-03-21 11:19:39 -0400 (Thu, 21 Mar 2013) | 1 line Changed paths: A /A2 (from /A:1) R /A2/B (from /A/B:2) R /A2/mu (from /A/mu:2) ------------------------------------------------------------------------ Not sure if that was an oversight or purposeful. -- Paul T. Burba CollabNet, Inc. -- www.collab.net -- Enterprise Cloud Development Skype: ptburba