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 2011/03/08 23:58:28 UTC

svn commit: r1079594 - in /subversion/trunk/subversion/libsvn_wc: revision_status.c wc-queries.sql wc_db.c wc_db.h

Author: stsp
Date: Tue Mar  8 22:58:27 2011
New Revision: 1079594

URL: http://svn.apache.org/viewvc?rev=1079594&view=rev
Log:
Move detection of added/deleted nodes in revision status out of the node walker.

* subversion/libsvn_wc/revision_status.c
  (analyze_status): Stop caring about added/deleted status.
  (svn_wc_revision_status2): Ask svn_wc__db_revision_status() for local
   modifications in the working copy (which presently covers tree changes
   only -- text and prop changes will be handled in follow-up commits).

* subversion/libsvn_wc/wc-queries.sql
  (STMT_SELECT_NODES_WITH_TREE_MODIFICATIONS): New query. Returns the list
   of nodes with op_depth > 0.

* subversion/libsvn_wc/wc_db.c
  (svn_wc__db_revision_status): New boolean output argument 'is_modified'.
   Check for tree changes and set *is_modified accordingly. Add some comments.

* subversion/libsvn_wc/wc_db.h
  (svn_wc__db_revision_status): New boolean output argument 'is_modified'.

Modified:
    subversion/trunk/subversion/libsvn_wc/revision_status.c
    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/revision_status.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/revision_status.c?rev=1079594&r1=1079593&r2=1079594&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/revision_status.c (original)
+++ subversion/trunk/subversion/libsvn_wc/revision_status.c Tue Mar  8 22:58:27 2011
@@ -74,11 +74,6 @@ analyze_status(const char *local_abspath
     {
       return SVN_NO_ERROR;
     }
-  else if (status == svn_wc__db_status_added
-           || status == svn_wc__db_status_deleted)
-    {
-      wb->result->modified = TRUE;
-    }
 
   /* Ignore file externals. */
   SVN_ERR(svn_wc__internal_is_file_external(&is_file_external, wb->db,
@@ -178,7 +173,8 @@ svn_wc_revision_status2(svn_wc_revision_
     }
 
   SVN_ERR(svn_wc__db_revision_status(&result->min_rev, &result->max_rev,
-                                     &result->sparse_checkout, wc_ctx->db,
+                                     &result->sparse_checkout,
+                                     &result->modified, wc_ctx->db,
                                      local_abspath, scratch_pool));
 
   SVN_ERR(svn_wc__node_walk_children(wc_ctx,

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1079594&r1=1079593&r2=1079594&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Tue Mar  8 22:58:27 2011
@@ -885,6 +885,13 @@ WHERE wc_id = ?1 AND (local_relpath = ?2
        (depth != 'infinity' AND depth != 'unknown'))
   AND file_external IS NULL;
 
+-- STMT_SELECT_NODES_WITH_TREE_MODIFICATIONS
+SELECT local_relpath FROM nodes
+WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+  AND op_depth > 0
+  AND (presence = 'normal' OR presence = 'incomplete')
+  AND file_external IS NULL;
+
 /* Grab all the statements related to the schema.  */
 
 -- include: wc-metadata

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1079594&r1=1079593&r2=1079594&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue Mar  8 22:58:27 2011
@@ -9132,6 +9132,7 @@ svn_error_t *
 svn_wc__db_revision_status(svn_revnum_t *min_revision,
                            svn_revnum_t *max_revision,
                            svn_boolean_t *is_sparse_checkout,
+                           svn_boolean_t *is_modified,
                            svn_wc__db_t *db,
                            const char *local_abspath,
                            apr_pool_t *scratch_pool)
@@ -9149,6 +9150,7 @@ svn_wc__db_revision_status(svn_revnum_t 
                                                 scratch_pool, scratch_pool));
   VERIFY_USABLE_WCROOT(wcroot);
 
+  /* Determine mixed-revisionness. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SELECT_MIN_MAX_REVISIONS));
   SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
@@ -9170,6 +9172,7 @@ svn_wc__db_revision_status(svn_revnum_t 
   SVN_ERR_ASSERT(! have_row);
   SVN_ERR(svn_sqlite__reset(stmt));
 
+  /* Determine sparseness. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SELECT_SPARSE_NODES));
   SVN_ERR(svn_sqlite__bindf(stmt, "iss",
@@ -9182,6 +9185,16 @@ svn_wc__db_revision_status(svn_revnum_t 
   *is_sparse_checkout = have_row;
   SVN_ERR(svn_sqlite__reset(stmt));
 
+  /* Check for additions or deletions. */
+  SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+                                    STMT_SELECT_NODES_WITH_TREE_MODIFICATIONS));
+  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
+                            construct_like_arg(local_relpath, scratch_pool)));
+  /* If this query returns a row, the working copy is modified. */
+  SVN_ERR(svn_sqlite__step(&have_row, stmt));
+  *is_modified = have_row;
+  SVN_ERR(svn_sqlite__reset(stmt));
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1079594&r1=1079593&r2=1079594&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Tue Mar  8 22:58:27 2011
@@ -2510,11 +2510,14 @@ svn_wc__db_temp_below_work(svn_boolean_t
  * the result.
  *
  * Indicate in *IS_SPARSE_CHECKOUT whether any of the nodes within
- * LOCAL_ABSPATH is sparse. */
+ * LOCAL_ABSPATH is sparse.
+ *
+ * Indicate in *IS_MODIFIED whether the working copy has local modifications. */
 svn_error_t *
 svn_wc__db_revision_status(svn_revnum_t *min_revision,
                            svn_revnum_t *max_revision,
                            svn_boolean_t *is_sparse_checkout,
+                           svn_boolean_t *is_modified,
                            svn_wc__db_t *db,
                            const char *local_abspath,
                            apr_pool_t *scratch_pool);