Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Subversion Wiki" for 
change notification.

The "SymmetricMerge" page has been changed by JulianFoad:
http://wiki.apache.org/subversion/SymmetricMerge?action=diff&rev1=78&rev2=79

Comment:
Fix an error in "natural history" in criss-cross merge case #3, found by 
stefan2.

  
  OTOH, when the subtree contains some changes, but other changes exist outside 
it, that's ''significant'' subtree merge.
  
- 
  === Example ===
- 
  Consider the following mergeinfo catalog:
  
+  . ^/branch: /trunk:100-110 ^/branch/A/B: /trunk/B:101-104 ^/branch/A/C: 
/trunk/C:104-107
-   ^/branch: /trunk:100-110
-   ^/branch/A/B: /trunk/B:101-104
-   ^/branch/A/C: /trunk/C:104-107
  
  The merge 'svn merge ^/trunk@110 (into ^/branch)' would break the merge into 
the following ranges: [100], [101-103], [104], [105-107], [108-110].  Each 
range would be treated independently, and an actual merge will only be 
attempted on the subtrees that do not indicate they have already been merged 
that range.  (For example, the [101-103] range would not be merged into the 
^/branch/B subtree.  It would be merged into its parents and siblings, though, 
just as with 'svn up --set-depth=exclude B && svn merge -c 101:103 
--disregard-mergeinfo'.)
- 
  
  == Cherry-pick Merges ==
  [Note: This section is rather long, and should be considered more as  
reference material than an introduction, as it aims to set out all the  
possible cases.]
@@ -287, +282 @@

  If we pick base A1:
  
   * Candidate changes are { A2 }.
-  * Target natural history is { B1,B2 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B2 }; target mergeinfo is { A1 }.
   * Notice candidate A2 can be skipped because it represents a logical change 
(B1) that is already in the target branch's natural history.
   * Skip A2 from the source ranges.
   * Update the mergeinfo on B.  (See "Recording Mergeinfo for Skipped 
Changes".)
@@ -296, +291 @@

  If we pick base B1:
  
   * Candidate changes are { B1:A2 }.
-  * Target natural history is { B1,B2 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B2 }; target mergeinfo is { A1 }.
   * Notice candidate B1:A2 can be skipped because it represents a logical 
change (A1) that is already recorded as merged into the target branch.
   * Skip B1:A2 from the source ranges.
   * Update the mergeinfo on B.  (See "Recording Mergeinfo for Skipped 
Changes".)
@@ -312, +307 @@

  If A1 were picked as base:
  
   * Candidate changes are { A2, A3 }.
-  * Target natural history is { B1,B3 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B3 }; target mergeinfo is { A1 }.
   * Notice candidate A3 can be skipped because it represents B1, as before.
   * Merge just A2 to B.
   * Update the mergeinfo on B.  (See "Recording Mergeinfo for Skipped 
Changes".)
@@ -321, +316 @@

  If B1 were picked as base:
  
   * Candidate changes are { B1:A3 }.
-  * Target natural history is { B1,B2 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B2 }; target mergeinfo is { A1 }.
   * Notice candidate B1:A3 represents logical changes { A1, A2 }.  A1 is 
already on B; A2 isn't.  Therefore we can neither merge nor skip this change.
   * Bail out, telling the user there's a problem.
  
@@ -339, +334 @@

  If A1 were picked as base:
  
   * Candidate changes are { A2, A3 }.
-  * Target natural history is { B1,B2 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B2, B3 }; target mergeinfo is { A1 }.
   * Notice candidate A3 can be skipped because it represents B1, as before.
   * Merge just A2 to B.
  
  If B1 were picked as base:
  
   * Candidate changes are { B1:A3 }.
-  * Target natural history is { B1,B2 }; target mergeinfo is { A1 }.
+  * Target natural history is { B1, B2, B3 }; target mergeinfo is { A1 }.
   * Notice candidate B1:A3 represents logical changes { A1, A2 }.  A1 is 
already on B; A2 isn't.  Therefore we can neither merge nor skip this change.
   * Bail out, telling the user there's a problem.
  

Reply via email to