Author: stsp Date: Thu Jul 28 18:13:31 2011 New Revision: 1151951 URL: http://svn.apache.org/viewvc?rev=1151951&view=rev Log: Add new libsvn_wc API function svn_wc__node_was_moved_here() which determines whether a node at a given LOCAL_ABSPATH was moved to this path.
This will be used later, and will also get a companion called svn_wc__node_was_moved_away() (not implemented yet). * subversion/include/private/svn_wc_private.h (svn_wc__node_was_moved_here): Declare. * subversion/libsvn_wc/node.c (svn_wc__node_was_moved_here): New. Modified: subversion/trunk/subversion/include/private/svn_wc_private.h subversion/trunk/subversion/libsvn_wc/node.c Modified: subversion/trunk/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_wc_private.h?rev=1151951&r1=1151950&r2=1151951&view=diff ============================================================================== --- subversion/trunk/subversion/include/private/svn_wc_private.h (original) +++ subversion/trunk/subversion/include/private/svn_wc_private.h Thu Jul 28 18:13:31 2011 @@ -1111,6 +1111,25 @@ svn_wc__delete_internal(svn_wc_context_t void *notify_baton, apr_pool_t *scratch_pool); +/* If the node at LOCAL_ABSPATH was moved here set *MOVED_FROM_ABSPATH to + * the absolute path of the deleted move-source node, and set + * *DELETE_OP_ROOT_ABSPATH to the absolute path of the root node of the + * delete operation. + * + * If the node was not moved, set *MOVED_FROM_ABSPATH and + * *DELETE_OP_ROOT_ABSPATH to NULL. + * + * Either MOVED_FROM_ABSPATH or OP_ROOT_ABSPATH may be NULL to indicate + * that the caller is not interested in the result. + */ +svn_error_t * +svn_wc__node_was_moved_here(const char **moved_from_abspath, + const char **delete_op_root_abspath, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + #ifdef __cplusplus } #endif /* __cplusplus */ Modified: subversion/trunk/subversion/libsvn_wc/node.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/node.c?rev=1151951&r1=1151950&r2=1151951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/node.c (original) +++ subversion/trunk/subversion/libsvn_wc/node.c Thu Jul 28 18:13:31 2011 @@ -1766,3 +1766,46 @@ svn_wc__check_for_obstructions(svn_wc_no return SVN_NO_ERROR; } + +svn_error_t * +svn_wc__node_was_moved_here(const char **moved_from_abspath, + const char **delete_op_root_abspath, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + svn_boolean_t is_added; + + if (moved_from_abspath) + *moved_from_abspath = NULL; + if (delete_op_root_abspath) + *delete_op_root_abspath = NULL; + + SVN_ERR(svn_wc__node_is_added(&is_added, wc_ctx, local_abspath, + scratch_pool)); + if (is_added && (moved_from_abspath || delete_op_root_abspath)) + { + svn_wc__db_status_t status; + const char *db_moved_from_abspath; + const char *db_delete_op_root_abspath; + + SVN_ERR(svn_wc__db_scan_addition(&status, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &db_moved_from_abspath, + &db_delete_op_root_abspath, + wc_ctx->db, local_abspath, + scratch_pool, scratch_pool)); + if (status == svn_wc__db_status_moved_here) + { + if (moved_from_abspath) + *moved_from_abspath = apr_pstrdup(result_pool, + db_moved_from_abspath); + if (delete_op_root_abspath) + *delete_op_root_abspath = apr_pstrdup(result_pool, + db_delete_op_root_abspath); + } + } + + return SVN_NO_ERROR; +}