subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache subversion Wiki <>
Subject [Subversion Wiki] Update of "SymmetricMerge" by JulianFoad
Date Wed, 07 Mar 2012 16:49:44 GMT
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:

Symmetric merge as a (narrative) algorithm.

  End of longest continuous prefix of source branch is A1, so that's the mergeinfo base to
- [TODO] Express it as an algorithm.
+ To express it as an algorithm:
+  1. Find the latest revision of A synced to B and the latest revision of B synced to A.
+   * The latest revision of A synced to B doesn't mean the last time a merge was performed,
but rather the youngest revision 'rA' on A at which all changes on A up to rA are now included
in B.
+   * We consider only direct A <-> B mergeinfo.  (Consideration of a merge graph extending
to other branches is future work.)
+  1. Choose a base.
+   * Choose the latest revision of A synced to B or the latest revision of B synced to A.
+   * Each candidate base is a common ancestor of the source and target, if ancestry means
following either the direct line of descent or the arrows that indicate complete merges.
+   * Choose the 'more recent' one in some sense -- be it time of commit, or number of changes
since then, or some other measure.
+   * [TODO] In what cases do the selection methods give different results? Only after a criss-cross
+  1. Identify cherry-picks.
+   * Find changes along the source side of the merge that are already 'in' the target.
+   * Look for mergeinfo in both directions (forward: easy; backward: harder).
+   * If a change is partly in the target, consider reporting it and aborting.
+  1. Break into 3-way merges, skipping the cherry-picks.
+  1. Mergeinfo addition.
+   * The first 3-way merge might have its base on the target branch.
+   * If base is on source branch, a normal mergeinfo addition.
+   * If base is on target branch, mergeinfo += "all source revs up to N".
  == Symmetric Merge with Cherry-Picks ==
  Next,  we need to account for cherry-picks.  If there are cherry-picks from  the source
[...], we look for the end of the first gap.  [TODO...]

View raw message