diff options
Diffstat (limited to 'subversion/libsvn_wc/wc_db_update_move.c')
-rw-r--r-- | subversion/libsvn_wc/wc_db_update_move.c | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/subversion/libsvn_wc/wc_db_update_move.c b/subversion/libsvn_wc/wc_db_update_move.c index a8cce76..7f4f853 100644 --- a/subversion/libsvn_wc/wc_db_update_move.c +++ b/subversion/libsvn_wc/wc_db_update_move.c @@ -2284,30 +2284,34 @@ svn_wc__db_bump_moved_away(svn_wc__db_wcroot_t *wcroot, svn_wc__db_t *db, apr_pool_t *scratch_pool) { - const char *dummy1, *move_dst_op_root_relpath; - const char *move_src_root_relpath, *move_src_op_root_relpath; apr_hash_t *src_done; SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_CREATE_UPDATE_MOVE_LIST)); - SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy1, &move_dst_op_root_relpath, - &move_src_root_relpath, - &move_src_op_root_relpath, 0, - wcroot, local_relpath, - scratch_pool, scratch_pool)); - - if (move_src_root_relpath) + if (local_relpath[0] != '\0') { - if (strcmp(move_src_root_relpath, local_relpath)) + const char *dummy1, *move_dst_op_root_relpath; + const char *move_src_root_relpath, *move_src_op_root_relpath; + + /* Is the root of the update moved away? (Impossible for the wcroot) */ + SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy1, &move_dst_op_root_relpath, + &move_src_root_relpath, + &move_src_op_root_relpath, 0, + wcroot, local_relpath, + scratch_pool, scratch_pool)); + + if (move_src_root_relpath) { - SVN_ERR(bump_mark_tree_conflict(wcroot, move_src_root_relpath, - move_src_op_root_relpath, - move_dst_op_root_relpath, - db, scratch_pool)); - return SVN_NO_ERROR; + if (strcmp(move_src_root_relpath, local_relpath)) + { + SVN_ERR(bump_mark_tree_conflict(wcroot, move_src_root_relpath, + move_src_op_root_relpath, + move_dst_op_root_relpath, + db, scratch_pool)); + return SVN_NO_ERROR; + } } - } src_done = apr_hash_make(scratch_pool); @@ -2440,17 +2444,23 @@ break_move(svn_wc__db_wcroot_t *wcroot, svn_error_t * svn_wc__db_resolve_break_moved_away_internal(svn_wc__db_wcroot_t *wcroot, const char *local_relpath, + int op_depth, apr_pool_t *scratch_pool) { const char *dummy1, *move_dst_op_root_relpath; const char *dummy2, *move_src_op_root_relpath; + /* We want to include the passed op-depth, but the function does a > check */ SVN_ERR(svn_wc__db_op_depth_moved_to(&dummy1, &move_dst_op_root_relpath, &dummy2, &move_src_op_root_relpath, - relpath_depth(local_relpath) - 1, + op_depth - 1, wcroot, local_relpath, scratch_pool, scratch_pool)); + + SVN_ERR_ASSERT(move_src_op_root_relpath != NULL + && move_dst_op_root_relpath != NULL); + SVN_ERR(break_move(wcroot, local_relpath, relpath_depth(move_src_op_root_relpath), move_dst_op_root_relpath, @@ -2519,6 +2529,7 @@ svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db, SVN_WC__DB_WITH_TXN( svn_wc__db_resolve_break_moved_away_internal(wcroot, local_relpath, + relpath_depth(local_relpath), scratch_pool), wcroot); |