On Wed, Jul 06, 2011 at 12:23:25PM -0400, Paul Burba wrote:
> One alternative would be to stop nesting conflicts if merge tracking
> is active and treat existing conflicts as obstructions.  Using the
> existing merge tracking infrastructure for marking skipped subtrees as
> untouched by a merge, we could leave the initial conflict and add
> subtree mergeinfo on the conflicted path to reflect that the
> subsequent merges didn't touch it.  For example, in step 4 we could do
> this instead:
> 
> 4) Instead of creating a second conflict we skip the existing conflict:
> 
>   >svn merge ^^/A A_COPY -c7
>   Skipped 'A_COPY\D\H\omega'
>   --- Recording mergeinfo for merge of r7 into 'A_COPY':
>    U   A_COPY\D\H\omega
>    G   A_COPY
>   Summary of conflicts:
>     Skipped paths: 1
> 
>   >svn st
>    M      A_COPY
>   ?       A_COPY\D\H\omega.merge-left.r5
>   ?       A_COPY\D\H\omega.merge-right.r6
>   ?       A_COPY\D\H\omega.working
>   CM      A_COPY\D\H\omega
>   Summary of conflicts:
>     Text conflicts: 1
> 
> 5) Mergeinfo is updated on the merge target as expected, but is also
> added to the conflicted path, but *only* for the first merge (r6):
> 
>   >svn pl -vR
>   Properties on 'A_COPY':
>     svn:mergeinfo
>       /A:6-7
>   Properties on 'A_COPY\D\H\omega':
>     svn:mergeinfo
>       /A/D/H/omega:6
> 
> With the change in behavior it is arguably(?) easier to resolve the
> first conflict then repeat the merge (where merge tracking sees that
> the omega hasn't had r7 merged and applies only that part of the
> diff):

What if users run 'svn revert' as part of resolving the conflict?
Revert would remove the explicit mergeinfo, so subsequent merges
won't try to merge changes for r7 again.
So I think we'll need some other approach.

We could have 'svn merge' check for conflicts in the working copy
upfront and refuse to run the merge unless a special option
(--allow-conflicts?) was passed. Like we already do for mixed-revisions.

Reply via email to