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/05/06 01:14:16 UTC

svn commit: r1099992 - in /subversion/trunk/subversion: libsvn_client/commit_util.c libsvn_client/copy.c svn/cl.h svn/copy-cmd.c svn/notify.c tests/cmdline/copy_tests.py

Author: rhuijben
Date: Thu May  5 23:14:16 2011
New Revision: 1099992

URL: http://svn.apache.org/viewvc?rev=1099992&view=rev
Log:
Resolve issue #3314, by adding a similar copy source exist check for not
present nodes as was added to the normal commit handling in r1099411.

Also enable notifications for these svn cp DIR URL operations.
The primary reason why notifications weren't enabled earlier was that we
couldn't handle notifications for absolute paths... And for 1.7 most
notifications are absolute paths.

* subversion/libsvn_client/commit_util.c
  (harvest_committables): Add check_url_func and baton to arguments.
    When we find a not present node in copy mode, check if we should really
    add a delete operation via the check_func.
    Pass SVN_INVALID_REV as the base revision in copy mode, as the url
    where we copy to doesn't exist yet.
  (svn_client__harvest_committables,
   harvest_copy_committables): Update caller.
  (svn_client__condense_commit_items): Switch debug code to using SVN_DBG()
    to make it usable from the test suite.

* subversion/libsvn_client/copy.c
  (check_url_kind_baton): New struct.
  (check_url_kind): New function.
  (wc_to_repos_copy): Provide check_url_kind to harvesting.
  (repos_to_wc_copy_single): Unhook notification handler on error conditions.

* subversion/svn/cl.h
  (svn_cl__notifier_mark_wc_to_repos_copy): New function.

* subversion/svn/copy-cmd.c
  (svn_cl__copy): Handle todo by calling svn_cl__notifier_mark_wc_to_repos_copy
    instead of clearing the notify function for wc to url copies.

* subversion/svn/notify.c
  (notify_baton): Add boolean.
  (notify): Add 'copy of' when committing to a different url.
  (svn_cl__notifier_mark_wc_to_repos_copy): New function.

* subversion/tests/cmdline/copy_tests.py
  (wc_copy_parent_into_child): Update expected output.
  (copy_wc_url_with_absent): Remove XFail marker.

Modified:
    subversion/trunk/subversion/libsvn_client/commit_util.c
    subversion/trunk/subversion/libsvn_client/copy.c
    subversion/trunk/subversion/svn/cl.h
    subversion/trunk/subversion/svn/copy-cmd.c
    subversion/trunk/subversion/svn/notify.c
    subversion/trunk/subversion/tests/cmdline/copy_tests.py

Modified: subversion/trunk/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit_util.c?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit_util.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit_util.c Thu May  5 23:14:16 2011
@@ -334,6 +334,8 @@ harvest_committables(svn_wc_context_t *w
                      apr_hash_t *changelists,
                      svn_boolean_t skip_files,
                      svn_boolean_t skip_dirs,
+                     svn_client__check_url_kind_t check_url_func,
+                     void *check_url_baton,
                      svn_cancel_func_t cancel_func,
                      void *cancel_baton,
                      apr_pool_t *result_pool,
@@ -488,8 +490,44 @@ harvest_committables(svn_wc_context_t *w
      * We delete nodes that directly replace a node in it's ancestor
    */
 
-  if (is_deleted || is_not_present || is_replaced)
+  if (is_deleted || is_replaced)
     state_flags |= SVN_CLIENT_COMMIT_ITEM_DELETE;
+  else if (is_not_present)
+    {
+      if (! copy_mode)
+        return SVN_NO_ERROR;
+
+      /* We should check if we should really add a delete operation */
+      if (check_url_func)
+        {
+          svn_revnum_t revision;
+          const char *repos_relpath;
+          svn_node_kind_t kind;
+
+          /* Determine from what parent we would be the deleted child */
+          SVN_ERR(svn_wc__node_get_origin(NULL, &revision, &repos_relpath,
+                                          NULL, NULL, wc_ctx,
+                                          svn_dirent_dirname(local_abspath,
+                                                             scratch_pool),
+                                          FALSE, scratch_pool, scratch_pool));
+
+          repos_relpath = svn_relpath_join(repos_relpath,
+                                           svn_dirent_basename(local_abspath,
+                                                               NULL),
+                                           scratch_pool);
+
+          SVN_ERR(check_url_func(check_url_baton, &kind,
+                                 svn_path_url_add_component2(repos_root_url,
+                                                             repos_relpath,
+                                                             scratch_pool),
+                                 revision, scratch_pool));
+
+          if (kind == svn_node_none)
+            return SVN_NO_ERROR; /* This node can't be deleted */
+        }
+
+      state_flags |= SVN_CLIENT_COMMIT_ITEM_DELETE;
+    }
 
   /* Check for adds and copies */
   if (is_added && is_op_root)
@@ -621,10 +659,12 @@ harvest_committables(svn_wc_context_t *w
           /* Finally, add the committable item. */
           SVN_ERR(add_committable(committables, local_abspath, db_kind,
                                   repos_root_url,
-                                  commit_relpath 
+                                  copy_mode
                                       ? commit_relpath
                                       : node_relpath,
-                                  node_rev,
+                                  copy_mode
+                                      ? SVN_INVALID_REVNUM
+                                      : node_rev,
                                   cf_relpath,
                                   cf_rev,
                                   state_flags,
@@ -714,6 +754,7 @@ harvest_committables(svn_wc_context_t *w
                                        changelists,
                                        (depth < svn_depth_files),
                                        (depth < svn_depth_immediates),
+                                       check_url_func, check_url_baton,
                                        cancel_func, cancel_baton,
                                        result_pool,
                                        iterpool));
@@ -1019,6 +1060,7 @@ svn_client__harvest_committables(apr_has
                                    FALSE /* COPY_MODE_ROOT */,
                                    depth, just_locked, changelist_hash,
                                    FALSE, FALSE,
+                                   check_url_func, check_url_baton,
                                    ctx->cancel_func, ctx->cancel_baton,
                                    result_pool, iterpool));
     }
@@ -1083,6 +1125,8 @@ harvest_copy_committables(void *baton, v
                                FALSE,  /* JUST_LOCKED */
                                NULL,
                                FALSE, FALSE, /* skip files, dirs */
+                               btn->check_url_func,
+                               btn->check_url_baton,
                                btn->ctx->cancel_func,
                                btn->ctx->cancel_baton,
                                btn->result_pool, pool));
@@ -1210,11 +1254,10 @@ svn_client__condense_commit_items(const 
       else
         this_item->session_relpath = "";
     }
-
 #ifdef SVN_CLIENT_COMMIT_DEBUG
   /* ### TEMPORARY CODE ### */
-  fprintf(stderr, "COMMITTABLES: (base URL=%s)\n", *base_url);
-  fprintf(stderr, "   FLAGS     REV  REL-URL (COPY-URL)\n");
+  SVN_DBG(("COMMITTABLES: (base URL=%s)\n", *base_url));
+  SVN_DBG(("   FLAGS     REV  REL-URL (COPY-URL)\n"));
   for (i = 0; i < ci->nelts; i++)
     {
       svn_client_commit_item3_t *this_item
@@ -1231,11 +1274,11 @@ svn_client__condense_commit_items(const 
       flags[4] = (this_item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
                    ? 'c' : '-';
       flags[5] = '\0';
-      fprintf(stderr, "   %s  %6ld  '%s' (%s)\n",
-              flags,
-              this_item->revision,
-              this_item->url ? this_item->url : "",
-              this_item->copyfrom_url ? this_item->copyfrom_url : "none");
+      SVN_DBG(("   %s  %6ld  '%s' (%s)\n",
+               flags,
+               this_item->revision,
+               this_item->url ? this_item->url : "",
+               this_item->copyfrom_url ? this_item->copyfrom_url : "none"));
     }
 #endif /* SVN_CLIENT_COMMIT_DEBUG */
 

Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Thu May  5 23:14:16 2011
@@ -1134,6 +1134,39 @@ repos_to_repos_copy(const apr_array_head
   return svn_error_return(editor->close_edit(edit_baton, pool));
 }
 
+/* Baton for check_url_kind */
+struct check_url_kind_baton
+{
+  svn_ra_session_t *session;
+  const char *repos_root_url;
+  svn_boolean_t should_reparent;
+};
+
+/* Implements svn_client__check_url_kind_t for wc_to_repos_copy */
+static svn_error_t *
+check_url_kind(void *baton,
+               svn_node_kind_t *kind,
+               const char *url,
+               svn_revnum_t revision,
+               apr_pool_t *scratch_pool)
+{
+  struct check_url_kind_baton *cukb = baton;
+
+  /* If we don't have a session or can't use the session, get one */
+  if (!svn_uri_is_ancestor(cukb->repos_root_url, url))
+    *kind = svn_node_none;
+  else
+    {
+      cukb->should_reparent = TRUE;
+
+      SVN_ERR(svn_ra_reparent(cukb->session, url, scratch_pool));
+
+      SVN_ERR(svn_ra_check_path(cukb->session, "", revision,
+                                kind, scratch_pool));
+    }
+
+  return SVN_NO_ERROR;
+}
 
 /* ### Copy ...
  * COMMIT_INFO_P is ...
@@ -1152,7 +1185,7 @@ wc_to_repos_copy(const apr_array_header_
 {
   const char *message;
   const char *top_src_path, *top_dst_url;
-  const char *repos_root_url;
+  struct check_url_kind_baton cukb;
   const char *top_src_abspath;
   svn_ra_session_t *ra_session;
   const svn_delta_editor_t *editor;
@@ -1290,20 +1323,25 @@ wc_to_repos_copy(const apr_array_header_
   SVN_ERR(svn_client__ensure_revprop_table(&commit_revprops, revprop_table,
                                            message, ctx, pool));
 
+  cukb.session = ra_session;
+  SVN_ERR(svn_ra_get_repos_root2(ra_session, &cukb.repos_root_url, pool));
+  cukb.should_reparent = FALSE;
+
   /* Crawl the working copy for commit items. */
   /* ### TODO: Pass check_url_func for issue #3314 handling */
   SVN_ERR(svn_client__get_copy_committables(&committables,
                                             copy_pairs,
-                                            NULL, NULL, /* check_url_func */
+                                            check_url_kind, &cukb,
                                             ctx, pool, pool));
 
   /* The committables are keyed by the repository root */
-  SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
-
-  commit_items = apr_hash_get(committables, repos_root_url,
+  commit_items = apr_hash_get(committables, cukb.repos_root_url,
                               APR_HASH_KEY_STRING);
   SVN_ERR_ASSERT(commit_items != NULL);
 
+  if (cukb.should_reparent)
+    SVN_ERR(svn_ra_reparent(ra_session, top_dst_url, pool));
+
   /* If we are creating intermediate directories, tack them onto the list
      of committables. */
   if (make_parents)
@@ -1469,6 +1507,7 @@ repos_to_wc_copy_single(svn_client__copy
         svn_wc_notify_func2_t old_notify_func2 = ctx->notify_func2;
         void *old_notify_baton2 = ctx->notify_baton2;
         struct notification_adjust_baton nb;
+        svn_error_t *err;
 
         nb.inner_func = ctx->notify_func2;
         nb.inner_baton = ctx->notify_baton2;
@@ -1477,17 +1516,19 @@ repos_to_wc_copy_single(svn_client__copy
         ctx->notify_func2 = notification_adjust_func;
         ctx->notify_baton2 = &nb;
 
-        SVN_ERR(svn_client__checkout_internal(&pair->src_revnum,
-                                              pair->src_original,
-                                              tmp_abspath,
-                                              &pair->src_peg_revision,
-                                              &pair->src_op_revision, NULL,
-                                              svn_depth_infinity,
-                                              ignore_externals, FALSE, TRUE,
-                                              &sleep_needed, ctx, pool));
+        err = svn_client__checkout_internal(&pair->src_revnum,
+                                            pair->src_original,
+                                            tmp_abspath,
+                                            &pair->src_peg_revision,
+                                            &pair->src_op_revision, NULL,
+                                            svn_depth_infinity,
+                                            ignore_externals, FALSE, TRUE,
+                                            &sleep_needed, ctx, pool);
 
         ctx->notify_func2 = old_notify_func2;
         ctx->notify_baton2 = old_notify_baton2;
+
+        SVN_ERR(err);
       }
 
       /* Schedule dst_path for addition in parent, with copy history.

Modified: subversion/trunk/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/cl.h?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/cl.h (original)
+++ subversion/trunk/subversion/svn/cl.h Thu May  5 23:14:16 2011
@@ -568,6 +568,12 @@ svn_cl__notifier_mark_checkout(void *bat
 svn_error_t *
 svn_cl__notifier_mark_export(void *baton);
 
+/* Make the notifier for use with BATON print the appropriate notifications
+ * for a wc to repository copy
+ */
+svn_error_t *
+svn_cl__notifier_mark_wc_to_repos_copy(void *baton);
+
 /* Baton for use with svn_cl__check_externals_failed_notify_wrapper(). */
 struct svn_cl__check_externals_failed_notify_baton
 {

Modified: subversion/trunk/subversion/svn/copy-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/copy-cmd.c?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/copy-cmd.c (original)
+++ subversion/trunk/subversion/svn/copy-cmd.c Thu May  5 23:14:16 2011
@@ -95,24 +95,7 @@ svn_cl__copy(apr_getopt_t *os,
   else if ((! srcs_are_urls) && (dst_is_url))
     {
       /* WC->URL : Use notification. */
-      /* ### todo:
-
-         We'd like to use the notifier, but we MAY have a couple of
-         problems with that, the same problems that used to apply to
-         the old trace_editor:
-
-         1) We don't know where the commit editor for this case will
-            be anchored with respect to the repository, so we can't
-            use the DST_URL.
-
-         2) While we do know where the commit editor will be driven
-            from with respect to our working copy, we don't know what
-            basenames will be chosen for our committed things.  So a
-            copy of dir1/foo.c to http://.../dir2/foo-copy-c would
-            display like: "Adding   dir1/foo-copy.c", which could be a
-            bogus path.
-      */
-      ctx->notify_func2 = NULL;
+        SVN_ERR(svn_cl__notifier_mark_wc_to_repos_copy(ctx->notify_baton2));
     }
   else if ((srcs_are_urls) && (! dst_is_url))
     {

Modified: subversion/trunk/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/notify.c?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/notify.c (original)
+++ subversion/trunk/subversion/svn/notify.c Thu May  5 23:14:16 2011
@@ -46,6 +46,7 @@ struct notify_baton
   svn_boolean_t received_some_change;
   svn_boolean_t is_checkout;
   svn_boolean_t is_export;
+  svn_boolean_t is_wc_to_repos_copy;
   svn_boolean_t suppress_summary_lines;
   svn_boolean_t sent_first_txdelta;
   svn_boolean_t in_external;
@@ -684,7 +685,9 @@ notify(void *baton, const svn_wc_notify_
     case svn_wc_notify_commit_modified:
       /* xgettext: Align the %s's on this and the following 4 messages */
       if ((err = svn_cmdline_printf(pool,
-                                    _("Sending        %s\n"),
+                                    _("Sending %s       %s\n"),
+                                    nb->is_wc_to_repos_copy
+                                      ? _("copy of") : "",
                                     path_local)))
         goto print_error;
       break;
@@ -694,21 +697,27 @@ notify(void *baton, const svn_wc_notify_
       if (n->mime_type && svn_mime_type_is_binary(n->mime_type))
         {
           if ((err = svn_cmdline_printf(pool,
-                                        _("Adding  (bin)  %s\n"),
+                                        _("Adding %s (bin)  %s\n"),
+                                        nb->is_wc_to_repos_copy
+                                          ? _("copy of") : "",
                                         path_local)))
           goto print_error;
         }
       else
         {
           if ((err = svn_cmdline_printf(pool,
-                                        _("Adding         %s\n"),
+                                        _("Adding %s        %s\n"),
+                                        nb->is_wc_to_repos_copy
+                                          ? _("copy of") : "",
                                         path_local)))
             goto print_error;
         }
       break;
 
     case svn_wc_notify_commit_deleted:
-      if ((err = svn_cmdline_printf(pool, _("Deleting       %s\n"),
+      if ((err = svn_cmdline_printf(pool, _("Deleting %s      %s\n"),
+                                    nb->is_wc_to_repos_copy
+                                      ? _("copy of") : "",
                                     path_local)))
         goto print_error;
       break;
@@ -716,7 +725,9 @@ notify(void *baton, const svn_wc_notify_
     case svn_wc_notify_commit_replaced:
     case svn_wc_notify_commit_copied_replaced:
       if ((err = svn_cmdline_printf(pool,
-                                    _("Replacing      %s\n"),
+                                    _("Replacing %s     %s\n"),
+                                    nb->is_wc_to_repos_copy
+                                      ? _("copy of") : "",
                                     path_local)))
         goto print_error;
       break;
@@ -995,12 +1006,13 @@ svn_cl__get_notifier(svn_wc_notify_func2
                      svn_boolean_t suppress_summary_lines,
                      apr_pool_t *pool)
 {
-  struct notify_baton *nb = apr_palloc(pool, sizeof(*nb));
+  struct notify_baton *nb = apr_pcalloc(pool, sizeof(*nb));
 
   nb->received_some_change = FALSE;
   nb->sent_first_txdelta = FALSE;
   nb->is_checkout = FALSE;
   nb->is_export = FALSE;
+  nb->is_wc_to_repos_copy = FALSE;
   nb->suppress_summary_lines = suppress_summary_lines;
   nb->in_external = FALSE;
   nb->had_print_error = FALSE;
@@ -1033,6 +1045,15 @@ svn_cl__notifier_mark_export(void *baton
   return SVN_NO_ERROR;
 }
 
+svn_error_t *
+svn_cl__notifier_mark_wc_to_repos_copy(void *baton)
+{
+  struct notify_baton *nb = baton;
+
+  nb->is_wc_to_repos_copy = TRUE;
+  return SVN_NO_ERROR;
+}
+
 void
 svn_cl__check_externals_failed_notify_wrapper(void *baton,
                                               const svn_wc_notify_t *n,

Modified: subversion/trunk/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/copy_tests.py?rev=1099992&r1=1099991&r2=1099992&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/copy_tests.py Thu May  5 23:14:16 2011
@@ -1135,7 +1135,8 @@ def wc_copy_parent_into_child(sbox):
   os.chdir(wc_dir)
 
   svntest.actions.run_and_verify_svn(None,
-                                     ['\n', 'Committed revision 2.\n'], [],
+                                     ['Adding copy of        .\n',
+                                     '\n', 'Committed revision 2.\n'], [],
                                      'cp',
                                      '-m', 'a larger can',
                                      '.', F_B_url)
@@ -4959,7 +4960,6 @@ def move_wc_and_repo_dir_to_itself(sbox)
                                      '.*Cannot move URL.* into itself.*',
                                      'move', repo_url, repo_url)
 
-@XFail()
 @Issues(2763,3314)
 def copy_wc_url_with_absent(sbox):
   "copy wc to url with several absent children"



Re: svn commit: r1099992 - in /subversion/trunk/subversion: libsvn_client/commit_util.c libsvn_client/copy.c svn/cl.h svn/copy-cmd.c svn/notify.c tests/cmdline/copy_tests.py

Posted by Julian Foad <ju...@wandisco.com>.
On Fri, 2011-07-22, Dongsheng Song wrote:
> On Fri, May 6, 2011 at 07:14, <rh...@apache.org> wrote:
> > New Revision: 1099992
> >
> > URL: http://svn.apache.org/viewvc?rev=1099992&view=rev
> > Log:
> > Resolve issue #3314, by adding a similar copy source exist check for not
> > present nodes as was added to the normal commit handling in r1099411.
> >
> > Also enable notifications for these svn cp DIR URL operations.
[...]
> > * subversion/svn/notify.c
> >  (notify): Add 'copy of' when committing to a different url.
[...]

> In subversion/trunk/subversion/svn/notify.c, these changes make messages
> not translatable:
> 
> >       if ((err = svn_cmdline_printf(pool,
> > -                                    _("Sending        %s\n"),
> > +                                    _("Sending %s       %s\n"),
> > +                                    nb->is_wc_to_repos_copy
> > +                                      ? _("copy of") : "",
> >                                     path_local)))

Fixed in r1151906.

Thanks.

- Julian



Re: svn commit: r1099992 - in /subversion/trunk/subversion: libsvn_client/commit_util.c libsvn_client/copy.c svn/cl.h svn/copy-cmd.c svn/notify.c tests/cmdline/copy_tests.py

Posted by Dongsheng Song <do...@gmail.com>.
On Fri, May 6, 2011 at 07:14, <rh...@apache.org> wrote:
>
> Author: rhuijben
> Date: Thu May  5 23:14:16 2011
> New Revision: 1099992
>
> URL: http://svn.apache.org/viewvc?rev=1099992&view=rev
> Log:
> Resolve issue #3314, by adding a similar copy source exist check for not
> present nodes as was added to the normal commit handling in r1099411.
>
> Also enable notifications for these svn cp DIR URL operations.
> The primary reason why notifications weren't enabled earlier was that we
> couldn't handle notifications for absolute paths... And for 1.7 most
> notifications are absolute paths.
>
> * subversion/libsvn_client/commit_util.c
>  (harvest_committables): Add check_url_func and baton to arguments.
>    When we find a not present node in copy mode, check if we should really
>    add a delete operation via the check_func.
>    Pass SVN_INVALID_REV as the base revision in copy mode, as the url
>    where we copy to doesn't exist yet.
>  (svn_client__harvest_committables,
>   harvest_copy_committables): Update caller.
>  (svn_client__condense_commit_items): Switch debug code to using SVN_DBG()
>    to make it usable from the test suite.
>
> * subversion/libsvn_client/copy.c
>  (check_url_kind_baton): New struct.
>  (check_url_kind): New function.
>  (wc_to_repos_copy): Provide check_url_kind to harvesting.
>  (repos_to_wc_copy_single): Unhook notification handler on error conditions.
>
> * subversion/svn/cl.h
>  (svn_cl__notifier_mark_wc_to_repos_copy): New function.
>
> * subversion/svn/copy-cmd.c
>  (svn_cl__copy): Handle todo by calling svn_cl__notifier_mark_wc_to_repos_copy
>    instead of clearing the notify function for wc to url copies.
>
> * subversion/svn/notify.c
>  (notify_baton): Add boolean.
>  (notify): Add 'copy of' when committing to a different url.
>  (svn_cl__notifier_mark_wc_to_repos_copy): New function.
>
> * subversion/tests/cmdline/copy_tests.py
>  (wc_copy_parent_into_child): Update expected output.
>  (copy_wc_url_with_absent): Remove XFail marker.
>
> Modified:
>    subversion/trunk/subversion/libsvn_client/commit_util.c
>    subversion/trunk/subversion/libsvn_client/copy.c
>    subversion/trunk/subversion/svn/cl.h
>    subversion/trunk/subversion/svn/copy-cmd.c
>    subversion/trunk/subversion/svn/notify.c
>    subversion/trunk/subversion/tests/cmdline/copy_tests.py
>

In subversion/trunk/subversion/svn/notify.c, these changes make messages
not translatable:

>       if ((err = svn_cmdline_printf(pool,
> -                                    _("Sending        %s\n"),
> +                                    _("Sending %s       %s\n"),
> +                                    nb->is_wc_to_repos_copy
> +                                      ? _("copy of") : "",
>                                     path_local)))
>         goto print_error;
>       break;
> @@ -694,21 +697,27 @@ notify(void *baton, const svn_wc_notify_
>       if (n->mime_type && svn_mime_type_is_binary(n->mime_type))
>         {
>           if ((err = svn_cmdline_printf(pool,
> -                                        _("Adding  (bin)  %s\n"),
> +                                        _("Adding %s (bin)  %s\n"),
> +                                        nb->is_wc_to_repos_copy
> +                                          ? _("copy of") : "",
>                                         path_local)))
>           goto print_error;
>         }
>       else
>         {
>           if ((err = svn_cmdline_printf(pool,
> -                                        _("Adding         %s\n"),
> +                                        _("Adding %s        %s\n"),
> +                                        nb->is_wc_to_repos_copy
> +                                          ? _("copy of") : "",
>                                         path_local)))
>             goto print_error;
>         }
>       break;
>
>     case svn_wc_notify_commit_deleted:
> -      if ((err = svn_cmdline_printf(pool, _("Deleting       %s\n"),
> +      if ((err = svn_cmdline_printf(pool, _("Deleting %s      %s\n"),
> +                                    nb->is_wc_to_repos_copy
> +                                      ? _("copy of") : "",
>                                     path_local)))
>         goto print_error;
>       break;
> @@ -716,7 +725,9 @@ notify(void *baton, const svn_wc_notify_
>     case svn_wc_notify_commit_replaced:
>     case svn_wc_notify_commit_copied_replaced:
>       if ((err = svn_cmdline_printf(pool,
> -                                    _("Replacing      %s\n"),
> +                                    _("Replacing %s     %s\n"),
> +                                    nb->is_wc_to_repos_copy
> +                                      ? _("copy of") : "",
>                                     path_local)))

--
Dongsheng