On Thu, Nov 18, 2010 at 06:34:30AM +0200, Daniel Shahaf wrote:
> Daniel Shahaf wrote on Thu, Nov 18, 2010 at 06:07:07 +0200:
> > + SVN_ERR(svn_fs_node_history(&history, copyto_root, copyto_path, pool));
> > + SVN_ERR(svn_fs_history_prev(&history_prev, history, TRUE /* cross copies */,
> > + pool));
> > + SVN_ERR(svn_fs_history_location(copyfrom_path_p, copyfrom_rev_p,
> > + history_prev, pool));
>
> Tests running (trunk plus the patch).
>
>
> But perhaps I should have used this function instead:
>
> 1439 svn_error_t *
> 1440 svn_fs_copied_from(svn_revnum_t *rev_p,
> 1441 const char **path_p,
> 1442 svn_fs_root_t *root,
> 1443 const char *path,
> 1444 apr_pool_t *pool);
You mean like this? Seems to work here.
Index: subversion/libsvn_repos/replay.c
===================================================================
--- subversion/libsvn_repos/replay.c (revision 1036389)
+++ subversion/libsvn_repos/replay.c (working copy)
@@ -225,10 +225,14 @@ add_subdir(svn_fs_root_t *source_root,
continue;
else if (change->change_kind == svn_fs_path_change_replace)
{
- /* ### Can this assert fail? */
- SVN_ERR_ASSERT(change->copyfrom_known);
- copyfrom_path = change->copyfrom_path;
- copyfrom_rev = change->copyfrom_rev;
+ if (change->copyfrom_known)
+ {
+ copyfrom_path = change->copyfrom_path;
+ copyfrom_rev = change->copyfrom_rev;
+ }
+ else
+ SVN_ERR(svn_fs_copied_from(©from_rev, ©from_path,
+ target_root, new_path, pool));
}
}
Received on 2010-11-18 11:52:03 CET