On Thu, Oct 20, 2011 at 02:02:48PM -0700, Douglas Wilson wrote:
>
>
> On Oct 20, 10:45 am, Stefan Sperling <s..._at_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
$
Received on 2011-10-21 11:24:12 CEST