You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2012/04/24 12:50:24 UTC

svn commit: r1329635 - /subversion/trunk/notes/merge-tracking/func-spec.html

Author: julianfoad
Date: Tue Apr 24 10:50:23 2012
New Revision: 1329635

URL: http://svn.apache.org/viewvc?rev=1329635&view=rev
Log:
* notes/merge-tracking/func-spec.html
  (switched-paths): Add subsections on the behaviour of deleting a switched
    subtree, and on the rationale, following the email thread "Symmetric
    Merge -- switched subtrees [was:...]", 2012-04-20,
    <http://svn.haxx.se/dev/archive-2012-04/0399.shtml>.

Modified:
    subversion/trunk/notes/merge-tracking/func-spec.html

Modified: subversion/trunk/notes/merge-tracking/func-spec.html
URL: http://svn.apache.org/viewvc/subversion/trunk/notes/merge-tracking/func-spec.html?rev=1329635&r1=1329634&r2=1329635&view=diff
==============================================================================
--- subversion/trunk/notes/merge-tracking/func-spec.html (original)
+++ subversion/trunk/notes/merge-tracking/func-spec.html Tue Apr 24 10:50:23 2012
@@ -239,6 +239,50 @@ SSRP - Switched subtree's repository par
 
 </ul>
 
+<h3>Delete</h3>
+
+<p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=4163"
+  >Issue #4163 "merged deletion of switched subtrees records non-inheritable
+  mergeinfo"</a>: If a merge deletes the path SS, the desired behaviour
+  is currently undefined and the actual behaviour is that a commit will
+  delete <strong>both</strong> SS (from SSRP) and SS@BASE (from SSP).</p>
+
+<h3>Rationale</h3>
+
+<p>Why does merging work this way with switched subtrees?</p>
+
+<p>If a subtree (SS) is switched, that means the user has chosen for
+  the time being to work with a substitute for the original subtree
+  (SS@BASE), knowing that any modifications made in SS can be
+  committed only to the repository location of SS and the original
+  subtree SS@BASE remains hidden and unaffected.</p>
+
+<p>The general semantics of a merge is to apply local modifications
+  to the working copy and record the merge as having been applied
+  to the tree that is represented by the working copy.</p>
+
+<p>Merge tracking should ensure that the subtree of the merge that
+  goes into SS is recorded as being applied to SS, while the
+  subtree SS@BASE should be recorded as not having received that
+  merge.</p>
+
+<p>Since the working copy represents parts of two different branches,
+  two parts of the merge are thus applied to the two different
+  branches, and recorded as such when the user commits the result.</p>
+
+<p>If the user is doing a merge that may affect SS, it is reasonable
+  to assume that SS is an alternative variant of SS@BASE rather than
+  some totally unrelated item.  So, in terms of Subversion's loose
+  branching semantics, SS is a 'branch' of SS@BASE.  If the user
+  chooses to merge when the assumption is false and SS doesn't have
+  a sensible branching relationship with SS@BASE, the result will be
+  nonsensical or, in concrete terms, there will be merge conflicts.</p>
+
+<p>Note:  Many typical branching policies would forbid committing to
+  two branches at once, let alone committing merges to two branches
+  at once.  However, the user may have reasons for doing this merge
+  without intending to commit the result as-is.</p>
+
 </div>  <!-- switched-paths -->
 
 <div class="h2" id="prop-change">