You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2013/02/08 18:23:14 UTC

svn commit: r1444156 - in /subversion/trunk/subversion: libsvn_wc/wc-queries.sql libsvn_wc/wc_db.c tests/libsvn_wc/op-depth-test.c

Author: philip
Date: Fri Feb  8 17:23:13 2013
New Revision: 1444156

URL: http://svn.apache.org/r1444156
Log:
Make non-recursive revert on delete tree-conflicts raise move-edit
tree-conflicts on moves inside the delete.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_SELECT_GE_OP_DEPTH_CHILDREN): Only select actual-only rows from
   actual_node.

* subversion/libsvn_wc/wc_db.c
  (op_revert_txn): Pass db and abspath to conflict functions, raise
   move-edit conflicts if resolving a delete.
  (svn_wc__db_op_revert): Pass db.

* subversion/tests/libsvn_wc/op-depth-test.c
  (test_func): Mark move_in_delete PASS.

Modified:
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.c
    subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1444156&r1=1444155&r2=1444156&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Fri Feb  8 17:23:13 2013
@@ -279,13 +279,18 @@ SELECT local_relpath, kind FROM nodes
 WHERE wc_id = ?1 AND parent_relpath = ?2 AND op_depth = ?3
   AND (?3 != 0 OR file_external is NULL)
 
+/* Used by non-recursive revert to detect higher level children, and
+   actual-only rows that would be left orphans, if the revert
+   proceeded. */
 -- STMT_SELECT_GE_OP_DEPTH_CHILDREN
 SELECT 1 FROM nodes
 WHERE wc_id = ?1 AND parent_relpath = ?2
   AND (op_depth > ?3 OR (op_depth = ?3 AND presence != MAP_BASE_DELETED))
 UNION ALL
-SELECT 1 FROM ACTUAL_NODE
+SELECT 1 FROM ACTUAL_NODE a
 WHERE wc_id = ?1 AND parent_relpath = ?2
+  AND NOT EXISTS (SELECT 1 FROM nodes n
+                   WHERE wc_id = ?1 AND n.local_relpath = a.local_relpath)
 
 /* Delete the nodes shadowed by local_relpath. Not valid for the wc-root */
 -- STMT_DELETE_SHADOWED_RECURSIVE

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1444156&r1=1444155&r2=1444156&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Fri Feb  8 17:23:13 2013
@@ -6019,6 +6019,7 @@ op_revert_txn(void *baton,
               const char *local_relpath,
               apr_pool_t *scratch_pool)
 {
+  svn_wc__db_t *db = baton;
   svn_sqlite__stmt_t *stmt;
   svn_boolean_t have_row;
   int op_depth;
@@ -6092,7 +6093,8 @@ op_revert_txn(void *baton,
           svn_boolean_t tree_conflicted;
 
           SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, NULL,
-                                             &tree_conflicted, NULL, NULL,
+                                             &tree_conflicted,
+                                             db, wcroot->abspath,
                                              conflict,
                                              scratch_pool, scratch_pool));
           if (tree_conflicted
@@ -6103,14 +6105,17 @@ op_revert_txn(void *baton,
               svn_wc_conflict_action_t action;
 
               SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action,
-                                                          NULL, NULL, NULL,
+                                                          NULL,
+                                                          db, wcroot->abspath,
                                                           conflict,
                                                           scratch_pool,
                                                           scratch_pool));
 
               if (reason == svn_wc_conflict_reason_deleted)
-                ;
-              /* svn_wc__db_resolve_delete_raise_moved */
+                SVN_ERR(svn_wc__db_resolve_delete_raise_moved_away(
+                          db, svn_dirent_join(wcroot->abspath, local_relpath,
+                                              scratch_pool),
+                          scratch_pool));
             }
         }
     }
@@ -6333,6 +6338,7 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
     {
     case svn_depth_empty:
       wtb.cb_func = op_revert_txn;
+      wtb.cb_baton = db;
       break;
     case svn_depth_infinity:
       wtb.cb_func = op_revert_recursive_txn;

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=1444156&r1=1444155&r2=1444156&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Fri Feb  8 17:23:13 2013
@@ -6588,7 +6588,7 @@ struct svn_test_descriptor_t test_funcs[
                        "move_update_delete_mods"),
     SVN_TEST_OPTS_PASS(nested_moves2,
                        "nested_moves2"),
-    SVN_TEST_OPTS_XFAIL(move_in_delete,
+    SVN_TEST_OPTS_PASS(move_in_delete,
                        "move_in_delete (issue 4303)"),
     SVN_TEST_OPTS_PASS(switch_move,
                        "switch_move"),