On Mon, Jun 13, 2016 at 01:51:49PM -0000, s...@apache.org wrote: > Author: stsp > Date: Mon Jun 13 13:51:49 2016 > New Revision: 1748236 > > URL: http://svn.apache.org/viewvc?rev=1748236&view=rev > Log: > When merging an incoming file move, record this move in the working copy. > > This makes merged file moves appear as having been "replayed" on the local > branch, rather than as a delete and a copy from the merge source branch. > File content changes are preserved and may raise a text conflict if > applicable. > > * subversion/libsvn_client/conflicts.c > (resolve_incoming_move_file_text_merge): If the conflict was flagged by a > merge operation, run a meta-data only move instead of just a deletion. > > * subversion/tests/libsvn_client/conflicts-test.c > (test_option_merge_incoming_move_file_text_merge): Update test expectations. > > Modified: > subversion/trunk/subversion/libsvn_client/conflicts.c > subversion/trunk/subversion/tests/libsvn_client/conflicts-test.c Just to raise awareness:
As of this commit, interactive conflict resolution allows simple file moves to be merged between branches and boil down the text-conflicts. Example below. $ sh test-merge.sh + rm -rf test-merge + mkdir -p test-merge + mkdir -p test-merge/trunk + echo alpha + > test-merge/trunk/alpha + echo beta + > test-merge/trunk/beta + mkdir test-merge/trunk/gamma + echo delta + > test-merge/trunk/gamma/delta + mkdir test-merge/trunk/epsilon + echo zeta + > test-merge/trunk/epsilon/zeta + svnadmin create /tmp/test-merge/repos + svn import test-merge/trunk file:////tmp/test-merge/repos/trunk -m importing project tree Adding test-merge/trunk/alpha Adding test-merge/trunk/beta Adding test-merge/trunk/epsilon Adding test-merge/trunk/epsilon/zeta Adding test-merge/trunk/gamma Adding test-merge/trunk/gamma/delta Committing transaction... Committed revision 1. + svn copy file:////tmp/test-merge/repos/trunk file:////tmp/test-merge/repos/branch -m creating branch Committing transaction... Committed revision 2. + rm -rf test-merge/trunk + svn checkout file:////tmp/test-merge/repos/trunk test-merge/trunk A test-merge/trunk/alpha A test-merge/trunk/beta A test-merge/trunk/epsilon A test-merge/trunk/epsilon/zeta A test-merge/trunk/gamma A test-merge/trunk/gamma/delta Checked out revision 2. + svn checkout file:////tmp/test-merge/repos/branch test-merge/branch A test-merge/branch/alpha A test-merge/branch/beta A test-merge/branch/epsilon A test-merge/branch/epsilon/zeta A test-merge/branch/gamma A test-merge/branch/gamma/delta Checked out revision 2. + svn mv test-merge/trunk/alpha test-merge/trunk/alpha-renamed A test-merge/trunk/alpha-renamed D test-merge/trunk/alpha + svn ci -m move alpha to alpha-renamed test-merge/trunk Deleting test-merge/trunk/alpha Adding test-merge/trunk/alpha-renamed Committing transaction... Committed revision 3. + echo foo + > test-merge/branch/alpha + svn ci -m edit alpha on the branch test-merge/branch Sending test-merge/branch/alpha Transmitting file data .done Committing transaction... Committed revision 4. + echo bar + > test-merge/trunk/alpha-renamed + svn ci -m edit alpha-renamed on trunk test-merge/trunk Sending test-merge/trunk/alpha-renamed Transmitting file data .done Committing transaction... Committed revision 5. + svn up test-merge/branch Updating 'test-merge/branch': At revision 5. + svn merge ^/trunk test-merge/branch --- Merging r2 through r5 into 'test-merge/branch': C test-merge/branch/alpha A test-merge/branch/alpha-renamed --- Recording mergeinfo for merge of r2 through r5 into 'test-merge/branch': U test-merge/branch Summary of conflicts: Tree conflicts: 1 Tree conflict on 'test-merge/branch/alpha': File merged from '^/trunk/alpha@1' to '^/trunk/alpha@5' was moved to '^/trunk/alpha-renamed' by stsp in r3. A file which differs from the corresponding file on the merge source branch was found in the working copy. Select: (p) postpone, (r) accept current working copy state, (i) ignore incoming deletion, (a) accept incoming deletion, (m) follow incoming move and merge, (q) quit resolution, (h) help: m C test-merge/branch/alpha-renamed Tree conflict at 'test-merge/branch/alpha' marked as resolved. Summary of conflicts: Text conflicts: 1 remaining (and 0 already resolved) Tree conflicts: 0 remaining (and 1 already resolved) + svn resolve test-merge/branch Merge conflict discovered in file 'test-merge/branch/alpha-renamed'. Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, (s) show all options: m Merging 'test-merge/branch/alpha-renamed'. Conflicting section found during merge: (1) their version (at line 1) |(2) your version (at line 1) --------------------------------------+-------------------------------------- foo |bar --------------------------------------+-------------------------------------- Select: (1) use their version, (2) use your version, (12) their version first, then yours, (21) your version first, then theirs, (e1) edit their version and use the result, (e2) edit your version and use the result, (eb) edit both versions and use the result, (p) postpone this conflicting section leaving conflict markers, (a) abort file merge and return to main menu: 12 Merge of 'test-merge/branch/alpha-renamed' completed. Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, (r) mark resolved, (s) show all options: r Merge conflicts in 'test-merge/branch/alpha-renamed' marked as resolved. + svn ci -m merge trunk to branch test-merge/branch Sending test-merge/branch Deleting test-merge/branch/alpha Adding test-merge/branch/alpha-renamed Transmitting file data .done Committing transaction... Committed revision 6. + svn up test-merge/trunk Updating 'test-merge/trunk': At revision 6. + svn merge ^/branch test-merge/trunk --- Merging differences between repository URLs into 'test-merge/trunk': U test-merge/trunk/alpha-renamed --- Recording mergeinfo for merge between repository URLs into 'test-merge/trunk': U test-merge/trunk + svn ci -m reintegrate branch to trunk test-merge/trunk Sending test-merge/trunk Sending test-merge/trunk/alpha-renamed Transmitting file data .done Committing transaction... Committed revision 7. + svn log -v --diff file:////tmp/test-merge/repos/ ------------------------------------------------------------------------ r7 | stsp | 2016-06-13 16:06:34 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: M /trunk M /trunk/alpha-renamed reintegrate branch to trunk Index: trunk/alpha-renamed =================================================================== --- trunk/alpha-renamed (revision 6) +++ trunk/alpha-renamed (revision 7) @@ -1 +1,2 @@ +foo bar Index: trunk =================================================================== --- trunk (revision 6) +++ trunk (revision 7) Property changes on: trunk ___________________________________________________________________ Added: svn:mergeinfo ## -0,0 +0,1 ## Merged /branch:r2-6 ------------------------------------------------------------------------ r6 | stsp | 2016-06-13 16:06:33 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: M /branch D /branch/alpha A /branch/alpha-renamed (from /branch/alpha:5) merge trunk to branch Index: branch/alpha (deleted) =================================================================== Index: branch/alpha-renamed =================================================================== --- branch/alpha-renamed (nonexistent) +++ branch/alpha-renamed (revision 6) @@ -0,0 +1,2 @@ +foo +bar Index: branch =================================================================== --- branch (revision 5) +++ branch (revision 6) Property changes on: branch ___________________________________________________________________ Added: svn:mergeinfo ## -0,0 +0,1 ## Merged /trunk:r2-5 ------------------------------------------------------------------------ r5 | stsp | 2016-06-13 16:06:28 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: M /trunk/alpha-renamed edit alpha-renamed on trunk Index: trunk/alpha-renamed =================================================================== --- trunk/alpha-renamed (revision 4) +++ trunk/alpha-renamed (revision 5) @@ -1 +1 @@ -alpha +bar ------------------------------------------------------------------------ r4 | stsp | 2016-06-13 16:06:28 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: M /branch/alpha edit alpha on the branch Index: branch/alpha =================================================================== --- branch/alpha (revision 3) +++ branch/alpha (revision 4) @@ -1 +1 @@ -alpha +foo ------------------------------------------------------------------------ r3 | stsp | 2016-06-13 16:06:28 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: D /trunk/alpha A /trunk/alpha-renamed (from /trunk/alpha:2) move alpha to alpha-renamed Index: trunk/alpha (deleted) =================================================================== Index: trunk/alpha-renamed =================================================================== --- trunk/alpha-renamed (nonexistent) +++ trunk/alpha-renamed (revision 3) @@ -0,0 +1 @@ +alpha ------------------------------------------------------------------------ r2 | stsp | 2016-06-13 16:06:27 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: A /branch (from /trunk:1) creating branch Index: branch/alpha =================================================================== --- branch/alpha (nonexistent) +++ branch/alpha (revision 2) @@ -0,0 +1 @@ +alpha Index: branch/beta =================================================================== --- branch/beta (nonexistent) +++ branch/beta (revision 2) @@ -0,0 +1 @@ +beta Index: branch/epsilon/zeta =================================================================== --- branch/epsilon/zeta (nonexistent) +++ branch/epsilon/zeta (revision 2) @@ -0,0 +1 @@ +zeta Index: branch/gamma/delta =================================================================== --- branch/gamma/delta (nonexistent) +++ branch/gamma/delta (revision 2) @@ -0,0 +1 @@ +delta ------------------------------------------------------------------------ r1 | stsp | 2016-06-13 16:06:27 +0200 (Mon, 13 Jun 2016) | 1 line Changed paths: A /trunk A /trunk/alpha A /trunk/beta A /trunk/epsilon A /trunk/epsilon/zeta A /trunk/gamma A /trunk/gamma/delta importing project tree Index: trunk/alpha =================================================================== --- trunk/alpha (nonexistent) +++ trunk/alpha (revision 1) @@ -0,0 +1 @@ +alpha Index: trunk/beta =================================================================== --- trunk/beta (nonexistent) +++ trunk/beta (revision 1) @@ -0,0 +1 @@ +beta Index: trunk/epsilon/zeta =================================================================== --- trunk/epsilon/zeta (nonexistent) +++ trunk/epsilon/zeta (revision 1) @@ -0,0 +1 @@ +zeta Index: trunk/gamma/delta =================================================================== --- trunk/gamma/delta (nonexistent) +++ trunk/gamma/delta (revision 1) @@ -0,0 +1 @@ +delta ------------------------------------------------------------------------ $