Issue #3469 is about having merge pull in the addition of A/mu when A/ is an external. (File modifications work and raise a tree conflict.)
The following patch attempts to address it by having merge_file_added() skip the addition of files under a directory external. Thoughts or +1's? Daniel [[[ Resolve issue #3469 (tree conflict under a directory external). * subversion/libsvn_client/merge.c (merge_file_added): Skip files that belong to externals or to disjoint working copies. TODO: wrap the comment TODO: remove @XFail decorator (from tree_conflict_tests.py 22) ]]] [[[ Index: subversion/libsvn_client/merge.c =================================================================== --- subversion/libsvn_client/merge.c (revision 1085436) +++ subversion/libsvn_client/merge.c (working copy) @@ -1531,6 +1531,10 @@ merge_file_added(const char *local_dir_abspath, int i; apr_hash_t *file_props; + SVN_DBG(("merge_file_added(): local_dir_abspath='%s'\n", local_dir_abspath)); + SVN_DBG(("merge_file_added(): mine_abspath='%s'\n", mine_abspath)); + SVN_DBG(("merge_file_added(): target_abspath='%s'\n", merge_b->target_abspath)); + SVN_ERR_ASSERT(svn_dirent_is_absolute(mine_abspath)); /* Easy out: We are only applying mergeinfo differences. */ @@ -1555,6 +1559,21 @@ merge_file_added(const char *local_dir_abspath, if (tree_conflicted) *tree_conflicted = FALSE; + /* Easy out: not the same working copy. (So, a disjoint working copy or an external.) */ + { + const char *mine_wcroot_abspath; + const char *target_wcroot_abspath; + SVN_ERR(svn_wc_get_wc_root(&mine_wcroot_abspath, merge_b->ctx->wc_ctx, + mine_abspath, scratch_pool, scratch_pool)); + SVN_ERR(svn_wc_get_wc_root(&target_wcroot_abspath, merge_b->ctx->wc_ctx, + merge_b->target_abspath, scratch_pool, scratch_pool)); + if (strcmp(mine_wcroot_abspath, target_wcroot_abspath)) + { + *content_state = svn_wc_notify_state_obstructed; + return SVN_NO_ERROR; + } + } + /* Apply the prop changes to a new hash table. */ file_props = apr_hash_copy(subpool, original_props); for (i = 0; i < prop_changes->nelts; ++i) ]]]