This is one of the issues blocking 1.8. I don't really understand the
merge behaviour.  Consider this test case: a file in a directory,
branch, modify the file on the branch:

svnadmin create repo
svn -mm import repo/format file://`pwd`/repo/A/B/f
svn -mm cp file://`pwd`/repo/A ^/A2
svnmucc -mm put repo/README.txt file://`pwd`/repo/A2/B/f

Now merge the change back to the original branch:

svn co file://`pwd`/repo/A wc
svn merge -c3 ^/A2 wc

that works and modifies wc/B/f and records the merge. Then reverse merge

svn merge -c-3 ^/A2 wc

and the change is undo leaving a pristine working copy.  That all
seems fine.

However a reverse merge alone does nothing (call this case A):

svn co file://`pwd`/repo/A wc
svn merge -c3 ^/A2 wc

The notifications say:

--- Recording mergeinfo for reverse merge of r3 into 'wc':
 U   wc
--- Eliding mergeinfo from 'wc':
 U   wc

and overall there are no changes in the working copy. I don't really
understand that but it's not new behaviour, 1.7 was the same.

Next consider merging the wrong URL:

svn co file://`pwd`/repo/A wc
svn merge -c3 ^/A2/B wc

that gives a tree-conflict on wc/f.  The cherry-pick merge doesn't check
ancestyr, gets a diff from the repository, and fails to apply it because
the paths don't match.  That seems OK.

Now try the reverse merge alone (call this case B):

svn co file://`pwd`/repo/A wc
svn merge -c-3 ^/A2/B wc

Again the notifications say:

--- Recording mergeinfo for reverse merge of r3 into 'wc':
 U   wc
--- Eliding mergeinfo from 'wc':
 U   wc

and overall there are no changes in the working copy.  If this merge
attempted to merge the change the tree-conflict would indicate to the
user that the wrong URL was used.

I'm not sure why cases A and B don't attempt to merge changes.  Can
anyone explain the behaviour?

-- 
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download

Reply via email to