Author: rhuijben
Date: Wed Jun 30 12:23:32 2010
New Revision: 959278
URL: http://svn.apache.org/viewvc?rev=959278&view=rev
Log:
Following up on r959270, fix a few cases where the schedule calculation
didn't handle replacements correctly.
* subversion/libsvn_wc/node.c
(svn_wc__internal_node_get_schedule): Also check for replacements on local
additions and allow replacements to be scheduled as normal if they aren't
the operation root. Bail when the parent is a local addition.
Modified:
subversion/trunk/subversion/libsvn_wc/node.c
Modified: subversion/trunk/subversion/libsvn_wc/node.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/node.c?rev=959278&r1=959277&r2=959278&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/node.c (original)
+++ subversion/trunk/subversion/libsvn_wc/node.c Wed Jun 30 12:23:32 2010
@@ -1283,10 +1283,7 @@ svn_wc__internal_node_get_schedule(svn_w
db, local_abspath,
scratch_pool, scratch_pool));
- if (status == svn_wc__db_status_added)
- break;
-
- if (copied)
+ if (copied && status != svn_wc__db_status_added)
*copied = TRUE;
if (!schedule)
@@ -1294,20 +1291,21 @@ svn_wc__internal_node_get_schedule(svn_w
if (has_base)
{
- SVN_ERR(svn_wc__db_base_get_info(&status, NULL, NULL, NULL,
+ svn_wc__db_status_t base_status;
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
NULL,
db, local_abspath,
scratch_pool, scratch_pool));
- if (status != svn_wc__db_status_not_present)
- {
- *schedule = svn_wc_schedule_replace;
- break;
- }
+ if (base_status != svn_wc__db_status_not_present)
+ *schedule = svn_wc_schedule_replace;
}
+ if (status == svn_wc__db_status_added)
+ break; /* Local addition */
+
/* Determine the parent status to check if we should show the
schedule of a child of a copy as normal. */
if (strcmp(op_root_abspath, local_abspath) != 0)
@@ -1330,7 +1328,7 @@ svn_wc__internal_node_get_schedule(svn_w
scratch_pool, scratch_pool));
if (status != svn_wc__db_status_added)
- break;
+ break; /* Parent was not added */
if (!parent_copyfrom_relpath)
{
@@ -1341,6 +1339,9 @@ svn_wc__internal_node_get_schedule(svn_w
db, parent_abspath,
scratch_pool, scratch_pool));
+ if (!parent_copyfrom_relpath)
+ break; /* Parent is a local addition */
+
parent_copyfrom_relpath = svn_relpath_join(
parent_copyfrom_relpath,
svn_dirent_is_child(op_root_abspath,
@@ -1355,7 +1356,7 @@ svn_wc__internal_node_get_schedule(svn_w
if (!child_name
|| strcmp(child_name, svn_dirent_basename(local_abspath, NULL)))
- break;
+ break; /* Different operation */
*schedule = svn_wc_schedule_normal;
break;