[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: r1438683 - issue #4306 'multiple editor drive file merges record wrong mergeinfo during conflicts'

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: Thu, 31 Jan 2013 23:16:01 +0000 (GMT)

Hi Paul.  Not sure about this...

> URL: http://svn.apache.org/viewvc?rev=1438683&view=rev

> Log:
> Fix issue #4306 'multiple editor drive file merges record wrong mergeinfo
> during conflicts'.
>
> * subversion/libsvn_client/merge.c
>   (do_file_merge): If we can only perform a partial merge because a conflict
>   broke the merge, then only record mergeinfo for that partial merge.  That
>   was subsequent merges can finish the job.
>
> * subversion/tests/cmdline/merge_tests.py
>   (conflict_aborted_mergeinfo_described_partial_merge): Remove XFail
>   decorator and tweak failure status comment.
>
> Modified:
>     subversion/trunk/subversion/libsvn_client/merge.c
>     subversion/trunk/subversion/tests/cmdline/merge_tests.py
>
> Modified: subversion/trunk/subversion/libsvn_client/merge.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1438683&r1=1438682&r2=1438683&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_client/merge.c (original)
> +++ subversion/trunk/subversion/libsvn_client/merge.c Fri Jan 25 20:19:15 2013
> @@ -6923,7 +6923,10 @@ do_file_merge(svn_mergeinfo_catalog_t re
>         &filtered_rangelist,
>         mergeinfo_path,
>         merge_target->implicit_mergeinfo,
> -        &range, iterpool));
> +        /* Only record partial mergeinfo if only a partial merge was
> +          performed before a conflict was encountered. */
> +        conflicted_range ? conflicted_range : &range,
> +        iterpool));

Shouldn't that be "the range starting at 'range.start' and ending at 'conflicted_range.end'?

It looks to me like it will only record mergeinfo for the sub-range that raised the conflict, and not for the earlier sub-ranges that completed successfully.

I'm currently writing an extended test that will cover when a conflict is raised in:

{ first sub-range of first specified range;
  last  sub-range of first specified range;
  first sub-range of last  specified range;
  last  sub-range of last  specified range }
x
{ single-file merge;
  dir merge }

That should be able to confirm my suspicion about the above code.

I'm doing this because I'm working on refactoring so that the three main merge subroutines called from do_merge() (that is the cases: single-file, dir-with-mergeinfo, dir-no-mergeinfo), each return info about where they stopped if they stopped because of a conflict, instead of throwing an error containing that info in human-readable form.

Then I will be able to put the merge in a "do { merge; resolve any conflicts } while (merge is not complete)" loop at the 'svn' level.  And thereby fix interactive conflict resolution which currently aborts at this point even if you resolved the conflicts.

- Julian

>
>       /* Only record mergeinfo if there is something other than
>           self-referential mergeinfo, but don't record mergeinfo if
>
> Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1438683&r1=1438682&r2=1438683&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
> +++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Fri Jan 25 20:19:15
> 2013
> @@ -18176,8 +18176,7 @@ def merge_properties_on_adds(sbox):
>
> @SkipUnless(server_has_mergeinfo)
> @Issue(4306)
> -_at_XFail()
> -# Test for issue #4306 'multiple editor drive merges record wrong
> +# Test for issue #4306 'multiple editor drive file merges record wrong
> # mergeinfo during conflicts'
> def conflict_aborted_mergeinfo_described_partial_merge(sbox):
>   "conflicted split merge can be repeated"
> @@ -18218,8 +18217,8 @@ def conflict_aborted_mergeinfo_described
>   svntest.actions.run_and_verify_svn(None, None, '.*', 'merge',
> '^/iota',
>                                       iota_copy_path, '--accept',
> 'postpone')
>
> -  # Currently this test fails because the merge fails after merging
> -  # only r2 (as it should) but mergeinfo for r5-6 is recorded, preventing
> +  # Previously this test failed because the merge failed after merging
> +  # only r2 (as it should) but mergeinfo for r5-6 was recorded, preventing
>   # subsequent repeat merges from applying the operative r5.
>   svntest.actions.run_and_verify_svn(
>     "Incorrect mergeinfo set during conflict aborted merge",
>
Received on 2013-02-01 00:16:38 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.