Author: hwright
Date: Fri Jun 15 11:08:47 2012
New Revision: 1350576
URL: http://svn.apache.org/viewvc?rev=1350576&view=rev
Log:
* subversion/libsvn_repos/replay.c
(replay_node): Attempt to properly handle replacements.
Modified:
subversion/trunk/subversion/libsvn_repos/replay.c
Modified: subversion/trunk/subversion/libsvn_repos/replay.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/replay.c?rev=1350576&r1=1350575&r2=1350576&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/replay.c (original)
+++ subversion/trunk/subversion/libsvn_repos/replay.c Fri Jun 15 11:08:47 2012
@@ -1168,6 +1168,7 @@ replay_node(svn_fs_root_t *root,
svn_boolean_t do_delete = FALSE;
svn_revnum_t copyfrom_rev;
const char *copyfrom_path;
+ svn_revnum_t replaces_rev;
/* First, flush the copies stack so it only contains ancestors of path. */
while (copies->nelts > 0
@@ -1207,7 +1208,7 @@ replay_node(svn_fs_root_t *root,
}
/* Handle any deletions. */
- if (do_delete)
+ if (do_delete && ! do_add)
{
svn_boolean_t readable;
@@ -1218,8 +1219,16 @@ replay_node(svn_fs_root_t *root,
scratch_pool, scratch_pool));
if (readable)
SVN_ERR(svn_editor_delete(editor, repos_relpath, SVN_INVALID_REVNUM));
+
+ return SVN_NO_ERROR;
}
+ /* Handle replacements. */
+ if (do_delete && do_add)
+ replaces_rev = svn_fs_revision_root_revision(root);
+ else
+ replaces_rev = SVN_INVALID_REVNUM;
+
/* Fetch the node kind if it makes sense to do so. */
if (! do_delete || do_add)
{
@@ -1279,7 +1288,7 @@ replay_node(svn_fs_root_t *root,
if (copyfrom_path[0] == '/')
++copyfrom_path;
SVN_ERR(svn_editor_copy(editor, copyfrom_path, copyfrom_rev,
- repos_relpath, SVN_INVALID_REVNUM));
+ repos_relpath, replaces_rev));
}
else
{
@@ -1296,7 +1305,7 @@ replay_node(svn_fs_root_t *root,
SVN_ERR(svn_editor_add_directory(editor, repos_relpath,
children, props,
- SVN_INVALID_REVNUM));
+ replaces_rev));
}
}
}
@@ -1307,7 +1316,7 @@ replay_node(svn_fs_root_t *root,
if (copyfrom_path[0] == '/')
++copyfrom_path;
SVN_ERR(svn_editor_copy(editor, copyfrom_path, copyfrom_rev,
- repos_relpath, SVN_INVALID_REVNUM));
+ repos_relpath, replaces_rev));
}
else
{
@@ -1325,8 +1334,7 @@ replay_node(svn_fs_root_t *root,
repos_relpath, TRUE, scratch_pool));
SVN_ERR(svn_editor_add_file(editor, repos_relpath, checksum,
- contents, props,
- SVN_INVALID_REVNUM));
+ contents, props, replaces_rev));
}
}