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)
]]]

Reply via email to