You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2013/03/22 17:56:39 UTC

svn commit: r1459895 - in /subversion/trunk/subversion: libsvn_client/merge.c tests/cmdline/merge_tests.py

Author: pburba
Date: Fri Mar 22 16:56:39 2013
New Revision: 1459895

URL: http://svn.apache.org/r1459895
Log:
Keep '--- Merging *' and '--- Recording mergeinfo *' notifications
consistent when a file merge is broken into multiple editor drives.

* subversion/libsvn_client/merge.c

  (do_file_merge): Handle the case where what is actually merged is a
   subset of the requested merge source.

* subversion/tests/cmdline/merge_tests.py

  (conflicted_split_merge_with_resolve): Remove workaround introduced in
   r1459012.

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=1459895&r1=1459894&r2=1459895&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Fri Mar 22 16:56:39 2013
@@ -7400,6 +7400,26 @@ do_file_merge(svn_mergeinfo_catalog_t re
                                              ctx, scratch_pool,
                                              iterpool));
           remaining_ranges = merge_target->remaining_ranges;
+
+          /* We are honoring mergeinfo and this is not a simple record only
+             merge which blindly records mergeinfo describing the merge of
+             SOURCE->LOC1->URL@SOURCE->LOC1->REV through
+             SOURCE->LOC2->URL@SOURCE->LOC2->REV.  This means that the oldest
+             and youngest revisions merged (as determined above by
+             calculate_remaining_ranges) might differ from those described
+             in SOURCE.  To keep the '--- Merging *' notifications consistent
+             with the '--- Recording mergeinfo *' notifications, we adjust
+             RANGE to account for such changes. */
+          if (remaining_ranges->nelts)
+            {
+              svn_merge_range_t *adj_start_range =
+                APR_ARRAY_IDX(remaining_ranges, 0, svn_merge_range_t *);
+              svn_merge_range_t *adj_end_range =
+                APR_ARRAY_IDX(remaining_ranges, remaining_ranges->nelts - 1,
+                              svn_merge_range_t *);
+              range.start = adj_start_range->start;
+              range.end = adj_end_range->end;
+            }
         }
     }
 

Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1459895&r1=1459894&r2=1459895&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Fri Mar 22 16:56:39 2013
@@ -18911,13 +18911,8 @@ def conflicted_split_merge_with_resolve(
     # repeat the merge at which point the next sub-range(s) can be merged.
     # The mergeinfo on the target then should only reflect that the first
     # sub-range (r3-4) has been merged.
-
-    # ### Bug? The mergeinfo ranges recorded by the merge differ
-    #     slightly for a single-file merge vs. a dir merge.  That's
-    #     incidental to the purpose of this test, so we work around it
-    #     with "target == file and 'X' or 'Y'".
     expect = expected_out_and_err(tgt_ospath,
-                                  target == file and '3-4,5-11' or '3-4,6-11',
+                                  '3-4,6-11',
                                   ['3-4', '6-8,10-11'],
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 4, [], expect, '3-11')
@@ -18925,7 +18920,7 @@ def conflicted_split_merge_with_resolve(
     # Try a multiple-range merge that raises a conflict in the
     # first sub-range in the first specified range;
     expect = expected_out_and_err(tgt_ospath,
-                                  target == file and '4,5-6,8-10' or '4,6,8-10',
+                                  '4,6,8-10',
                                   ['4', '6', '8,10'],
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 4, ['-c4-6,8-10'], expect, '4-6,8-10')
@@ -18936,7 +18931,7 @@ def conflicted_split_merge_with_resolve(
     try_merge(target, 6, ['-c4-6,8-10'], expect, '4-6,8-10')
     # first sub-range in the last specified range;
     expect = expected_out_and_err(tgt_ospath,
-                                  target == file and '4-6,8,9-10' or '4-6,8,10',
+                                  '4-6,8,10',
                                   ['4,6', '8', '10'],
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 8, ['-c4-6,8-10'], expect, '4-6,8-10')
@@ -18980,7 +18975,7 @@ def conflicted_split_merge_with_resolve(
                                   expect_error=False)
     try_merge(target, None, ['-r6:3', '-r10:7'], expect, '7')
     expect = expected_out_and_err(tgt_ospath,
-                                  target == file and '-6,5-4,10-8' or '-6,-4,10-8',
+                                  '-6,-4,10-8',
                                   ['-6', '-4', '-10,-8'],
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 6,  ['-r6:3', '-r10:7'], expect, '7')
@@ -18989,7 +18984,7 @@ def conflicted_split_merge_with_resolve(
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 4,  ['-r6:3', '-r10:7'], expect, '7')
     expect = expected_out_and_err(tgt_ospath,
-                                  target == file and '6-4,-10,9-8' or '6-4,-10,-8',
+                                  '6-4,-10,-8',
                                   ['-6,-4', '-10', '-8'],
                                   prop_resolved=1, expect_error=False)
     try_merge(target, 10, ['-r6:3', '-r10:7'], expect, '7')