You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/07/16 13:52:12 UTC

svn commit: r1147408 - in /subversion/branches/1.7.x: ./ STATUS subversion/libsvn_client/merge.c

Author: hwright
Date: Sat Jul 16 11:52:11 2011
New Revision: 1147408

URL: http://svn.apache.org/viewvc?rev=1147408&view=rev
Log:
Merge r1146781 from trunk:

 * r1146781
   Fix a bug in subtree merging.  See email thread by Barry Scott, 2011-07-02,
   "Assert in svn-1.7-alpha2 svn_client_merge3",
   <http://svn.haxx.se/dev/archive-2011-07/0052.shtml>.
   Justification:
   Notes:
     Not applicable to 1.6.x.
   Votes:
     +1: julianfoad, rhuijben, philip

Modified:
    subversion/branches/1.7.x/   (props changed)
    subversion/branches/1.7.x/STATUS
    subversion/branches/1.7.x/subversion/libsvn_client/merge.c

Propchange: subversion/branches/1.7.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Jul 16 11:52:11 2011
@@ -53,4 +53,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1146013,1146219,1146222,1146274,1146492,1146555,1146620,1146684,1146832,1146834,1146899,1146904
+/subversion/trunk:1146013,1146219,1146222,1146274,1146492,1146555,1146620,1146684,1146781,1146832,1146834,1146899,1146904

Modified: subversion/branches/1.7.x/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1147408&r1=1147407&r2=1147408&view=diff
==============================================================================
--- subversion/branches/1.7.x/STATUS (original)
+++ subversion/branches/1.7.x/STATUS Sat Jul 16 11:52:11 2011
@@ -45,16 +45,6 @@ Candidate changes:
 Approved changes:
 =================
 
- * r1146781
-   Fix a bug in subtree merging.  See email thread by Barry Scott, 2011-07-02,
-   "Assert in svn-1.7-alpha2 svn_client_merge3",
-   <http://svn.haxx.se/dev/archive-2011-07/0052.shtml>.
-   Justification:
-   Notes:
-     Not applicable to 1.6.x.
-   Votes:
-     +1: julianfoad, rhuijben, philip
-
  * r1147293, r1147309
    Fix issue #3960 'URL-to-WC copy with --quiet segfaults'.
    Justification:

Modified: subversion/branches/1.7.x/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_client/merge.c?rev=1147408&r1=1147407&r2=1147408&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_client/merge.c Sat Jul 16 11:52:11 2011
@@ -2903,21 +2903,34 @@ adjust_deleted_subtree_ranges(svn_client
                                                 scratch_pool));
                 }
 
-              /* Create a rangelist describing the range PRIMARY_URL@older_rev
-                 exists and find the intersection of that and
-                 CHILD->REMAINING_RANGES. */
-              exists_rangelist =
-                svn_rangelist__initialize(older_rev,
-                                          revision_primary_url_deleted - 1,
-                                          TRUE, scratch_pool);
-              SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
-                                              exists_rangelist,
-                                              child->remaining_ranges,
-                                              FALSE, scratch_pool));
+              /* Find the intersection of CHILD->REMAINING_RANGES with the
+                 range over which PRIMARY_URL@older_rev exists (ending at
+                 the youngest revision at which it still exists). */
+              if (revision_primary_url_deleted - 1 > older_rev)
+                {
+                  /* It was not deleted immediately after OLDER_REV, so
+                     it has some relevant changes. */
+                  exists_rangelist =
+                    svn_rangelist__initialize(older_rev,
+                                              revision_primary_url_deleted - 1,
+                                              TRUE, scratch_pool);
+                  SVN_ERR(svn_rangelist_intersect(&(child->remaining_ranges),
+                                                  exists_rangelist,
+                                                  child->remaining_ranges,
+                                                  FALSE, scratch_pool));
+                }
+              else
+                {
+                  /* It was deleted immediately after the OLDER rev, so
+                     it has no relevant changes. */
+                  child->remaining_ranges
+                    = apr_array_make(scratch_pool, 0,
+                                     sizeof(svn_merge_range_t *));
+                }
 
-              /* Create a second rangelist describing the range beginning when
-                 PRIMARY_URL@older_rev was deleted until younger_rev.  Then
-                 find the intersection of that and PARENT->REMAINING_RANGES.
+              /* Find the intersection of PARENT->REMAINING_RANGES with the
+                 range beginning when PRIMARY_URL@older_rev was deleted
+                 until younger_rev.
                  Finally merge this rangelist with the rangelist above and
                  store the result in CHILD->REMANING_RANGES. */
               deleted_rangelist =