Author: stsp Date: Fri Jul 29 19:35:45 2011 New Revision: 1152348 URL: http://svn.apache.org/viewvc?rev=1152348&view=rev Log: Whoops, revert the just-committed r1152345, it wasn't quite ready yet.
Modified: subversion/trunk/subversion/libsvn_wc/entries.c subversion/trunk/subversion/libsvn_wc/info.c subversion/trunk/subversion/libsvn_wc/node.c subversion/trunk/subversion/libsvn_wc/wc_db.c subversion/trunk/subversion/libsvn_wc/wc_db.h subversion/trunk/subversion/tests/libsvn_wc/db-test.c Modified: subversion/trunk/subversion/libsvn_wc/entries.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/entries.c?rev=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/entries.c (original) +++ subversion/trunk/subversion/libsvn_wc/entries.c Fri Jul 29 19:35:45 2011 @@ -272,7 +272,7 @@ get_info_for_deleted(svn_wc_entry_t *ent SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, - &work_del_abspath, NULL, + &work_del_abspath, db, entry_abspath, scratch_pool, scratch_pool)); @@ -525,7 +525,7 @@ read_one_entry(const svn_wc_entry_t **ne { const char *work_del_abspath; SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, - &work_del_abspath, NULL, + &work_del_abspath, db, entry_abspath, scratch_pool, scratch_pool)); Modified: subversion/trunk/subversion/libsvn_wc/info.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/info.c?rev=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/info.c (original) +++ subversion/trunk/subversion/libsvn_wc/info.c Fri Jul 29 19:35:45 2011 @@ -200,7 +200,7 @@ build_info_for_node(svn_wc__info2_t **in /* And now fetch the url and revision of what will be deleted */ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, - &work_del_abspath, NULL, + &work_del_abspath, db, local_abspath, scratch_pool, scratch_pool)); if (work_del_abspath != NULL) Modified: subversion/trunk/subversion/libsvn_wc/node.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/node.c?rev=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/node.c (original) +++ subversion/trunk/subversion/libsvn_wc/node.c Fri Jul 29 19:35:45 2011 @@ -182,7 +182,7 @@ svn_wc__internal_get_repos_info(const ch const char *base_del_abspath, *wrk_del_abspath; SVN_ERR(svn_wc__db_scan_deletion(&base_del_abspath, NULL, - &wrk_del_abspath, NULL, + &wrk_del_abspath, db, local_abspath, scratch_pool, scratch_pool)); @@ -768,7 +768,7 @@ svn_wc__node_get_deleted_ancestor(const if (status == svn_wc__db_status_deleted) SVN_ERR(svn_wc__db_scan_deletion(deleted_ancestor_abspath, NULL, NULL, - NULL, wc_ctx->db, local_abspath, + wc_ctx->db, local_abspath, result_pool, scratch_pool)); return SVN_NO_ERROR; @@ -1017,7 +1017,7 @@ svn_wc__internal_get_commit_base_rev(svn const char *work_del_abspath; SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, - &work_del_abspath, NULL, + &work_del_abspath, db, local_abspath, scratch_pool, scratch_pool)); if (work_del_abspath != NULL) @@ -1160,7 +1160,7 @@ svn_wc__internal_node_get_schedule(svn_w /* Find out details of our deletion. */ SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, - &work_del_abspath, NULL, + &work_del_abspath, db, local_abspath, scratch_pool, scratch_pool)); Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Fri Jul 29 19:35:45 2011 @@ -377,7 +377,6 @@ static svn_error_t * scan_deletion(const char **base_del_relpath, const char **moved_to_relpath, const char **work_del_relpath, - const char **copy_op_root_relpath, svn_wc__db_wcroot_t *wcroot, const char *local_relpath, apr_pool_t *result_pool, @@ -3362,7 +3361,7 @@ get_info_for_copy(apr_int64_t *copyfrom_ const char *base_del_relpath, *work_del_relpath; SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath, - NULL, wcroot, local_relpath, scratch_pool, + wcroot, local_relpath, scratch_pool, scratch_pool)); if (work_del_relpath) { @@ -7391,7 +7390,7 @@ read_url_txn(void *baton, const char *work_del_relpath; SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath, - NULL, wcroot, local_relpath, + wcroot, local_relpath, scratch_pool, scratch_pool)); if (base_del_relpath) @@ -8147,7 +8146,7 @@ svn_wc__db_global_relocate(svn_wc__db_t if (status == svn_wc__db_status_deleted) { const char *work_del_relpath; - SVN_ERR(scan_deletion(NULL, NULL, &work_del_relpath, NULL, + SVN_ERR(scan_deletion(NULL, NULL, &work_del_relpath, wcroot, local_dir_relpath, scratch_pool, scratch_pool)); if (work_del_relpath) @@ -9546,7 +9545,6 @@ struct scan_deletion_baton_t const char **base_del_relpath; const char **moved_to_relpath; const char **work_del_relpath; - const char **copy_op_root_relpath; apr_pool_t *result_pool; }; @@ -9562,6 +9560,7 @@ scan_deletion_txn(void *baton, const char *child_relpath = NULL; svn_wc__db_status_t child_presence; svn_boolean_t child_has_base = FALSE; + svn_boolean_t found_moved_to = FALSE; apr_int64_t local_op_depth, op_depth; /* Initialize all the OUT parameters. */ @@ -9571,8 +9570,6 @@ scan_deletion_txn(void *baton, *sd_baton->moved_to_relpath = NULL; if (sd_baton->work_del_relpath != NULL) *sd_baton->work_del_relpath = NULL; - if (sd_baton->copy_op_root_relpath != NULL) - *sd_baton->copy_op_root_relpath = NULL; /* Initialize to something that won't denote an important parent/child transition. */ @@ -9689,73 +9686,25 @@ scan_deletion_txn(void *baton, gimmick, not a real node that may have been deleted. */ } - if ((sd_baton->moved_to_relpath != NULL + /* Only grab the nearest ancestor. */ + if (!found_moved_to && + (sd_baton->moved_to_relpath != NULL || sd_baton->base_del_relpath != NULL) && !svn_sqlite__column_is_null(stmt, 2 /* moved_to */)) { - const char *copy_op_root_relpath; - const char *moved_to_relpath; - - copy_op_root_relpath = svn_sqlite__column_text(stmt, 2, - scratch_pool); - if (sd_baton->copy_op_root_relpath) - *sd_baton->copy_op_root_relpath = - apr_pstrdup(sd_baton->result_pool, copy_op_root_relpath); - - if (current_relpath == local_relpath) - { - /* LOCAL_RELPATH is the op_root of the delete-half of the - * move, so the op_root of the copied-half equals the - * moved-to relpath. Note that the moved-to relpath in the DB - * is kept up-to-date if a node is moved multiple times. */ - if (sd_baton->moved_to_relpath) - *sd_baton->moved_to_relpath = - apr_pstrdup(sd_baton->result_pool, copy_op_root_relpath); - - if (sd_baton->base_del_relpath) - *sd_baton->base_del_relpath = - apr_pstrdup(sd_baton->result_pool, current_relpath); - } - else - { - const char *moved_child_relpath; - svn_wc__db_status_t moved_child_status; + /* There better be a BASE_NODE (that was moved-away). */ + SVN_ERR_ASSERT(have_base); - /* The CURRENT_RELPATH is the op_root of the delete-half of - * the move. LOCAL_RELPATH is a child that was moved along. - * Compute the child's new location within the move target. */ - moved_child_relpath = svn_relpath_skip_ancestor(current_relpath, - local_relpath); - SVN_ERR_ASSERT(moved_child_relpath && - strlen(moved_child_relpath) > 0); - moved_to_relpath = svn_relpath_join(copy_op_root_relpath, - moved_child_relpath, - scratch_pool); - - /* Figure out what happened to the child after it was moved - * along. Maybe the child was moved-away further, either by - * itself, or along with some intermediate parent node. */ - SVN_ERR(read_info(&moved_child_status, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, wcroot, - moved_to_relpath, scratch_pool, scratch_pool)); - if (moved_child_status == svn_wc__db_status_deleted) - { - const char *next_moved_to_relpath; + found_moved_to = TRUE; - /* Recurse. */ - SVN_ERR(scan_deletion(NULL, &next_moved_to_relpath, NULL, - NULL, wcroot, moved_to_relpath, - scratch_pool, scratch_pool)); - if (next_moved_to_relpath) - moved_to_relpath = next_moved_to_relpath; - } + /* This makes things easy. It's the BASE_DEL_ABSPATH! */ + if (sd_baton->base_del_relpath != NULL) + *sd_baton->base_del_relpath = apr_pstrdup(sd_baton->result_pool, + current_relpath); - if (sd_baton->moved_to_relpath) - *sd_baton->moved_to_relpath = - apr_pstrdup(sd_baton->result_pool, moved_to_relpath); - } + if (sd_baton->moved_to_relpath != NULL) + *sd_baton->moved_to_relpath = apr_pstrdup(sd_baton->result_pool, + svn_sqlite__column_text(stmt, 2, NULL)); } op_depth = svn_sqlite__column_int64(stmt, 3); @@ -9796,7 +9745,6 @@ static svn_error_t * scan_deletion(const char **base_del_relpath, const char **moved_to_relpath, const char **work_del_relpath, - const char **copy_op_root_relpath, svn_wc__db_wcroot_t *wcroot, const char *local_relpath, apr_pool_t *result_pool, @@ -9805,9 +9753,8 @@ scan_deletion(const char **base_del_relp struct scan_deletion_baton_t sd_baton; sd_baton.base_del_relpath = base_del_relpath; - sd_baton.work_del_relpath = work_del_relpath; sd_baton.moved_to_relpath = moved_to_relpath; - sd_baton.copy_op_root_relpath = copy_op_root_relpath; + sd_baton.work_del_relpath = work_del_relpath; sd_baton.result_pool = result_pool; return svn_error_trace(svn_wc__db_with_txn(wcroot, local_relpath, @@ -9820,7 +9767,6 @@ svn_error_t * svn_wc__db_scan_deletion(const char **base_del_abspath, const char **moved_to_abspath, const char **work_del_abspath, - const char **copy_op_root_abspath, svn_wc__db_t *db, const char *local_abspath, apr_pool_t *result_pool, @@ -9829,7 +9775,6 @@ svn_wc__db_scan_deletion(const char **ba svn_wc__db_wcroot_t *wcroot; const char *local_relpath; const char *base_del_relpath, *moved_to_relpath, *work_del_relpath; - const char *copy_op_root_relpath; SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath)); @@ -9838,7 +9783,7 @@ svn_wc__db_scan_deletion(const char **ba VERIFY_USABLE_WCROOT(wcroot); SVN_ERR(scan_deletion(&base_del_relpath, &moved_to_relpath, - &work_del_relpath, ©_op_root_relpath, wcroot, + &work_del_relpath, wcroot, local_relpath, scratch_pool, scratch_pool)); if (base_del_abspath) @@ -9862,13 +9807,6 @@ svn_wc__db_scan_deletion(const char **ba work_del_relpath, result_pool) : NULL); } - if (copy_op_root_abspath) - { - *copy_op_root_abspath = (copy_op_root_relpath - ? svn_dirent_join(wcroot->abspath, - copy_op_root_relpath, result_pool) - : NULL); - } 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=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc_db.h (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.h Fri Jul 29 19:35:45 2011 @@ -2536,18 +2536,13 @@ svn_wc__db_scan_addition(svn_wc__db_stat BASE_DEL_ABSPATH will specify the nearest ancestor of the explicit or implicit deletion (if any) that applies to the BASE tree. + MOVED_TO_ABSPATH will specify the nearest ancestor that has moved-away, + if any. If no ancestors have been moved-away, then this is set to NULL. + WORK_DEL_ABSPATH will specify the root of a deleted subtree within the WORKING tree (note there is no concept of layered delete operations in WORKING, so there is only one deletion root in the ancestry). - MOVED_TO_ABSPATH will specify the path where this node was moved to - if the node has moved-away. - - If the node was moved-away, COPY_OP_ROOT_ABSPATH will specify the root - of the copy operation that created the copy-half of the move. - If LOCAL_ABSPATH itself is the root of the copy, COPY_OP_ROOT_ABSPATH - equals MOVED_TO_ABSPATH. - All OUT parameters may be set to NULL to indicate a lack of interest in that piece of information. @@ -2562,7 +2557,6 @@ svn_error_t * svn_wc__db_scan_deletion(const char **base_del_abspath, const char **moved_to_abspath, const char **work_del_abspath, - const char **copy_op_root_abspath, svn_wc__db_t *db, const char *local_abspath, apr_pool_t *result_pool, Modified: subversion/trunk/subversion/tests/libsvn_wc/db-test.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/db-test.c?rev=1152348&r1=1152347&r2=1152348&view=diff ============================================================================== --- subversion/trunk/subversion/tests/libsvn_wc/db-test.c (original) +++ subversion/trunk/subversion/tests/libsvn_wc/db-test.c Fri Jul 29 19:35:45 2011 @@ -1033,7 +1033,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-e", pool), pool, pool)); SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e", @@ -1048,7 +1047,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-e/J-e-a", pool), pool, pool)); SVN_TEST_ASSERT(validate_abspath(local_abspath, "J/J-e", @@ -1063,7 +1061,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-c", pool), pool, pool)); /* Implicit delete of "J" (via replacement). */ @@ -1078,7 +1075,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-c/J-c-a", pool), pool, pool)); /* Implicit delete of "J" (via replacement). */ @@ -1093,7 +1089,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-e/J-e-b/Jeba", pool), pool, pool)); /* ### I don't understand this. "J/J-e/J-e-b/Jeba" is a deleted @@ -1110,7 +1105,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "J/J-f/J-f-a", pool), pool, pool)); /* Implicit delete of "J" (via replacement). */ @@ -1124,7 +1118,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "K", pool), pool, pool)); SVN_TEST_ASSERT(validate_abspath(local_abspath, "K", @@ -1137,7 +1130,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "K/K-a", pool), pool, pool)); SVN_TEST_ASSERT(validate_abspath(local_abspath, "K", @@ -1150,7 +1142,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "K/K-b", pool), pool, pool)); SVN_TEST_ASSERT(validate_abspath(local_abspath, "K/K-b", @@ -1164,7 +1155,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "L/L-a/L-a-a", pool), pool, pool)); SVN_TEST_ASSERT(base_del_abspath == NULL); @@ -1177,7 +1167,6 @@ test_scan_deletion(apr_pool_t *pool) &base_del_abspath, &moved_to_abspath, &work_del_abspath, - NULL, db, svn_dirent_join(local_abspath, "L/L-a", pool), pool, pool)); SVN_TEST_ASSERT(base_del_abspath == NULL);