You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/02/07 00:29:02 UTC

svn commit: r1443275 - in /subversion/trunk/subversion: libsvn_client/merge.c tests/cmdline/merge_tree_conflict_tests.py

Author: rhuijben
Date: Wed Feb  6 23:29:02 2013
New Revision: 1443275

URL: http://svn.apache.org/viewvc?rev=1443275&view=rev
Log:
When merging a replacement, don't try the add part if the delete part failed
with a tree conflict. This resolves issue #4011.

* subversion/libsvn_client/merge.c
  (merge_file_opened,
   merge_dir_opened): Update action earlier to avoid recording edit on adds.
       Skip adds when the matching delete was a tree conflict.

* subversion/tests/cmdline/merge_tree_conflict_tests.py
  (merge_replace_on_del_fails): Remove XFail marker.

Modified:
    subversion/trunk/subversion/libsvn_client/merge.c
    subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1443275&r1=1443274&r2=1443275&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Feb  6 23:29:02 2013
@@ -1924,6 +1924,9 @@ merge_file_opened(void **new_file_baton,
       svn_boolean_t excluded;
       svn_depth_t parent_depth;
 
+      if (! right_source)
+        fb->tree_conflict_action = svn_wc_conflict_action_delete;
+
       {
         svn_wc_notify_state_t obstr_state;
 
@@ -2021,12 +2024,22 @@ merge_file_opened(void **new_file_baton,
           && contains_path(pdb->pending_deletes, local_abspath))
         {
           fb->add_is_replace = TRUE;
+          fb->tree_conflict_action = svn_wc_conflict_action_replace;
 
           apr_hash_set(pdb->pending_deletes, local_abspath,
                        APR_HASH_KEY_STRING, NULL);
         }
 
-      if (! (merge_b->dry_run && ((pdb && pdb->added) || fb->add_is_replace)))
+      if (contains_path(merge_b->tree_conflicted_abspaths, local_abspath))
+        {
+          *skip = TRUE;
+
+          /* ### TODO: Update the tree conflict to store that this is a replace */
+
+          return SVN_NO_ERROR;
+        }
+      else if (! (merge_b->dry_run
+                  && ((pdb && pdb->added) || fb->add_is_replace)))
         {
           svn_wc_notify_state_t obstr_state;
           svn_node_kind_t kind;
@@ -2641,6 +2654,9 @@ merge_dir_opened(void **new_dir_baton,
       svn_boolean_t excluded;
       svn_depth_t parent_depth;
 
+      if (! right_source)
+          db->tree_conflict_action = svn_wc_conflict_action_delete;
+
       /* Check for an obstructed or missing node on disk. */
       {
         svn_wc_notify_state_t obstr_state;
@@ -2782,12 +2798,23 @@ merge_dir_opened(void **new_dir_baton,
           && contains_path(pdb->pending_deletes, local_abspath))
         {
           db->add_is_replace = TRUE;
+          db->tree_conflict_action = svn_wc_conflict_action_replace;
 
           apr_hash_set(pdb->pending_deletes, local_abspath,
                        APR_HASH_KEY_STRING, NULL);
         }
 
-      if (! (merge_b->dry_run && ((pdb && pdb->added) || db->add_is_replace)))
+      if (contains_path(merge_b->tree_conflicted_abspaths, local_abspath))
+        {
+          *skip = TRUE;
+          *skip_children = TRUE;
+
+          /* ### TODO: Update the tree conflict to store that this is a replace */
+
+          return SVN_NO_ERROR;
+        }
+      else if (! (merge_b->dry_run
+                  && ((pdb && pdb->added) || db->add_is_replace)))
         {
           svn_wc_notify_state_t obstr_state;
           svn_node_kind_t kind;

Modified: subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1443275&r1=1443274&r2=1443275&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py Wed Feb  6 23:29:02 2013
@@ -1876,7 +1876,6 @@ def merge_replace_causes_tree_conflict2(
 # Test for issue #4011 'merge of replacement on local delete fails'
 @SkipUnless(server_has_mergeinfo)
 @Issue(4011)
-@XFail()
 def merge_replace_on_del_fails(sbox):
   "merge replace on local delete fails"