Author: rhuijben
Date: Thu Jan 15 18:08:24 2015
New Revision: 1652204
URL: http://svn.apache.org/r1652204
Log:
When resolving a tree conflict, use the depth as found in the tree conflict to
identify the move (layer) instead of guessing (and sometimes failing to guess
right). This resolves issue #4491.
* subversion/libsvn_wc/conflicts.c
(resolve_tree_conflict_on_node): Pass the src_op_root_abspath to the conflict
resolving helper functions.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_resolve_break_moved_away,
svn_wc__db_resolve_break_moved_away_children): Add src_op_root_abspath
argument.
* subversion/libsvn_wc/wc_db_update_move.c
(svn_wc__db_resolve_break_moved_away): Add src_op_root_abspath and use this
to calulate the depth to pass to the internal function.
(svn_wc__db_resolve_break_moved_away_children): Add similar argument, but
don't use it yet.
* subversion/tests/libsvn_wc/op-depth-test.c
(test_funcs): Remove XFail marker from break_move_in_delete test.
Modified:
subversion/trunk/subversion/libsvn_wc/conflicts.c
subversion/trunk/subversion/libsvn_wc/wc_db.h
subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c
subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1652204&r1=1652203&r2=1652204&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Thu Jan 15 18:08:24 2015
@@ -2694,6 +2694,7 @@ resolve_tree_conflict_on_node(svn_boolea
svn_skel_t *conflicts;
svn_wc_operation_t operation;
svn_boolean_t tree_conflicted;
+ const char *src_op_root_abspath;
*did_resolve = FALSE;
@@ -2708,7 +2709,8 @@ resolve_tree_conflict_on_node(svn_boolea
if (!tree_conflicted)
return SVN_NO_ERROR;
- SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action, NULL,
+ SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action,
+ &src_op_root_abspath,
db, local_abspath,
conflicts,
scratch_pool, scratch_pool));
@@ -2725,7 +2727,8 @@ resolve_tree_conflict_on_node(svn_boolea
/* Break moves for any children moved out of this directory,
* and leave this directory deleted. */
SVN_ERR(svn_wc__db_resolve_break_moved_away_children(
- db, local_abspath, notify_func, notify_baton,
+ db, local_abspath, src_op_root_abspath,
+ notify_func, notify_baton,
scratch_pool));
*did_resolve = TRUE;
}
@@ -2807,6 +2810,7 @@ resolve_tree_conflict_on_node(svn_boolea
### involving the move until
### svn_wc__db_op_mark_resolved. */
SVN_ERR(svn_wc__db_resolve_break_moved_away(db, local_abspath,
+ src_op_root_abspath,
notify_func,
notify_baton,
scratch_pool));
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1652204&r1=1652203&r2=1652204&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Thu Jan 15 18:08:24 2015
@@ -3479,6 +3479,7 @@ svn_wc__db_resolve_delete_raise_moved_aw
svn_error_t *
svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
const char *local_abspath,
+ const char *src_op_root_abspath,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool);
@@ -3491,6 +3492,7 @@ svn_wc__db_resolve_break_moved_away(svn_
svn_error_t *
svn_wc__db_resolve_break_moved_away_children(svn_wc__db_t *db,
const char *local_abspath,
+ const char *src_op_root_abspath,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool);
Modified: subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c?rev=1652204&r1=1652203&r2=1652204&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_update_move.c Thu Jan 15
18:08:24 2015
@@ -2614,21 +2614,26 @@ break_moved_away_children_internal(svn_w
svn_error_t *
svn_wc__db_resolve_break_moved_away(svn_wc__db_t *db,
const char *local_abspath,
+ const char *src_op_root_abspath,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
+ const char *src_relpath;
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
db, local_abspath,
scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+ src_relpath = svn_dirent_skip_ancestor(wcroot->abspath, src_op_root_abspath);
+ SVN_ERR_ASSERT(src_relpath != NULL);
+
SVN_WC__DB_WITH_TXN(
svn_wc__db_resolve_break_moved_away_internal(wcroot, local_relpath,
- relpath_depth(local_relpath),
+ relpath_depth(src_relpath),
scratch_pool),
wcroot);
@@ -2654,6 +2659,7 @@ svn_wc__db_resolve_break_moved_away(svn_
svn_error_t *
svn_wc__db_resolve_break_moved_away_children(svn_wc__db_t *db,
const char *local_abspath,
+ const char *src_op_root_abspath,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1652204&r1=1652203&r2=1652204&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Thu Jan 15
18:08:24 2015
@@ -10122,7 +10122,7 @@ static struct svn_test_descriptor_t test
"movedhere extract retract"),
SVN_TEST_OPTS_PASS(repo_wc_copy,
"repo_wc_copy"),
- SVN_TEST_OPTS_XFAIL(break_move_in_delete,
+ SVN_TEST_OPTS_PASS(break_move_in_delete,
"break move in delete (issue 4491)"),
SVN_TEST_OPTS_PASS(nested_move_delete,
"nested move delete"),