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 2010/08/04 17:00:17 UTC

svn commit: r982283 - /subversion/trunk/subversion/libsvn_wc/adm_ops.c

Author: rhuijben
Date: Wed Aug  4 15:00:17 2010
New Revision: 982283

URL: http://svn.apache.org/viewvc?rev=982283&view=rev
Log:
In Single-DB make sure that when we remove a node from wc_db, we also remove
all its children. Or re-adding them might give it its children back.

* subversion/libsvn_wc/adm_ops.c
  (revert_entry): Don't assume that we don't have to delete children if there
    is no on-disk node.
  (svn_wc__internal_remove_from_revision_control): Even though a node is missing,
    we still have to remove its children.

Modified:
    subversion/trunk/subversion/libsvn_wc/adm_ops.c

Modified: subversion/trunk/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_ops.c?rev=982283&r1=982282&r2=982283&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_ops.c Wed Aug  4 15:00:17 2010
@@ -1534,6 +1534,9 @@ revert_entry(svn_depth_t *depth,
         }
       else if (kind == svn_wc__db_kind_dir)
         {
+#ifndef SVN_WC__SINGLE_DB
+          /* Before single-db we didn't have to perform a recursive delete
+             here. With single-db we really must delete missing nodes */
           if (disk_kind == svn_node_none
               || svn_wc__adm_missing(db, local_abspath, pool))
             {
@@ -1547,6 +1550,7 @@ revert_entry(svn_depth_t *depth,
                                                       pool));
             }
           else
+#endif
             {
               SVN_ERR(svn_wc__internal_remove_from_revision_control(
                                            db,
@@ -2045,15 +2049,16 @@ svn_wc__internal_remove_from_revision_co
         }
 
     }  /* done with file case */
+#ifndef SVN_WC__SINGLE_DB
   else if (svn_wc__adm_missing(db, local_abspath, scratch_pool))
     {
-      /* The directory is missing  so don't try to recurse,
-         just delete the entry in the parent directory.
-
-         ### This case disappears after we move to one DB. */
+      /* The directory is missing  so don't try to recurse, in
+         not existing administrative data, just delete the
+         entry in the parent directory. */
       SVN_ERR(svn_wc__db_temp_op_remove_entry(db, local_abspath,
                                               scratch_pool));
     }
+#endif
   else /* looking at THIS_DIR */
     {
       apr_pool_t *iterpool = svn_pool_create(scratch_pool);
@@ -2076,7 +2081,10 @@ svn_wc__internal_remove_from_revision_co
 
           entry_abspath = svn_dirent_join(local_abspath, entry_name, iterpool);
 
-          /* ### where did the adm_missing and depth_exclude test go?!?  */
+          /* ### where did the adm_missing and depth_exclude test go?!? 
+
+             ### BH: depth exclude is handled by hidden and missing is ok
+                     for this temp_op. */
 
           SVN_ERR(svn_wc__db_node_hidden(&hidden, db, entry_abspath,
                                          iterpool));