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/08/08 18:02:41 UTC
svn commit: r1155000 - /subversion/trunk/subversion/libsvn_wc/wc_db.c
Author: stsp
Date: Mon Aug 8 16:02:41 2011
New Revision: 1155000
URL: http://svn.apache.org/viewvc?rev=1155000&view=rev
Log:
Fix problems getting moved-from information from svn_wc__db_scan_addition().
* subversion/libsvn_wc/wc_db.c
(get_moved_from_info): Allow the STATUS output parameter to be NULL.
(scan_addition_txn): Fix bug: moved-from info was only returned if the
caller passed a non-NULL STATUS parameter in addition to the
MOVED_FROM_RELPATH and DELETE_OP_ROOT_RELPATH output parameters.
Add a note saying that a rather large if-statement in this function
should be refactored.
(svn_wc__db_scan_addition): If the node is not moved, set *MOVED_FROM_ABSPATH
and *DELETE_OP_ROOT_ABSPATH to NULL as promised by docstring.
Modified:
subversion/trunk/subversion/libsvn_wc/wc_db.c
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1155000&r1=1154999&r2=1155000&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon Aug 8 16:02:41 2011
@@ -9102,7 +9102,8 @@ svn_wc__db_scan_base_repos(const char **
/* A helper for scan_addition().
* Compute moved-from information for the node at LOCAL_RELPATH which
* has been determined as having been moved-here.
- * Return an appropriate status in *STATUS (usually "moved-here").
+ * If STATUS is not NULL, return an appropriate status in *STATUS (usually
+ * "moved-here").
* If MOVED_FROM_RELPATH is not NULL, set *MOVED_FROM_RELPATH to the
* path of the move-source node in *MOVED_FROM_RELPATH.
* If DELETE_OP_ROOT_RELPATH is not NULL, set *DELETE_OP_ROOT_RELPATH
@@ -9135,7 +9136,8 @@ get_moved_from_info(svn_wc__db_status_t
/* The move was only recorded at the copy-half, possibly because
* the move operation was interrupted mid-way between the copy
* and the delete. Treat this node as a normal copy. */
- *status = svn_wc__db_status_copied;
+ if (status)
+ *status = svn_wc__db_status_copied;
if (moved_from_relpath)
*moved_from_relpath = NULL;
if (delete_op_root_relpath)
@@ -9146,7 +9148,8 @@ get_moved_from_info(svn_wc__db_status_t
}
/* It's a properly recorded move. */
- *status = svn_wc__db_status_moved_here;
+ if (status)
+ *status = svn_wc__db_status_moved_here;
if (moved_from_relpath || delete_op_root_relpath)
{
@@ -9303,11 +9306,16 @@ scan_addition_txn(void *baton,
if (sab->op_root_relpath)
*sab->op_root_relpath = apr_pstrdup(sab->result_pool, op_root_relpath);
+ /* ### This if-statement is quite redundant.
+ * ### We're checking all these values again within the body anyway.
+ * ### The body should be broken up appropriately and move into the
+ * ### outer scope. */
if (sab->original_repos_relpath
|| sab->original_repos_id
|| (sab->original_revision
&& *sab->original_revision == SVN_INVALID_REVNUM)
- || sab->status)
+ || sab->status
+ || sab->moved_from_relpath || sab->delete_op_root_relpath)
{
if (local_relpath != op_root_relpath)
/* requery to get the add/copy root */
@@ -9342,14 +9350,16 @@ scan_addition_txn(void *baton,
if (!svn_sqlite__column_is_null(stmt, 10)
&& (sab->status
- || sab->original_repos_id))
+ || sab->original_repos_id
+ || sab->moved_from_relpath || sab->delete_op_root_relpath))
/* If column 10 (original_repos_id) is NULL,
this is a plain add, not a copy or a move */
{
if (sab->original_repos_id)
*sab->original_repos_id = svn_sqlite__column_int64(stmt, 10);
- if (sab->status)
+ if (sab->status ||
+ sab->moved_from_relpath || sab->delete_op_root_relpath)
{
if (svn_sqlite__column_boolean(stmt, 13 /* moved_here */))
SVN_ERR(get_moved_from_info(sab->status,
@@ -9359,7 +9369,7 @@ scan_addition_txn(void *baton,
local_relpath,
sab->result_pool,
scratch_pool));
- else
+ else if (sab->status)
*sab->status = svn_wc__db_status_copied;
}
}
@@ -9553,14 +9563,26 @@ svn_wc__db_scan_addition(svn_wc__db_stat
wcroot->sdb, original_repos_id,
result_pool));
- if (moved_from_abspath && moved_from_relpath)
- *moved_from_abspath = svn_dirent_join(wcroot->abspath,
- moved_from_relpath,
- result_pool);
- if (delete_op_root_abspath && delete_op_root_relpath)
- *delete_op_root_abspath = svn_dirent_join(wcroot->abspath,
- delete_op_root_relpath,
+ if (moved_from_abspath)
+ {
+ if (moved_from_relpath)
+ *moved_from_abspath = svn_dirent_join(wcroot->abspath,
+ moved_from_relpath,
result_pool);
+ else
+ *moved_from_abspath = NULL;
+ }
+
+ if (delete_op_root_abspath)
+ {
+ if (delete_op_root_relpath)
+ *delete_op_root_abspath = svn_dirent_join(wcroot->abspath,
+ delete_op_root_relpath,
+ result_pool);
+ else
+ *delete_op_root_abspath = NULL;
+ }
+
return SVN_NO_ERROR;
}