You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/04/14 15:51:41 UTC

svn commit: r1092240 - /subversion/trunk/subversion/libsvn_client/copy.c

Author: rhuijben
Date: Thu Apr 14 13:51:41 2011
New Revision: 1092240

URL: http://svn.apache.org/viewvc?rev=1092240&view=rev
Log:
* subversion/libsvn_client/copy.c
  (try_copy): Find the copy origin the easy way.

Modified:
    subversion/trunk/subversion/libsvn_client/copy.c

Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=1092240&r1=1092239&r2=1092240&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Thu Apr 14 13:51:41 2011
@@ -2119,8 +2119,10 @@ try_copy(const apr_array_header_t *sourc
 
               for (i = 0; i < copy_pairs->nelts; i++)
                 {
+                  const char *copyfrom_repos_root_url;
+                  const char *copyfrom_repos_relpath;
                   const char *copyfrom_url, *url;
-                  svn_revnum_t base_rev, copyfrom_rev;
+                  svn_revnum_t copyfrom_rev;
                   svn_client__copy_pair_t *pair = APR_ARRAY_IDX(copy_pairs, i,
                                                     svn_client__copy_pair_t *);
 
@@ -2128,23 +2130,18 @@ try_copy(const apr_array_header_t *sourc
 
                   SVN_ERR_ASSERT(svn_dirent_is_absolute(pair->src_abspath_or_url));
 
-                  SVN_ERR(svn_wc__node_get_copyfrom_info(
-                    NULL, NULL, &copyfrom_url, &copyfrom_rev, NULL,
-                    ctx->wc_ctx, pair->src_abspath_or_url, pool, iterpool));
-
-                  if (copyfrom_url)
-                    {
-                      url = copyfrom_url;
-                    }
-                  else
-                    {
-                      SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx,
-                                                   pair->src_abspath_or_url,
-                                                   pool, iterpool));
-                      SVN_ERR(svn_wc__node_get_base_rev(
-                        &base_rev, ctx->wc_ctx,
-                        pair->src_abspath_or_url, iterpool));
-                    }
+                  SVN_ERR(svn_wc__node_get_origin(NULL, &copyfrom_rev,
+                                                  &copyfrom_repos_relpath,
+                                                  &copyfrom_repos_root_url,
+                                                  NULL,
+                                                  ctx->wc_ctx,
+                                                  pair->src_abspath_or_url,
+                                                  FALSE, iterpool, iterpool));
+
+                  if (copyfrom_repos_relpath)
+                    url = svn_path_url_add_component2(copyfrom_repos_root_url,
+                                                      copyfrom_repos_relpath,
+                                                      pool);
 
                   if (url == NULL)
                     return svn_error_createf
@@ -2159,16 +2156,14 @@ try_copy(const apr_array_header_t *sourc
                     {
                       /* Default the peg revision to that of the WC entry. */
                       pair->src_peg_revision.kind = svn_opt_revision_number;
-                      pair->src_peg_revision.value.number =
-                        (copyfrom_url ? copyfrom_rev : base_rev);
+                      pair->src_peg_revision.value.number = copyfrom_rev;
                     }
 
                   if (pair->src_op_revision.kind == svn_opt_revision_base)
                     {
                       /* Use the entry's revision as the operational rev. */
                       pair->src_op_revision.kind = svn_opt_revision_number;
-                      pair->src_op_revision.value.number =
-                        (copyfrom_url ? copyfrom_rev : base_rev);
+                      pair->src_op_revision.value.number = copyfrom_rev;
                     }
                 }