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/02/17 17:41:37 UTC

svn commit: r911064 - in /subversion/trunk/subversion/libsvn_wc: adm_ops.c entries.c entries.h wc-queries.sql wc_db.c wc_db.h

Author: rhuijben
Date: Wed Feb 17 16:41:37 2010
New Revision: 911064

URL: http://svn.apache.org/viewvc?rev=911064&view=rev
Log:
Following up on r911027 and as a very simple example on how you can remove
an entry write operation: remove the entry write operation for setting the
keep-local flag.

* subversion/libsvn_wc/adm_ops.c
  (mark_tree_deleted):
     Use wc-db operation instead of entries for setting keep-local.

* subversion/libsvn_wc/entries.c
  (fold_entry): Remove keep-local handling and leave comment.

* subversion/libsvn_wc/entries.h
  (SVN_WC__ENTRY_MODIFY_KEEP_LOCAL): Remove now unused flag.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_UPDATE_KEEP_LOCAL_FLAG): New query.

* subversion/libsvn_wc/wc_db.c
  (svn_wc__db_temp_set_keep_local): New function.

* subversion/libsvn_wc/wc_db.h
  (svn_wc__db_temp_set_keep_local): New function.

Modified:
    subversion/trunk/subversion/libsvn_wc/adm_ops.c
    subversion/trunk/subversion/libsvn_wc/entries.c
    subversion/trunk/subversion/libsvn_wc/entries.h
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.c
    subversion/trunk/subversion/libsvn_wc/wc_db.h

Modified: subversion/trunk/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_ops.c?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_ops.c Wed Feb 17 16:41:37 2010
@@ -896,15 +896,7 @@
       SVN_ERR(svn_wc__db_temp_op_delete(db, dir_abspath, iterpool));
 
       if (keep_local)
-      {
-        svn_wc_entry_t tmp_entry;
-        tmp_entry.keep_local = keep_local;
-
-        SVN_ERR(svn_wc__entry_modify2(db, dir_abspath, svn_node_dir, FALSE,
-                                      &tmp_entry,
-                                      SVN_WC__ENTRY_MODIFY_KEEP_LOCAL,
-                                      iterpool));
-      }
+        SVN_ERR(svn_wc__db_temp_set_keep_local(db, dir_abspath, TRUE, iterpool));
     }
 
   /* Destroy our per-iteration pool. */

Modified: subversion/trunk/subversion/libsvn_wc/entries.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/entries.c?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/entries.c (original)
+++ subversion/trunk/subversion/libsvn_wc/entries.c Wed Feb 17 16:41:37 2010
@@ -2604,8 +2604,7 @@
   /* has-props, prop-mods, cachable-props, and present-props are deprecated,
      so we do not copy them. */
 
-  if (modify_flags & SVN_WC__ENTRY_MODIFY_KEEP_LOCAL)
-    cur_entry->keep_local = entry->keep_local;
+  /* keep_local is no longer modified with this function */
 
   /* Note that we don't bother to fold entry->depth, because it is
      only meaningful on the this-dir entry anyway. */

Modified: subversion/trunk/subversion/libsvn_wc/entries.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/entries.h?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/entries.h (original)
+++ subversion/trunk/subversion/libsvn_wc/entries.h Wed Feb 17 16:41:37 2010
@@ -115,7 +115,6 @@
 #define SVN_WC__ENTRY_MODIFY_INCOMPLETE         APR_INT64_C(0x0000000000100000)
 #define SVN_WC__ENTRY_MODIFY_ABSENT             APR_INT64_C(0x0000000000200000)
 /* OPEN */
-#define SVN_WC__ENTRY_MODIFY_KEEP_LOCAL         APR_INT64_C(0x0000000080000000)
 #define SVN_WC__ENTRY_MODIFY_WORKING_SIZE       APR_INT64_C(0x0000000100000000)
 /* OPEN */
 #define SVN_WC__ENTRY_MODIFY_FILE_EXTERNAL      APR_INT64_C(0x0000000400000000)

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Wed Feb 17 16:41:37 2010
@@ -339,6 +339,10 @@
 select keep_local from working_node
 where wc_id = ?1 and local_relpath = ?2;
 
+-- STMT_UPDATE_KEEP_LOCAL_FLAG
+update working_node set keep_local= ?3
+where wc_id = ?1 and local_relpath = ?2;
+
 -- STMT_SELECT_NOT_PRESENT
 select 1 from base_node
 where wc_id = ?1 and local_relpath = ?2 and presence = 'not-present';

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Wed Feb 17 16:41:37 2010
@@ -5356,6 +5356,33 @@
 }
 
 svn_error_t *
+svn_wc__db_temp_set_keep_local(svn_wc__db_t *db,
+                               const char *local_abspath,
+                               svn_boolean_t keep_local,
+                               apr_pool_t *scratch_pool)
+{
+  svn_wc__db_pdh_t *pdh;
+  const char *local_relpath;
+  svn_sqlite__stmt_t *stmt;
+
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+  /* First flush the entries */
+  SVN_ERR(parse_local_abspath(&pdh, &local_relpath, db, local_abspath,
+                              svn_sqlite__mode_readwrite,
+                              scratch_pool, scratch_pool));
+  flush_entries(pdh);
+
+  /* Then update the database */
+  SVN_ERR(get_statement_for_path(&stmt, db, local_abspath,
+                                 STMT_UPDATE_KEEP_LOCAL_FLAG, scratch_pool));
+
+  SVN_ERR(svn_sqlite__bind_int64(stmt, 3, keep_local ? 1 : 0));
+
+  return svn_error_return(svn_sqlite__step_done(stmt));
+}
+
+svn_error_t *
 svn_wc__db_read_conflict_victims(const apr_array_header_t **victims,
                                  svn_wc__db_t *db,
                                  const char *local_abspath,

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=911064&r1=911063&r2=911064&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Wed Feb 17 16:41:37 2010
@@ -1893,6 +1893,14 @@
                                      const char *local_abspath,
                                      apr_pool_t *scratch_pool);
 
+/* For a deleted directory, set its keep_local flag. (This flag will
+   go away once we have a consolidated administrative area) */
+svn_error_t *
+svn_wc__db_temp_set_keep_local(svn_wc__db_t *db,
+                               const char *local_abspath,
+                               svn_boolean_t keep_local,
+                               apr_pool_t *scratch_pool);
+
 /* Removes all references of LOCAL_ABSPATH from its working copy
    using DB. When FLUSH_ENTRY_CACHE is set to TRUE, flush the related
    entries caches. */