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 2011/05/04 12:17:54 UTC

svn commit: r1099395 - in /subversion/trunk/subversion/libsvn_wc: wc-queries.sql wc_db.c

Author: philip
Date: Wed May  4 10:17:54 2011
New Revision: 1099395

URL: http://svn.apache.org/viewvc?rev=1099395&view=rev
Log:
Change the new, single-txn delete to leave tree conflicts as well
as changelists, it now passes all the regression tests.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_DELETE_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT,
   STMT_CLEAR_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT): New.

* subversion/libsvn_wc/wc_db.c
  (op_delete_txn): Use new queries.

Modified:
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.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=1099395&r1=1099394&r2=1099395&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Wed May  4 10:17:54 2011
@@ -507,6 +507,17 @@ WHERE wc_id = ?1 AND (local_relpath = ?2
                                            OR local_relpath LIKE ?3 ESCAPE '#')
                                       AND kind = 'file'))
 
+-- STMT_DELETE_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT
+DELETE FROM actual_node
+WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+      AND tree_conflict_data IS NULL
+      AND (changelist IS NULL
+           OR local_relpath NOT IN (SELECT local_relpath FROM nodes_current
+                                    WHERE wc_id = ?1
+                                      AND (local_relpath = ?2
+                                           OR local_relpath LIKE ?3 ESCAPE '#')
+                                      AND kind = 'file'))
+
 -- STMT_DELETE_CHILD_NODES_RECURSIVE
 DELETE FROM nodes
 WHERE wc_id = ?1 AND local_relpath LIKE ?2 ESCAPE '#' AND op_depth = ?3
@@ -540,6 +551,19 @@ SET properties = NULL,
     right_checksum = NULL
 WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
 
+-- STMT_CLEAR_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT
+UPDATE actual_node
+SET properties = NULL,
+    text_mod = NULL,
+    conflict_old = NULL,
+    conflict_new = NULL,
+    conflict_working = NULL,
+    prop_reject = NULL,
+    older_checksum = NULL,
+    left_checksum = NULL,
+    right_checksum = NULL
+WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+
 -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CONFLICT
 UPDATE actual_node
 SET properties = NULL,

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1099395&r1=1099394&r2=1099395&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Wed May  4 10:17:54 2011
@@ -5152,8 +5152,18 @@ op_delete_txn(void *baton,
                             b->delete_depth));
   SVN_ERR(svn_sqlite__step_done(stmt));
     
+  /* Delete ACTUAL_NODE rows, but leave those that have tree conflicts
+     and those that have changelist and a NODES row.
+     
+     ### I don't know why we leave tree conflicts. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
-                         STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
+                         STMT_DELETE_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT));
+  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
+                            wcroot->wc_id, local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__step_done(stmt));
+
+  SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+                         STMT_CLEAR_ACTUAL_LEAVING_CHANGELIST_AND_CONFLICT));
   SVN_ERR(svn_sqlite__bindf(stmt, "iss",
                             wcroot->wc_id, local_relpath, like_arg));
   SVN_ERR(svn_sqlite__step_done(stmt));