Checkout
stsp
committed
on 14 Feb
Add resolver support for moved-file vs moved-file upon update.

The resolver now supports move vs move tree conflicts for files after
an upd… Show more
Add resolver support for moved-file vs moved-file upon update.

The resolver now supports move vs move tree conflicts for files after

an update operation.

Two new resolution operations are available:

 (m)  - override incoming move and merge incoming changes from 'alpha-moved'

        to 'alpha-also-moved'

 (M)  - accept incoming move and merge local changes from 'alpha-also-moved'

        to 'alpha-moved'

Where the file was originally called 'alpha', was renamed to 'alpha-moved'

in the repository, and renamed to 'alpha-also-moved' in the working copy.

Because the local move is broken during the update operation when the

delete-half of the move is updated, the resolver only has the copied half

move available in the working copy. To find the local move destination the

resolver queries the working copy database for nodes which are copies of

the conflict victim's repository path. This can of course lead to ambiguous

results in case a node is first copied and then moved, in which case the

resolver offers the user a choice of local move targets in the usual way.

* subversion/include/private/svn_wc_private.h

 (svn_wc__find_copies_of_repos_path): Declare.

* subversion/libsvn_client/conflicts.c

 (conflict_tree_update_local_moved_away_details): New conflict details struct.

 (resolve_both_moved_file_update_keep_local_move,

  resolve_both_moved_file_update_keep_incoming_move): New resolution handlers.

 (conflict_tree_get_details_update_local_moved_away): New details fetcher

  which locates copied nodes corresponding to the local move.

 (get_both_moved_file_paths): New helper function.

 (conflict_tree_get_description_update_both_moved_file_merge,

  conflict_tree_get_description_update_both_moved_file_move_merge): New

  functions which describe incoming move vs local move conflicts flagged

  during updates of files.

 (configure_option_both_moved_file_merge): Hook up the new options.

 (svn_client_conflict_option_get_moved_to_abspath_candidates2,

  svn_client_conflict_option_set_moved_to_abspath2,

  conflict_type_specific_setup): Support the newly added conflict options.

* subversion/libsvn_wc/node.c

 (svn_wc__find_copies_of_repos_path): New.

* subversion/libsvn_wc/wc-queries.sql

 (STMT_SELECT_COPIES_OF_REPOS_RELPATH): New query which locates copies of a

  particular repository relpath with a particular node kind in working copy.

* subversion/libsvn_wc/wc_db.c

 (svn_wc__db_find_copies_of_repos_path): New wc_db API to execute above query.

* subversion/libsvn_wc/wc_db.h

 (svn_wc__db_find_copies_of_repos_path): Declare.

* subversion/tests/libsvn_client/conflicts-test.c

 (create_file_move_vs_file_move_update_conflict): New helper function.

 (test_update_file_move_vs_file_move,

  test_update_file_move_vs_file_move_accept_move, test_funcs): New tests

   which exercise both of the newly added conflict resolution options.

Show less