On Mon, Jan 30, 2012 at 10:37:51PM +0100, Johan Corveleyn wrote:
> On Mon, Jan 30, 2012 at 10:19 PM, Stefan Sperling <s...@elego.de> wrote:
> > But you cannot use the last-synced revision as left anchor either:
> >  svn co b
> >  svn merge b@r4 a@r6 b
> > Because applying this delta reverts b@r5 (this change appears reversed
> > in the diff between b@r4 and a@r6 since it isn't present on branch a).
> 
> No, I don't think it does. The change b@r5 doesn't appear in this
> diff, neither forward nor reversed. Say b@r5 adds a line in file b/X,
> I see no reason this change (forward or reversed) would be part of the
> difference between b@r4 and a@r6.

Sorry, I made an error while transferring my experiment into an example.

The problem happens if a non-merge commit (b@r4) happens prior to
the first merge commit (b@r5), like this:

                 +b@r2---b@r4---b@r5--b@r6---b@r8--
       (branch) /               ^             ^ (merge 2)
               /                | (merge 1)   |
         --- a@r1---a@r3--------+-------a@r7--+-------

b@r4 appears reversed in 'svn diff b@5 a@7' -- not good
a@r3 appears in 'svn diff b@2 a@7' -- not good either, applied twice
But 'svn merge a@r5 a@r7' works fine.

Full transcript below.

+ rm -rf merge-test
+ mkdir -p merge-test
+ mkdir -p merge-test/a
+ echo alpha
+ > merge-test/a/alpha 
+ echo beta
+ > merge-test/a/beta 
+ svnadmin create /tmp/merge-test/repos
+ svn import merge-test/a file:////tmp/merge-test/repos/a -m importing project 
tree
Adding         merge-test/a/alpha
Adding         merge-test/a/beta

Committed revision 1.
+ svn copy file:////tmp/merge-test/repos/a file:////tmp/merge-test/repos/b -m 
creating b

Committed revision 2.
+ rm -rf merge-test/a
+ svn checkout file:////tmp/merge-test/repos/a merge-test/a
A    merge-test/a/alpha
A    merge-test/a/beta
Checked out revision 2.
+ svn checkout file:////tmp/merge-test/repos/b merge-test/b
A    merge-test/b/alpha
A    merge-test/b/beta
Checked out revision 2.
+ echo foo
+ >> merge-test/a/alpha 
+ svn commit merge-test/a -mm
Sending        merge-test/a/alpha
Transmitting file data .
Committed revision 3.
+ echo bar
+ >> merge-test/b/beta 
+ svn commit merge-test/b -mm
Sending        merge-test/b/beta
Transmitting file data .
Committed revision 4.
+ svn up merge-test/b
Updating 'merge-test/b':
At revision 4.
+ svn merge file:////tmp/merge-test/repos/b@2 file:////tmp/merge-test/repos/a@3 
merge-test/b
--- Merging differences between repository URLs into 'merge-test/b':
U    merge-test/b/alpha
--- Recording mergeinfo for merge between repository URLs into 'merge-test/b':
 U   merge-test/b
+ svn commit merge-test/b -mm
Sending        merge-test/b
Sending        merge-test/b/alpha
Transmitting file data .
Committed revision 5.
+ echo bar2
+ >> merge-test/b/beta 
+ svn commit merge-test/b -mm
Sending        merge-test/b/beta
Transmitting file data .
Committed revision 6.
+ echo foo2
+ >> merge-test/a/alpha 
+ svn commit merge-test/a -mm
Sending        merge-test/a/alpha
Transmitting file data .
Committed revision 7.
+ svn diff file:////tmp/merge-test/repos/b@2 file:////tmp/merge-test/repos/a@7
Index: alpha
===================================================================
--- alpha       (.../b) (revision 2)
+++ alpha       (.../a) (revision 7)
@@ -1 +1,3 @@
 alpha
+foo
+foo2
+ svn up merge-test/b
Updating 'merge-test/b':
At revision 7.
+ svn merge --accept=postpone file:////tmp/merge-test/repos/b@2 
file:////tmp/merge-test/repos/a@7 merge-test/b
--- Merging differences between repository URLs into 'merge-test/b':
C    merge-test/b/alpha
--- Recording mergeinfo for merge between repository URLs into 'merge-test/b':
 U   merge-test/b
Summary of conflicts:
  Text conflicts: 1
+ svn diff merge-test/b
Index: merge-test/b
===================================================================
--- merge-test/b        (revision 7)
+++ merge-test/b        (working copy)

Property changes on: merge-test/b
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /a:r4-7
Index: merge-test/b/alpha
===================================================================
--- merge-test/b/alpha  (revision 7)
+++ merge-test/b/alpha  (working copy)
@@ -1,2 +1,7 @@
 alpha
+<<<<<<< .working
 foo
+=======
+foo
+foo2
+>>>>>>> .merge-right.r7
+ svn revert -R merge-test/b
Reverted 'merge-test/b'
Reverted 'merge-test/b/alpha'
+ svn diff file:////tmp/merge-test/repos/b@5 file:////tmp/merge-test/repos/a@7
Index: alpha
===================================================================
--- alpha       (.../b) (revision 5)
+++ alpha       (.../a) (revision 7)
@@ -1,2 +1,3 @@
 alpha
 foo
+foo2
Index: beta
===================================================================
--- beta        (.../b) (revision 5)
+++ beta        (.../a) (revision 7)
@@ -1,2 +1 @@
 beta
-bar
Index: .
===================================================================
--- .   (.../b) (revision 5)
+++ .   (.../a) (revision 7)

Property changes on: .
___________________________________________________________________
Deleted: svn:mergeinfo
   Reverse-merged /a:r2-3
+ svn merge --accept=postpone file:////tmp/merge-test/repos/b@5 
file:////tmp/merge-test/repos/a@7 merge-test/b
--- Merging differences between repository URLs into 'merge-test/b':
U    merge-test/b/alpha
C    merge-test/b/beta
 U   merge-test/b
--- Recording mergeinfo for merge between repository URLs into 'merge-test/b':
 G   merge-test/b
Summary of conflicts:
  Text conflicts: 1
+ svn diff merge-test/b
Index: merge-test/b
===================================================================
--- merge-test/b        (revision 7)
+++ merge-test/b        (working copy)

Property changes on: merge-test/b
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /a:r4-7
Index: merge-test/b/alpha
===================================================================
--- merge-test/b/alpha  (revision 7)
+++ merge-test/b/alpha  (working copy)
@@ -1,2 +1,3 @@
 alpha
 foo
+foo2
Index: merge-test/b/beta
===================================================================
--- merge-test/b/beta   (revision 7)
+++ merge-test/b/beta   (working copy)
@@ -1,3 +1,6 @@
 beta
+<<<<<<< .working
 bar
 bar2
+=======
+>>>>>>> .merge-right.r7
+ svn revert -R merge-test/b
Reverted 'merge-test/b'
Reverted 'merge-test/b/alpha'
Reverted 'merge-test/b/beta'
+ svn merge file:////tmp/merge-test/repos/a@5 file:////tmp/merge-test/repos/a@7 
merge-test/b
--- Merging r6 through r7 into 'merge-test/b':
U    merge-test/b/alpha
--- Recording mergeinfo for merge of r6 through r7 into 'merge-test/b':
 U   merge-test/b
+ svn diff merge-test/b
Index: merge-test/b
===================================================================
--- merge-test/b        (revision 7)
+++ merge-test/b        (working copy)

Property changes on: merge-test/b
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /a:r6-7
Index: merge-test/b/alpha
===================================================================
--- merge-test/b/alpha  (revision 7)
+++ merge-test/b/alpha  (working copy)
@@ -1,2 +1,3 @@
 alpha
 foo
+foo2

Reply via email to