You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/01/17 16:11:52 UTC

svn commit: r1434709 - in /subversion/trunk/subversion: libsvn_wc/conflicts.c tests/cmdline/update_tests.py

Author: stsp
Date: Thu Jan 17 15:11:52 2013
New Revision: 1434709

URL: http://svn.apache.org/viewvc?rev=1434709&view=rev
Log:
Allow 'svn resolve' to break a move by reverting the delete-half of the move,
if the user chooses --accept=theirs-conflict at the conflict prompt, and only
if the delete-half of the move is still deleted (i.e. has not been replaced).

* subversion/libsvn_wc/conflicts.c
  (conflict_status_walker_baton): Add wc_ctx. This makes the 'db' member
   of this baton redundant, but do not remove the 'db' member right now
   to avoid lots of code churn.
  (conflict_status_walker): If the user picked 'theirs-conflict' to resolve
   a tree conflict involving a local move, and the delete-half of the move
   is still deleted, break the move by reverting the delete-half.
   This requires a wc context in order to lock the parent of the delete-half
   of the move. The wc context is obtained from the status walker baton. 
  (svn_wc__resolve_conflicts): Put the wc_ctx into the status walker baton.

* subversion/tests/cmdline/update_tests.py
  (break_moved_dir_edited_leaf_del): Remove XFAIL marker.

Modified:
    subversion/trunk/subversion/libsvn_wc/conflicts.c
    subversion/trunk/subversion/tests/cmdline/update_tests.py

Modified: subversion/trunk/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/conflicts.c?rev=1434709&r1=1434708&r2=1434709&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_wc/conflicts.c Thu Jan 17 15:11:52 2013
@@ -2557,6 +2557,7 @@ svn_wc__resolve_text_conflict(svn_wc__db
 /* Baton for conflict_status_walker */
 struct conflict_status_walker_baton
 {
+  svn_wc_context_t *wc_ctx;
   svn_wc__db_t *db;
   svn_boolean_t resolve_text;
   const char *resolve_prop;
@@ -2646,7 +2647,29 @@ conflict_status_walker(void *baton,
                             scratch_pool, scratch_pool));
                  else if (my_choice == svn_wc_conflict_choose_theirs_conflict)
                   {
-                    /* ### TODO break move */
+                    switch (status->node_status)
+                      {
+                        case svn_wc_status_deleted:
+                          /* Break the move by reverting the deleted half of
+                           * the move, keeping the copied-half as a copy.
+                           * Reverting a node requires write lock on parent. */
+                          SVN_WC__CALL_WITH_WRITE_LOCK(
+                            svn_wc__revert_internal(cswb->db, local_abspath,
+                                                    svn_depth_infinity,
+                                                    FALSE, 
+                                                    cswb->cancel_func,
+                                                    cswb->cancel_baton,
+                                                    cswb->notify_func,
+                                                    cswb->notify_baton,
+                                                    scratch_pool),
+                            cswb->wc_ctx,
+                            svn_dirent_dirname(local_abspath, scratch_pool),
+                            FALSE, scratch_pool);
+                          break;
+                        default:
+                          /* ### TODO other node_status cases */
+                          break;
+                      }
                   }
               }
             else if (my_choice != svn_wc_conflict_choose_merged)
@@ -2790,6 +2813,7 @@ svn_wc__resolve_conflicts(svn_wc_context
   else if (depth == svn_depth_unknown)
     depth = svn_depth_infinity;
 
+  cswb.wc_ctx = wc_ctx;
   cswb.db = wc_ctx->db;
   cswb.resolve_text = resolve_text;
   cswb.resolve_prop = resolve_prop;

Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=1434709&r1=1434708&r2=1434709&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Thu Jan 17 15:11:52 2013
@@ -6030,7 +6030,6 @@ def update_deleted(sbox):
                                         None, None, 1,
                                         sbox.ospath('A/B'))
 
-@XFail()
 @Issue(3144,3630)
 # Like update_moved_dir_edited_leaf_del, but with --accept=theirs-conflict
 def break_moved_dir_edited_leaf_del(sbox):