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);