On Thu, Oct 20, 2011 at 02:02:48PM -0700, Douglas Wilson wrote: > > > On Oct 20, 10:45 am, Stefan Sperling <s...@elego.de> wrote: > > > > Which version of SVN are you running when you hit the problem > > you described in your first post? 1.6 or 1.7? > > Subversion 1.7.0
Ok, in that case what you are seeing is related to this change in mergeinfo recording behaviour: http://subversion.apache.org/docs/release-notes/1.7.html#svn-merge-sparse-no-tree-conflict Quote: Merges into shallow working copies used to cause tree conflicts on nodes which were affected by the merge but not present in the working copy. In 1.7, no tree conflict is flagged. Instead, non-inheritable subtree mergeinfo is created on the parents of missing nodes, so that later merges into working copies that are not sparse will pick up any missing changes for those nodes. The case you described is similar to the case where 1.6 used to flag a tree conflict. But it only flagged a tree conflict if the incoming delta of the merge applies changes to a missing (shallow) subtree. It sounds like in your case, the incoming delta does not touch the shallow subtree, so svn 1.6 won't flag a conflict, but svn 1.7 for some reason it creates non-inheritable mergeinfo on the parent anyway -- which would be wrong, since the missing subtree isn't affected by the merge. Does that make sense? However, I cannot reproduce this problem in quick manual testing. In my testing, non-inheritable mergeinfo is only created if the incoming change does modify the missing subtree (see below). Are you really sure that your merge does not modify the missing subtree? Because if it does, there is no problem at all, and everything is working as designed. My simple test, where a merge wants to modify the file 'epsilon/zeta', and we perform the merge once the file missing due to a shallow subtree 'epsilon', and once with the file present but with a different shallow subtree ('gamma') in the working copy. $ cd svn-sandbox/trunk $ echo foo >> epsilon/zeta $ svn ci -mm Sending epsilon/zeta Transmitting file data . Committed revision 3. $ cd ../branch/ $ svn up -set-depth=empty epsilon/ D epsilon/zeta Updating 'epsilon': Updated to revision 3. $ svn st $ svn up Updating '.': At revision 3. $ svn merge ^/trunk Skipped missing target: 'epsilon/zeta' --- Recording mergeinfo for merge of r2 through r3 into '.': U . --- Recording mergeinfo for merge of r2 through r3 into 'epsilon': U epsilon Summary of conflicts: Skipped paths: 1 $ svn st M . M epsilon $ svn pl -v epsilon Properties on 'epsilon': svn:mergeinfo /trunk/epsilon:2-3* $ svn diff Index: . =================================================================== --- . (revision 3) +++ . (working copy) Property changes on: . ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk:r2-3 Index: epsilon =================================================================== --- epsilon (revision 3) +++ epsilon (working copy) Property changes on: epsilon ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/epsilon:r2-3* $ svn revert -R . Reverted '.' Reverted 'epsilon' $ svn up --set-depth=infinity epsilon Updating 'epsilon': A epsilon/zeta Updated to revision 3. $ svn up --set-depth empty gamma D gamma/delta Updating 'gamma': Updated to revision 3. $ svn merge ^/trunk --- Merging r2 through r3 into '.': U epsilon/zeta --- Recording mergeinfo for merge of r2 through r3 into '.': U . $ svn st M . M epsilon/zeta $ svn diff Index: . =================================================================== --- . (revision 3) +++ . (working copy) Property changes on: . ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk:r2-3 Index: epsilon/zeta =================================================================== --- epsilon/zeta (revision 3) +++ epsilon/zeta (working copy) @@ -1 +1,2 @@ zeta +foo $