Index: subversion/libsvn_wc/copy.c =================================================================== --- subversion/libsvn_wc/copy.c (revision 17584) +++ subversion/libsvn_wc/copy.c (working copy) @@ -173,16 +173,16 @@ (SVN_ERR_UNVERSIONED_RESOURCE, NULL, _("Cannot copy or move '%s': it's not under version control"), svn_path_local_style (src_path, pool)); - if ((src_entry->schedule == svn_wc_schedule_add) - || (! src_entry->url) - || (src_entry->copied)) + + if (((src_entry->schedule == svn_wc_schedule_add) && + (!src_entry->copied)) + || (! src_entry->url)) return svn_error_createf (SVN_ERR_UNSUPPORTED_FEATURE, NULL, _("Cannot copy or move '%s': it's not in the repository yet; " "try committing first"), svn_path_local_style (src_path, pool)); - /* Schedule the new file for addition in its parent, WITH HISTORY. */ { char *copyfrom_url; @@ -190,8 +190,14 @@ svn_revnum_t copyfrom_rev; apr_hash_t *props, *base_props; - SVN_ERR (svn_wc_get_ancestry (©from_url, ©from_rev, - src_path, src_access, pool)); + if (src_entry->copied) + { + copyfrom_url = apr_pstrdup (pool, src_entry->copyfrom_url); + copyfrom_rev = src_entry->copyfrom_rev; + } + else + SVN_ERR (svn_wc_get_ancestry (©from_url, ©from_rev, + src_path, src_access, pool)); /* Load source base and working props. */ SVN_ERR (svn_wc__load_props (&base_props, &props, src_access, @@ -422,9 +428,9 @@ (SVN_ERR_ENTRY_NOT_FOUND, NULL, _("'%s' is not under version control"), svn_path_local_style (src_path, pool)); - if ((src_entry->schedule == svn_wc_schedule_add) - || (! src_entry->url) - || (src_entry->copied)) + if (((src_entry->schedule == svn_wc_schedule_add) && + (!src_entry->copied)) + || (! src_entry->url)) return svn_error_createf (SVN_ERR_UNSUPPORTED_FEATURE, NULL, _("Cannot copy or move '%s': it is not in the repository yet; " @@ -462,8 +468,14 @@ char *copyfrom_url; svn_revnum_t copyfrom_rev; - SVN_ERR (svn_wc_get_ancestry (©from_url, ©from_rev, - src_path, src_access, pool)); + if (src_entry->copied) + { + copyfrom_url = apr_pstrdup (pool, src_entry->copyfrom_url); + copyfrom_rev = src_entry->copyfrom_rev; + } + else + SVN_ERR (svn_wc_get_ancestry (©from_url, ©from_rev, + src_path, src_access, pool)); SVN_ERR (svn_wc_add2 (dst_path, dst_parent, copyfrom_url, copyfrom_rev,