You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/09/06 21:13:44 UTC

svn commit: r993127 [9/11] - in /subversion/branches/performance: ./ build/ build/generator/ notes/ notes/tree-conflicts/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/javahl/src/org...

Modified: subversion/branches/performance/subversion/svn/add-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/add-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/add-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/add-cmd.c Mon Sep  6 19:13:39 2010
@@ -29,11 +29,13 @@
 #define APR_WANT_STDIO
 #include <apr_want.h>
 
+#include "svn_path.h"
 #include "svn_client.h"
 #include "svn_error.h"
 #include "svn_pools.h"
 #include "cl.h"
 
+#include "svn_private_config.h"
 
 
 /*** Code. ***/
@@ -48,7 +50,7 @@ svn_cl__add(apr_getopt_t *os,
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
   int i;
-  apr_pool_t *subpool;
+  apr_pool_t *iterpool;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
                                                       opt_state->targets,
@@ -57,33 +59,42 @@ svn_cl__add(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_infinity;
 
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
-  subpool = svn_pool_create(pool);
+  /* Don't even attempt to modify the working copy if any of the
+   * targets look like URLs. URLs are invalid input. */
+  for (i = 0; i < targets->nelts; i++)
+    {
+      const char *target = APR_ARRAY_IDX(targets, i, const char *);
+
+      if (svn_path_is_url(target))
+        return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                                  NULL,
+                                                  _("'%s' is not a local path"),
+                                                  target));
+    }
+
+  iterpool = svn_pool_create(pool);
   for (i = 0; i < targets->nelts; i++)
     {
       const char *target = APR_ARRAY_IDX(targets, i, const char *);
 
-      svn_pool_clear(subpool);
+      svn_pool_clear(iterpool);
       SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
       SVN_ERR(svn_cl__try
               (svn_client_add4(target,
                                opt_state->depth,
                                opt_state->force, opt_state->no_ignore,
-                               opt_state->parents, ctx, subpool),
+                               opt_state->parents, ctx, iterpool),
                NULL, opt_state->quiet,
                SVN_ERR_ENTRY_EXISTS,
                SVN_ERR_WC_PATH_NOT_FOUND,
                SVN_NO_ERROR));
     }
 
-  svn_pool_destroy(subpool);
+  svn_pool_destroy(iterpool);
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/changelist-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/changelist-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/changelist-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/changelist-cmd.c Mon Sep  6 19:13:39 2010
@@ -24,6 +24,7 @@
 #include "svn_client.h"
 #include "svn_error_codes.h"
 #include "svn_error.h"
+#include "svn_path.h"
 #include "svn_utf.h"
 
 #include "cl.h"
@@ -44,6 +45,7 @@ svn_cl__changelist(apr_getopt_t *os,
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
   svn_depth_t depth = opt_state->depth;
+  int i;
 
   /* If we're not removing changelists, then our first argument should
      be the name of a changelist. */
@@ -70,10 +72,20 @@ svn_cl__changelist(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-  else
+  /* Don't even attempt to modify the working copy if any of the
+   * targets look like URLs. URLs are invalid input. */
+  for (i = 0; i < targets->nelts; i++)
+    {
+      const char *target = APR_ARRAY_IDX(targets, i, const char *);
+
+      if (svn_path_is_url(target))
+        return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                                  NULL,
+                                                  _("'%s' is not a local path"),
+                                                  target));
+    }
+
+  if (opt_state->quiet)
     /* FIXME: This is required because svn_client_create_context()
        always initializes ctx->notify_func2 to a wrapper function
        which calls ctx->notify_func() if it isn't NULL.  In other

Modified: subversion/branches/performance/subversion/svn/checkout-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/checkout-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/checkout-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/checkout-cmd.c Mon Sep  6 19:13:39 2010
@@ -113,8 +113,7 @@ svn_cl__checkout(apr_getopt_t *os,
     }
 
   if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2, TRUE,
-                                 FALSE, FALSE, pool));
+    SVN_ERR(svn_cl__notifier_mark_checkout(ctx->notify_baton2));
 
   subpool = svn_pool_create(pool);
   for (i = 0; i < targets->nelts - 1; ++i)

Modified: subversion/branches/performance/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/cl.h?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/cl.h (original)
+++ subversion/branches/performance/subversion/svn/cl.h Mon Sep  6 19:13:39 2010
@@ -357,9 +357,13 @@ svn_cl__conflict_handler(svn_wc_conflict
 /* Print out commit information found in COMMIT_INFO to the console.
  * POOL is used for temporay allocations.
  * COMMIT_INFO should not be NULL.
+ *
+ * This function implements svn_commit_callback2_t.
  */
 svn_error_t *
-svn_cl__print_commit_info(svn_commit_info_t *commit_info, apr_pool_t *pool);
+svn_cl__print_commit_info(const svn_commit_info_t *commit_info,
+                          void *baton,
+                          apr_pool_t *pool);
 
 
 /* Convert the date in DATA to a human-readable UTF-8-encoded string
@@ -539,25 +543,27 @@ svn_cl__merge_file_externally(const char
 /* Set *NOTIFY_FUNC_P and *NOTIFY_BATON_P to a notifier/baton for all
  * operations, allocated in POOL.
  *
- * If this is a checkout, set IS_CHECKOUT to true, so that the
- * notifier will print the appropriate summary line at the end of the
- * output.
- *
- * If this is an export, set IS_EXPORT to true, so that the
- * notifier will print the appropriate summary line at the end of the
- * output.
- *
  * If don't want a summary line at the end of notifications, set
  * SUPPRESS_FINAL_LINE.
  */
 svn_error_t *
 svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
                      void **notify_baton_p,
-                     svn_boolean_t is_checkout,
-                     svn_boolean_t is_export,
                      svn_boolean_t suppress_final_line,
                      apr_pool_t *pool);
 
+/* Make the notifier for use with BATON print the appropriate summary
+ * line at the end of the output.
+ */
+svn_error_t *
+svn_cl__notifier_mark_checkout(void *baton);
+
+/* Make the notifier for use with BATON print the appropriate summary
+ * line at the end of the output.
+ */
+svn_error_t *
+svn_cl__notifier_mark_export(void *baton);
+
 /* Print conflict stats accumulated in NOTIFY_BATON.
  * Return any error encountered during printing.
  * Do all allocations in POOL.*/

Modified: subversion/branches/performance/subversion/svn/cleanup-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/cleanup-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/cleanup-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/cleanup-cmd.c Mon Sep  6 19:13:39 2010
@@ -28,10 +28,12 @@
 /*** Includes. ***/
 
 #include "svn_client.h"
+#include "svn_path.h"
 #include "svn_pools.h"
 #include "svn_error.h"
 #include "cl.h"
 
+#include "svn_private_config.h"
 
 
 /*** Code. ***/
@@ -55,6 +57,19 @@ svn_cl__cleanup(apr_getopt_t *os,
   /* Add "." if user passed 0 arguments */
   svn_opt_push_implicit_dot_target(targets, pool);
 
+  /* Don't even attempt to modify the working copy if any of the
+   * targets look like URLs. URLs are invalid input. */
+  for (i = 0; i < targets->nelts; i++)
+    {
+      const char *target = APR_ARRAY_IDX(targets, i, const char *);
+
+      if (svn_path_is_url(target))
+        return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                                  NULL,
+                                                  _("'%s' is not a local path"),
+                                                  target));
+    }
+
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
   subpool = svn_pool_create(pool);

Modified: subversion/branches/performance/subversion/svn/commit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/commit-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/commit-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/commit-cmd.c Mon Sep  6 19:13:39 2010
@@ -38,6 +38,7 @@
 #include "svn_config.h"
 #include "cl.h"
 
+#include "svn_private_config.h"
 
 
 /* This implements the `svn_opt_subcommand_t' interface. */
@@ -54,7 +55,6 @@ svn_cl__commit(apr_getopt_t *os,
   const char *base_dir;
   svn_config_t *cfg;
   svn_boolean_t no_unlock = FALSE;
-  svn_commit_info_t *commit_info = NULL;
   int i;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
@@ -66,9 +66,10 @@ svn_cl__commit(apr_getopt_t *os,
     {
       const char *target = APR_ARRAY_IDX(targets, i, const char *);
       if (svn_path_is_url(target))
-        return svn_error_create(SVN_ERR_WC_BAD_PATH, NULL,
-                                "Must give local path (not URL) as the "
-                                "target of a commit");
+        return svn_error_return(
+                 svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                   _("'%s' is a URL, but URLs cannot be "
+                                     "commit targets"), target));
     }
 
   /* Add "." if user passed 0 arguments. */
@@ -93,10 +94,6 @@ svn_cl__commit(apr_getopt_t *os,
         base_dir = apr_pstrdup(pool, parent_dir);
     }
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_infinity;
 
@@ -116,8 +113,7 @@ svn_cl__commit(apr_getopt_t *os,
                                      ctx->config, pool));
 
   /* Commit. */
-  err = svn_client_commit4(&commit_info,
-                           targets,
+  err = svn_client_commit5(targets,
                            opt_state->depth,
                            no_unlock,
                            opt_state->keep_changelists,
@@ -140,8 +136,6 @@ svn_cl__commit(apr_getopt_t *os,
         }
     }
   SVN_ERR(svn_cl__cleanup_log_msg(ctx->log_msg_baton3, err, pool));
-  if (! err && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/copy-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/copy-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/copy-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/copy-cmd.c Mon Sep  6 19:13:39 2010
@@ -48,7 +48,6 @@ svn_cl__copy(apr_getopt_t *os,
   apr_array_header_t *targets, *sources;
   const char *src_path, *dst_path;
   svn_boolean_t srcs_are_urls, dst_is_url;
-  svn_commit_info_t *commit_info = NULL;
   svn_error_t *err;
   int i;
 
@@ -90,9 +89,6 @@ svn_cl__copy(apr_getopt_t *os,
   if ((! srcs_are_urls) && (! dst_is_url))
     {
       /* WC->WC */
-      if (! opt_state->quiet)
-        SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                     FALSE, FALSE, FALSE, pool));
     }
   else if ((! srcs_are_urls) && (dst_is_url))
     {
@@ -114,15 +110,18 @@ svn_cl__copy(apr_getopt_t *os,
             display like: "Adding   dir1/foo-copy.c", which could be a
             bogus path.
       */
+      ctx->notify_func2 = NULL;
     }
   else if ((srcs_are_urls) && (! dst_is_url))
     {
       /* URL->WC : Use checkout-style notification. */
-      if (! opt_state->quiet)
-        SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                     TRUE, FALSE, FALSE, pool));
+      SVN_ERR(svn_cl__notifier_mark_checkout(ctx->notify_baton2));
+    }
+  else
+    {
+      /* URL -> URL, meaning that no notification is needed. */
+      ctx->notify_func2 = NULL;
     }
-  /* else URL -> URL, meaning that no notification is needed. */
 
   if (! dst_is_url)
     {
@@ -138,7 +137,7 @@ svn_cl__copy(apr_getopt_t *os,
     SVN_ERR(svn_cl__make_log_msg_baton(&(ctx->log_msg_baton3), opt_state,
                                        NULL, ctx->config, pool));
 
-  err = svn_client_copy5(&commit_info, sources, dst_path, TRUE,
+  err = svn_client_copy6(sources, dst_path, TRUE,
                          opt_state->parents, opt_state->ignore_externals,
                          opt_state->revprop_table, ctx, pool);
 
@@ -147,8 +146,5 @@ svn_cl__copy(apr_getopt_t *os,
   else if (err)
     return svn_error_return(err);
 
-  if (commit_info && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
-
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/delete-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/delete-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/delete-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/delete-cmd.c Mon Sep  6 19:13:39 2010
@@ -46,7 +46,6 @@ svn_cl__delete(apr_getopt_t *os,
   svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
-  svn_commit_info_t *commit_info = NULL;
   svn_error_t *err;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
@@ -56,10 +55,6 @@ svn_cl__delete(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (! svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *)))
     {
       ctx->log_msg_func3 = NULL;
@@ -79,9 +74,8 @@ svn_cl__delete(apr_getopt_t *os,
 
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
-  err = svn_client_delete3(&commit_info, targets, opt_state->force,
-                           opt_state->keep_local, opt_state->revprop_table,
-                           ctx, pool);
+  err = svn_client_delete4(targets, opt_state->force, opt_state->keep_local,
+                           opt_state->revprop_table, ctx, pool);
   if (err)
     err = svn_cl__may_need_force(err);
 
@@ -90,8 +84,5 @@ svn_cl__delete(apr_getopt_t *os,
   else if (err)
     return svn_error_return(err);
 
-  if (commit_info && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
-
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/export-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/export-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/export-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/export-cmd.c Mon Sep  6 19:13:39 2010
@@ -34,6 +34,7 @@
 #include "cl.h"
 
 #include "svn_private_config.h"
+#include "private/svn_opt_private.h"
 
 
 /*** Code. ***/
@@ -81,11 +82,13 @@ svn_cl__export(apr_getopt_t *os,
       /* If given the cwd, pretend we weren't given anything. */
       if (strcmp("", to) == 0)
         to = svn_path_uri_decode(svn_uri_basename(truefrom, pool), pool);
+      else
+        /* svn_cl__eat_peg_revisions() but only on one target */
+        SVN_ERR(svn_opt__split_arg_at_peg_revision(&to, NULL, to, pool));
     }
 
   if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, TRUE, FALSE, pool));
+    SVN_ERR(svn_cl__notifier_mark_export(ctx->notify_baton2));
 
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_infinity;

Modified: subversion/branches/performance/subversion/svn/import-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/import-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/import-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/import-cmd.c Mon Sep  6 19:13:39 2010
@@ -48,7 +48,6 @@ svn_cl__import(apr_getopt_t *os,
   apr_array_header_t *targets;
   const char *path;
   const char *url;
-  svn_commit_info_t *commit_info = NULL;
 
   /* Import takes two arguments, for example
    *
@@ -106,10 +105,6 @@ svn_cl__import(apr_getopt_t *os,
       (SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
        _("Invalid URL '%s'"), url);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_infinity;
 
@@ -118,8 +113,7 @@ svn_cl__import(apr_getopt_t *os,
 
   SVN_ERR(svn_cl__cleanup_log_msg
           (ctx->log_msg_baton3,
-           svn_client_import3(&commit_info,
-                              path,
+           svn_client_import4(path,
                               url,
                               opt_state->depth,
                               opt_state->no_ignore,
@@ -128,8 +122,5 @@ svn_cl__import(apr_getopt_t *os,
                               ctx,
                               pool), pool));
 
-  if (commit_info && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
-
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/info-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/info-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/info-cmd.c Mon Sep  6 19:13:39 2010
@@ -87,12 +87,16 @@ print_info_xml(void *baton,
 {
   svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
   const char *rev_str;
+  const char *path_prefix = baton;
 
   if (SVN_IS_VALID_REVNUM(info->rev))
     rev_str = apr_psprintf(pool, "%ld", info->rev);
   else
     rev_str = apr_pstrdup(pool, _("Resource is not under version control."));
 
+  if (path_prefix)
+    target = svn_dirent_skip_ancestor(path_prefix, target);
+
   /* "<entry ...>" */
   svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "entry",
                         "path", svn_dirent_local_style(target, pool),
@@ -238,6 +242,11 @@ print_info(void *baton,
            const svn_info_t *info,
            apr_pool_t *pool)
 {
+  const char *path_prefix = baton;
+
+  if (path_prefix)
+    target = svn_dirent_skip_ancestor(path_prefix, target);
+
   SVN_ERR(svn_cmdline_printf(pool, _("Path: %s\n"),
                              svn_dirent_local_style(target, pool)));
 
@@ -484,6 +493,7 @@ svn_cl__info(apr_getopt_t *os,
   svn_boolean_t saw_a_problem = FALSE;
   svn_opt_revision_t peg_revision;
   svn_info_receiver_t receiver;
+  const char *path_prefix;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
                                                       opt_state->targets,
@@ -515,6 +525,8 @@ svn_cl__info(apr_getopt_t *os,
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_empty;
 
+  SVN_ERR(svn_dirent_get_absolute(&path_prefix, "", pool));
+
   for (i = 0; i < targets->nelts; i++)
     {
       const char *truepath;
@@ -527,13 +539,17 @@ svn_cl__info(apr_getopt_t *os,
       SVN_ERR(svn_opt_parse_path(&peg_revision, &truepath, target, subpool));
 
       /* If no peg-rev was attached to a URL target, then assume HEAD. */
-      if ((svn_path_is_url(target))
-          && (peg_revision.kind == svn_opt_revision_unspecified))
-        peg_revision.kind = svn_opt_revision_head;
+      if (svn_path_is_url(target))
+        {
+          if (peg_revision.kind == svn_opt_revision_unspecified)
+            peg_revision.kind = svn_opt_revision_head;
+        }
+      else
+        SVN_ERR(svn_dirent_get_absolute(&truepath, truepath, subpool));
 
-      err = svn_client_info2(truepath,
+      err = svn_client_info3(truepath,
                              &peg_revision, &(opt_state->start_revision),
-                             receiver, NULL, opt_state->depth,
+                             receiver, (void *) path_prefix, opt_state->depth,
                              opt_state->changelists, ctx, subpool);
 
       if (err)

Modified: subversion/branches/performance/subversion/svn/lock-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/lock-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/lock-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/lock-cmd.c Mon Sep  6 19:13:39 2010
@@ -101,9 +101,6 @@ svn_cl__lock(apr_getopt_t *os,
   /* Get comment. */
   SVN_ERR(get_comment(&comment, ctx, opt_state, pool));
 
-  SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2, FALSE,
-                               FALSE, FALSE, pool));
-
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
   return svn_client_lock(targets, comment, opt_state->force, ctx, pool);

Modified: subversion/branches/performance/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/log-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/log-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/log-cmd.c Mon Sep  6 19:13:39 2010
@@ -637,7 +637,7 @@ svn_cl__log(apr_getopt_t *os,
         }
     }
 
-  /* Strip peg revision if targets contains an URI. */
+  /* Strip peg revision. */
   SVN_ERR(svn_opt_parse_path(&peg_revision, &true_path, target, pool));
   APR_ARRAY_IDX(targets, 0, const char *) = true_path;
 
@@ -663,10 +663,6 @@ svn_cl__log(apr_getopt_t *os,
   lb.merge_stack = apr_array_make(pool, 0, sizeof(svn_revnum_t));
   lb.pool = pool;
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (opt_state->xml)
     {
       /* If output is not incremental, output the XML header and wrap

Modified: subversion/branches/performance/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/main.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/main.c (original)
+++ subversion/branches/performance/subversion/svn/main.c Mon Sep  6 19:13:39 2010
@@ -463,8 +463,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
 
   { "changelist", svn_cl__changelist, {"cl"}, N_
     ("Associate (or dissociate) changelist CLNAME with the named files.\n"
-     "usage: 1. changelist CLNAME TARGET...\n"
-     "       2. changelist --remove TARGET...\n"),
+     "usage: 1. changelist CLNAME PATH...\n"
+     "       2. changelist --remove PATH...\n"),
     { 'q', 'R', opt_depth, opt_remove, opt_targets, opt_changelist} },
 
   { "checkout", svn_cl__checkout, {"co"}, N_
@@ -497,7 +497,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
   { "cleanup", svn_cl__cleanup, {0}, N_
     ("Recursively clean up the working copy, removing locks, resuming\n"
      "unfinished operations, etc.\n"
-     "usage: cleanup [PATH...]\n"),
+     "usage: cleanup [WCPATH...]\n"),
     {opt_merge_cmd} },
 
   { "commit", svn_cl__commit, {"ci"},
@@ -662,15 +662,18 @@ const svn_opt_subcommand_desc2_t svn_cl_
      {opt_force_log, N_("force validity of lock comment source")}} },
 
   { "log", svn_cl__log, {0}, N_
-    ("Show the log messages for a set of revision(s) and/or file(s).\n"
-     "usage: 1. log [PATH]\n"
+    ("Show the log messages for a set of revision(s) and/or path(s).\n"
+     "usage: 1. log [PATH][@REV]\n"
      "       2. log URL[@REV] [PATH...]\n"
      "\n"
-     "  1. Print the log messages for a local PATH (default: '.').\n"
-     "     The default revision range is BASE:1.\n"
+     "  1. Print the log messages for the URL corresponding to PATH\n"
+     "     (default: '.'). If specified, REV is the revision in which the\n"
+     "     URL is first looked up, and the default revision range is REV:1.\n"
+     "     If REV is not specified, the default revision range is BASE:1,\n"
+     "     since the URL might not exist in the HEAD revision.\n"
      "\n"
      "  2. Print the log messages for the PATHs (default: '.') under URL.\n"
-     "     If specified, REV determines in which revision the URL is first\n"
+     "     If specified, REV is the revision in which the URL is first\n"
      "     looked up, and the default revision range is REV:1; otherwise,\n"
      "     the URL is looked up in HEAD, and the default revision range is\n"
      "     HEAD:1.\n"
@@ -691,8 +694,10 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  Examples:\n"
      "    svn log\n"
      "    svn log foo.c\n"
+     "    svn log bar.c@42\n"
      "    svn log http://www.example.com/repo/project/foo.c\n"
-     "    svn log http://www.example.com/repo/project foo.c bar.c\n"),
+     "    svn log http://www.example.com/repo/project foo.c bar.c\n"
+     "    svn log http://www.example.com/repo/project@50 foo.c bar.c\n"),
     {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, opt_incremental,
      opt_xml, 'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,
      opt_show_diff, opt_diff_cmd, opt_internal_diff, 'x'},
@@ -1184,7 +1189,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
 
   { "upgrade", svn_cl__upgrade, {0}, N_
     ("Upgrade the metadata storage format for a working copy.\n"
-     "usage: upgrade TARGET...\n"),
+     "usage: upgrade WCPATH...\n"),
     {0} },
 
   { NULL, NULL, {0}, NULL, {0} }
@@ -2213,6 +2218,20 @@ main(int argc, const char *argv[])
      subcommands will populate the ctx->log_msg_baton3. */
   ctx->log_msg_func3 = svn_cl__get_log_message;
 
+  /* Set up the notifier. */
+  if (((subcommand->cmd_func != svn_cl__status) && !opt_state.quiet)
+        || ((subcommand->cmd_func == svn_cl__status) && !opt_state.xml))
+    {
+      err = svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
+                                 FALSE, pool);
+      if (err)
+        return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+    }
+
+  /* Set up our commit callback.  We leave the callback NULL. */
+  if (!opt_state.quiet)
+    ctx->commit_callback2 = svn_cl__print_commit_info;
+
   /* Set up our cancellation support. */
   ctx->cancel_func = svn_cl__check_cancel;
   apr_signal(SIGINT, signal_handler);

Modified: subversion/branches/performance/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/merge-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/merge-cmd.c Mon Sep  6 19:13:39 2010
@@ -271,10 +271,6 @@ svn_cl__merge(apr_getopt_t *os,
         }
     }
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (opt_state->extensions)
     options = svn_cstring_split(opt_state->extensions, " \t\n\r", TRUE, pool);
   else

Modified: subversion/branches/performance/subversion/svn/mkdir-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/mkdir-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/mkdir-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/mkdir-cmd.c Mon Sep  6 19:13:39 2010
@@ -47,7 +47,6 @@ svn_cl__mkdir(apr_getopt_t *os,
   svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
-  svn_commit_info_t *commit_info = NULL;
   svn_error_t *err;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
@@ -57,10 +56,6 @@ svn_cl__mkdir(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   if (! svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *)))
     {
       ctx->log_msg_func3 = NULL;
@@ -80,7 +75,7 @@ svn_cl__mkdir(apr_getopt_t *os,
 
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
-  err = svn_client_mkdir3(&commit_info, targets, opt_state->parents,
+  err = svn_client_mkdir4(targets, opt_state->parents,
                           opt_state->revprop_table, ctx, pool);
 
   if (ctx->log_msg_func3)
@@ -101,8 +96,5 @@ svn_cl__mkdir(apr_getopt_t *os,
         return svn_error_return(err);
     }
 
-  if (commit_info && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
-
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/move-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/move-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/move-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/move-cmd.c Mon Sep  6 19:13:39 2010
@@ -48,7 +48,6 @@ svn_cl__move(apr_getopt_t *os,
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
   const char *dst_path;
-  svn_commit_info_t *commit_info = NULL;
   svn_error_t *err;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
@@ -66,10 +65,6 @@ svn_cl__move(apr_getopt_t *os,
          _("Cannot specify revisions (except HEAD) with move operations"));
     }
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   dst_path = APR_ARRAY_IDX(targets, targets->nelts - 1, const char *);
   apr_array_pop(targets);
 
@@ -89,7 +84,7 @@ svn_cl__move(apr_getopt_t *os,
 
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
-  err = svn_client_move5(&commit_info, targets, dst_path, opt_state->force,
+  err = svn_client_move6(targets, dst_path, opt_state->force,
                          TRUE, opt_state->parents, opt_state->revprop_table,
                          ctx, pool);
 
@@ -101,8 +96,5 @@ svn_cl__move(apr_getopt_t *os,
   else if (err)
     return svn_error_return(err);
 
-  if (commit_info && ! opt_state->quiet)
-    SVN_ERR(svn_cl__print_commit_info(commit_info, pool));
-
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/performance/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/notify.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/notify.c (original)
+++ subversion/branches/performance/subversion/svn/notify.c Mon Sep  6 19:13:39 2010
@@ -817,8 +817,6 @@ notify(void *baton, const svn_wc_notify_
 svn_error_t *
 svn_cl__get_notifier(svn_wc_notify_func2_t *notify_func_p,
                      void **notify_baton_p,
-                     svn_boolean_t is_checkout,
-                     svn_boolean_t is_export,
                      svn_boolean_t suppress_final_line,
                      apr_pool_t *pool)
 {
@@ -826,8 +824,8 @@ svn_cl__get_notifier(svn_wc_notify_func2
 
   nb->received_some_change = FALSE;
   nb->sent_first_txdelta = FALSE;
-  nb->is_checkout = is_checkout;
-  nb->is_export = is_export;
+  nb->is_checkout = FALSE;
+  nb->is_export = FALSE;
   nb->suppress_final_line = suppress_final_line;
   nb->in_external = FALSE;
   nb->had_print_error = FALSE;
@@ -841,3 +839,21 @@ svn_cl__get_notifier(svn_wc_notify_func2
   *notify_baton_p = nb;
   return SVN_NO_ERROR;
 }
+
+svn_error_t *
+svn_cl__notifier_mark_checkout(void *baton)
+{
+  struct notify_baton *nb = baton;
+
+  nb->is_checkout = TRUE;
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_cl__notifier_mark_export(void *baton)
+{
+  struct notify_baton *nb = baton;
+
+  nb->is_export = TRUE;
+  return SVN_NO_ERROR;
+}

Modified: subversion/branches/performance/subversion/svn/patch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/patch-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/patch-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/patch-cmd.c Mon Sep  6 19:13:39 2010
@@ -72,10 +72,6 @@ svn_cl__patch(apr_getopt_t *os,
                                   APR_ARRAY_IDX(targets, 0, const char *),
                                   pool));
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, pool));
-
   SVN_ERR(svn_client_patch(abs_patch_path, abs_target_path,
                            opt_state->dry_run, opt_state->strip_count,
                            opt_state->reverse_diff,

Modified: subversion/branches/performance/subversion/svn/propdel-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/propdel-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/propdel-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/propdel-cmd.c Mon Sep  6 19:13:39 2010
@@ -91,8 +91,8 @@ svn_cl__propdel(apr_getopt_t *os,
 
   if (! opt_state->quiet)
     {
-      SVN_ERR(svn_cl__get_notifier(&nwb.real_func, &nwb.real_baton, FALSE,
-                                   FALSE, FALSE, pool));
+      nwb.real_func = ctx->notify_func2;
+      nwb.real_baton = ctx->notify_baton2;
       ctx->notify_func2 = notify_wrapper;
       ctx->notify_baton2 = &nwb;
     }
@@ -129,15 +129,14 @@ svn_cl__propdel(apr_getopt_t *os,
       for (i = 0; i < targets->nelts; i++)
         {
           const char *target = APR_ARRAY_IDX(targets, i, const char *);
-          svn_commit_info_t *commit_info;
 
           svn_pool_clear(subpool);
           SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
 
           /* Pass FALSE for 'skip_checks' because it doesn't matter here,
              and opt_state->force doesn't apply to this command anyway. */
-          SVN_ERR(svn_cl__try(svn_client_propset3
-                              (&commit_info, pname_utf8,
+          SVN_ERR(svn_cl__try(svn_client_propset4(
+                               pname_utf8,
                                NULL, target,
                                opt_state->depth,
                                FALSE, SVN_INVALID_REVNUM,

Modified: subversion/branches/performance/subversion/svn/propedit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/propedit-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/propedit-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/propedit-cmd.c Mon Sep  6 19:13:39 2010
@@ -45,6 +45,26 @@
 
 
 /*** Code. ***/
+struct commit_info_baton
+{
+  const char *pname_utf8;
+  const char *target_local;
+};
+
+static svn_error_t *
+commit_info_handler(const svn_commit_info_t *commit_info,
+                    void *baton,
+                    apr_pool_t *pool)
+{
+  struct commit_info_baton *cib = baton;
+
+  SVN_ERR(svn_cmdline_printf(pool,
+                             _("Set new value for property '%s' on '%s'\n"),
+                             cib->pname_utf8, cib->target_local));
+  SVN_ERR(svn_cl__print_commit_info(commit_info, NULL, pool));
+
+  return SVN_NO_ERROR;
+}
 
 /* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
@@ -153,6 +173,7 @@ svn_cl__propedit(apr_getopt_t *os,
   else  /* operate on a normal, versioned property (not a revprop) */
     {
       apr_pool_t *subpool = svn_pool_create(pool);
+      struct commit_info_baton cib;
 
       /* The customary implicit dot rule has been prone to user error
        * here.  For example, Jon Trowbridge <tr...@gnu.og> did
@@ -178,6 +199,8 @@ svn_cl__propedit(apr_getopt_t *os,
 
       SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
+      cib.pname_utf8 = pname_utf8;
+
       /* For each target, edit the property PNAME. */
       for (i = 0; i < targets->nelts; i++)
         {
@@ -255,11 +278,14 @@ svn_cl__propedit(apr_getopt_t *os,
 
           target_local = svn_path_is_url(target) ? target
             : svn_dirent_local_style(target, subpool);
+          cib.target_local = target_local;
+
+          ctx->commit_callback2 = commit_info_handler;
+          ctx->commit_baton = &cib;
 
           /* ...and re-set the property's value accordingly. */
           if (edited_propval && !svn_string_compare(propval, edited_propval))
             {
-              svn_commit_info_t *commit_info = NULL;
               svn_error_t *err = SVN_NO_ERROR;
 
               svn_cl__check_boolean_prop_val(pname_utf8, edited_propval->data,
@@ -270,8 +296,7 @@ svn_cl__propedit(apr_getopt_t *os,
                                                    opt_state, NULL, ctx->config,
                                                    subpool));
 
-              err = svn_client_propset3(&commit_info,
-                                        pname_utf8, edited_propval, target,
+              err = svn_client_propset4(pname_utf8, edited_propval, target,
                                         svn_depth_empty, opt_state->force,
                                         base_rev, NULL, opt_state->revprop_table,
                                         ctx, subpool);
@@ -284,14 +309,10 @@ svn_cl__propedit(apr_getopt_t *os,
               /* Print a message if we successfully committed or if it
                  was just a wc propset (but not if the user aborted an URL
                  propedit). */
-              if (commit_info || ! svn_path_is_url(target))
-                SVN_ERR
-                  (svn_cmdline_printf
-                   (subpool, _("Set new value for property '%s' on '%s'\n"),
-                    pname_utf8, target_local));
-
-              if (commit_info && ! opt_state->quiet)
-                SVN_ERR(svn_cl__print_commit_info(commit_info, subpool));
+              if (!svn_path_is_url(target))
+                SVN_ERR(svn_cmdline_printf(
+                        subpool, _("Set new value for property '%s' on '%s'\n"),
+                        pname_utf8, target_local));
             }
           else
             {

Modified: subversion/branches/performance/subversion/svn/propset-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/propset-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/propset-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/propset-cmd.c Mon Sep  6 19:13:39 2010
@@ -100,10 +100,6 @@ svn_cl__propset(apr_getopt_t *os,
                                                       opt_state->targets,
                                                       ctx, scratch_pool));
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   /* Implicit "." is okay for revision properties; it just helps
      us find the right repository. */
   if (opt_state->revprop)
@@ -179,12 +175,11 @@ svn_cl__propset(apr_getopt_t *os,
       for (i = 0; i < targets->nelts; i++)
         {
           const char *target = APR_ARRAY_IDX(targets, i, const char *);
-          svn_commit_info_t *commit_info;
 
           svn_pool_clear(iterpool);
           SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
-          SVN_ERR(svn_cl__try(svn_client_propset3
-                              (&commit_info, pname_utf8, propval, target,
+          SVN_ERR(svn_cl__try(svn_client_propset4(
+                               pname_utf8, propval, target,
                                opt_state->depth, opt_state->force,
                                SVN_INVALID_REVNUM, opt_state->changelists,
                                NULL, ctx, iterpool),

Modified: subversion/branches/performance/subversion/svn/resolve-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/resolve-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/resolve-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/resolve-cmd.c Mon Sep  6 19:13:39 2010
@@ -88,10 +88,6 @@ svn_cl__resolve(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_empty;
 

Modified: subversion/branches/performance/subversion/svn/resolved-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/resolved-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/resolved-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/resolved-cmd.c Mon Sep  6 19:13:39 2010
@@ -59,10 +59,6 @@ svn_cl__resolved(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_empty;
 

Modified: subversion/branches/performance/subversion/svn/revert-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/revert-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/revert-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/revert-cmd.c Mon Sep  6 19:13:39 2010
@@ -56,10 +56,6 @@ svn_cl__revert(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   /* Revert is especially conservative, by default it is as
      nonrecursive as possible. */
   if (opt_state->depth == svn_depth_unknown)

Modified: subversion/branches/performance/subversion/svn/status-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/status-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/status-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/status-cmd.c Mon Sep  6 19:13:39 2010
@@ -262,11 +262,6 @@ svn_cl__status(apr_getopt_t *os,
   /* We want our -u statuses to be against HEAD. */
   rev.kind = svn_opt_revision_head;
 
-  /* The notification callback, leave the notifier as NULL in XML mode */
-  if (! opt_state->xml)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   sb.had_print_error = FALSE;
 
   if (opt_state->xml)

Modified: subversion/branches/performance/subversion/svn/switch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/switch-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/switch-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/switch-cmd.c Mon Sep  6 19:13:39 2010
@@ -145,10 +145,6 @@ svn_cl__switch(apr_getopt_t *os,
   /* Canonicalize the URL. */
   switch_url = svn_uri_canonicalize(switch_url, scratch_pool);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   /* Deal with depthstuffs. */
   if (opt_state->set_depth != svn_depth_unknown)
     {

Modified: subversion/branches/performance/subversion/svn/unlock-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/unlock-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/unlock-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/unlock-cmd.c Mon Sep  6 19:13:39 2010
@@ -57,9 +57,6 @@ svn_cl__unlock(apr_getopt_t *os,
   if (! targets->nelts)
     return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, 0, NULL);
 
-  SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2, FALSE,
-                               FALSE, FALSE, scratch_pool));
-
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, scratch_pool));
 
   return svn_error_return(

Modified: subversion/branches/performance/subversion/svn/update-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/update-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/update-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/update-cmd.c Mon Sep  6 19:13:39 2010
@@ -73,10 +73,6 @@ svn_cl__update(apr_getopt_t *os,
                                        scratch_pool));
     }
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   /* Deal with depthstuffs. */
   if (opt_state->set_depth != svn_depth_unknown)
     {

Modified: subversion/branches/performance/subversion/svn/upgrade-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/upgrade-cmd.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/upgrade-cmd.c (original)
+++ subversion/branches/performance/subversion/svn/upgrade-cmd.c Mon Sep  6 19:13:39 2010
@@ -57,10 +57,6 @@ svn_cl__upgrade(apr_getopt_t *os,
   /* Add "." if user passed 0 arguments */
   svn_opt_push_implicit_dot_target(targets, scratch_pool);
 
-  if (! opt_state->quiet)
-    SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
-                                 FALSE, FALSE, FALSE, scratch_pool));
-
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, scratch_pool));
 
   iterpool = svn_pool_create(scratch_pool);

Modified: subversion/branches/performance/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/svn/util.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/svn/util.c (original)
+++ subversion/branches/performance/subversion/svn/util.c Mon Sep  6 19:13:39 2010
@@ -66,7 +66,8 @@
 
 
 svn_error_t *
-svn_cl__print_commit_info(svn_commit_info_t *commit_info,
+svn_cl__print_commit_info(const svn_commit_info_t *commit_info,
+                          void *baton,
                           apr_pool_t *pool)
 {
   if (SVN_IS_VALID_REVNUM(commit_info->revision))

Propchange: subversion/branches/performance/subversion/svnrdump/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Sep  6 19:13:39 2010
@@ -0,0 +1,7 @@
+svnrdump
+svnrdump.exe
+.libs
+*.o
+*.lo
+*~
+.*~

Modified: subversion/branches/performance/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/basic_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/basic_tests.py Mon Sep  6 19:13:39 2010
@@ -33,6 +33,7 @@ from svntest import wc
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
+SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Wimp = svntest.testcase.Wimp
 Item = wc.StateItem
@@ -703,8 +704,11 @@ def basic_cleanup(sbox):
 
   svntest.actions.run_and_verify_status(wc_dir, expected_output)
 
-  # corrupted/non-existing temporary directory should be restored
-  svntest.actions.remove_admin_tmp_dir(B_path)
+  # corrupted/non-existing temporary directory should be restored while
+  # we are not at single-db (where this tmp dir will be gone)
+  tmp_path = os.path.join(B_path, svntest.main.get_admin_name(), 'tmp')
+  if os.path.exists(tmp_path):
+    svntest.main.safe_rmtree(tmp_path)
 
   # Run cleanup (### todo: cleanup doesn't currently print anything)
   svntest.actions.run_and_verify_svn("Cleanup command", None, [],
@@ -1962,6 +1966,7 @@ def basic_rm_urls_one_repo(sbox):
                                         expected_disk,
                                         expected_status)
 
+# Test for issue #1199
 def basic_rm_urls_multi_repos(sbox):
   "remotely remove directories from two repositories"
 
@@ -2508,6 +2513,13 @@ def delete_from_url_with_spaces(sbox):
                                       'rm', sbox.repo_url + '/Dir%20With/Spaces',
                                       '-m', 'Deleted')
 
+def meta_correct_library_being_used(sbox):
+  "verify that neon/serf are compiled if tested"
+  expected_re = (r'^\* ra_%s :' % svntest.main.options.http_library)
+  expected_output = svntest.verify.RegexOutput(expected_re, match_all=False)
+  svntest.actions.run_and_verify_svn("is $http_library available",
+                                     expected_output, [], '--version')
+
 #----------------------------------------------------------------------
 
 ########################################################################
@@ -2565,6 +2577,8 @@ test_list = [ None,
               basic_add_svn_format_file,
               basic_mkdir_mix_targets,
               delete_from_url_with_spaces,
+              SkipUnless(meta_correct_library_being_used,
+                         svntest.main.is_ra_type_dav),
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/performance/subversion/tests/cmdline/checkout_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/checkout_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/checkout_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/checkout_tests.py Mon Sep  6 19:13:39 2010
@@ -151,13 +151,88 @@ def make_local_tree(sbox, mod_files=Fals
 #----------------------------------------------------------------------
 
 def checkout_with_obstructions(sbox):
-  """co with obstructions should fail without --force"""
+  """co with obstructions conflicts without --force"""
 
   make_local_tree(sbox, False, False)
 
-  svntest.actions.run_and_verify_svn("No error where some expected",
-                                     None, svntest.verify.AnyOutput,
-                                     "co", sbox.repo_url, sbox.wc_dir)
+  #svntest.factory.make(sbox,
+  #       """# Checkout with unversioned obstructions lying around.
+  #          svn co url wc_dir
+  #          svn status""")
+  #svntest.factory.make(sbox,
+  #       """# Now see to it that we can recover from the obstructions.
+  #          rm -rf A iota
+  #          svn up""")
+  #exit(0)
+
+  wc_dir = sbox.wc_dir
+  url = sbox.repo_url
+
+  # Checkout with unversioned obstructions causes tree conflicts.
+  # svn co url wc_dir
+  expected_output = svntest.wc.State(wc_dir, {
+    'iota'              : Item(status='  ', treeconflict='C'),
+    'A'                 : Item(status='  ', treeconflict='C'),
+  })
+
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.remove('A/B', 'A/B/E', 'A/B/E/beta', 'A/B/E/alpha', 'A/B/F',
+    'A/B/lambda', 'A/D', 'A/D/G', 'A/D/G/rho', 'A/D/G/pi', 'A/D/G/tau',
+    'A/D/H', 'A/D/H/psi', 'A/D/H/omega', 'A/D/H/chi', 'A/D/gamma', 'A/C')
+
+  actions.run_and_verify_checkout2(False, url, wc_dir, expected_output,
+    expected_disk, None, None, None, None)
+
+  # svn status
+  expected_status = actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A', 'iota', status='? ', wc_rev=None,
+    treeconflict='C')
+  expected_status.tweak('A/D', 'A/D/G', 'A/D/G/rho', 'A/D/G/pi', 'A/D/G/tau',
+    'A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi', 'A/D/gamma', 'A/B',
+    'A/B/E', 'A/B/E/beta', 'A/B/E/alpha', 'A/B/F', 'A/B/lambda', 'A/C',
+    wc_rev=None)
+  expected_status.tweak('A/mu', status='? ', wc_rev=None)
+
+  actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+
+  # Now see to it that we can recover from the obstructions.
+  # rm -rf A iota
+  svntest.main.safe_rmtree( os.path.join(wc_dir, 'A') )
+  os.remove( os.path.join(wc_dir, 'iota') )
+
+  # svn up
+  expected_output = svntest.wc.State(wc_dir, {
+    'A'                 : Item(status='A '),
+    'A/D'               : Item(status='A '),
+    'A/D/gamma'         : Item(status='A '),
+    'A/D/G'             : Item(status='A '),
+    'A/D/G/rho'         : Item(status='A '),
+    'A/D/G/pi'          : Item(status='A '),
+    'A/D/G/tau'         : Item(status='A '),
+    'A/D/H'             : Item(status='A '),
+    'A/D/H/chi'         : Item(status='A '),
+    'A/D/H/omega'       : Item(status='A '),
+    'A/D/H/psi'         : Item(status='A '),
+    'A/B'               : Item(status='A '),
+    'A/B/E'             : Item(status='A '),
+    'A/B/E/beta'        : Item(status='A '),
+    'A/B/E/alpha'       : Item(status='A '),
+    'A/B/F'             : Item(status='A '),
+    'A/B/lambda'        : Item(status='A '),
+    'A/C'               : Item(status='A '),
+    'A/mu'              : Item(status='A '),
+    'iota'              : Item(status='A '),
+  })
+
+  expected_disk = svntest.main.greek_state.copy()
+
+  expected_status = actions.get_virginal_state(wc_dir, 1)
+
+  actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
+    expected_status, None, None, None, None, None, False, wc_dir)
+
+
 
 #----------------------------------------------------------------------
 
@@ -209,23 +284,83 @@ def forced_checkout_of_file_with_dir_obs
 #----------------------------------------------------------------------
 
 def forced_checkout_of_dir_with_file_obstructions(sbox):
-  """forced co fails if a file obstructs a dir"""
+  """forced co flags conflict if a file obstructs a dir"""
 
   make_local_tree(sbox, False, False)
 
-  # Make the "other" working copy
-  other_wc = sbox.add_wc_path('other')
-  os.mkdir(other_wc)
-  svntest.main.file_append(os.path.join(other_wc, "A"), "The file A")
+  #svntest.factory.make(sbox,"""
+  #          mkdir wc_dir_other
+  #          echo "The file A" > wc_dir_other/A
+  #          svn co --force url wc_dir_other
+  #          """)
+  #svntest.factory.make(sbox,"""
+  #          # Now see to it that we can recover from the obstructions.
+  #          rm wc_dir_other/A
+  #          svn up wc_dir_other""")
+  #exit(0)
 
-  # Checkout the standard greek repos into a directory that has a file named
-  # "A" obstructing the dir "A" in the repos.  This should fail.
-  exit_code, sout, serr = svntest.actions.run_and_verify_svn(
-    "Expected error during co", None, svntest.verify.AnyOutput,
-    "co", "--force", sbox.repo_url, other_wc)
+  url = sbox.repo_url
+  wc_dir_other = sbox.add_wc_path('other')
+
+  other_A = os.path.join(wc_dir_other, 'A')
+
+  # mkdir wc_dir_other
+  os.makedirs(wc_dir_other)
+
+  # echo "The file A" > wc_dir_other/A
+  svntest.main.file_write(other_A, 'The file A\n')
+
+  # svn co --force url wc_dir_other
+  expected_output = svntest.wc.State(wc_dir_other, {
+    'iota'              : Item(status='A '),
+    'A'                 : Item(status='  ', treeconflict='C'),
+  })
+
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.remove('A/B', 'A/B/E', 'A/B/E/beta', 'A/B/E/alpha', 'A/B/F',
+    'A/B/lambda', 'A/D', 'A/D/G', 'A/D/G/rho', 'A/D/G/pi', 'A/D/G/tau',
+    'A/D/H', 'A/D/H/psi', 'A/D/H/omega', 'A/D/H/chi', 'A/D/gamma', 'A/mu',
+    'A/C')
+  expected_disk.tweak('A', contents='The file A\n')
+
+  actions.run_and_verify_checkout(url, wc_dir_other, expected_output,
+    expected_disk, None, None, None, None, '--force')
+
+
+  # Now see to it that we can recover from the obstructions.
+  # rm wc_dir_other/A
+  os.remove(other_A)
+
+  # svn up wc_dir_other
+  expected_output = svntest.wc.State(wc_dir_other, {
+    'A'                 : Item(status='A '),
+    'A/mu'              : Item(status='A '),
+    'A/D'               : Item(status='A '),
+    'A/D/G'             : Item(status='A '),
+    'A/D/G/tau'         : Item(status='A '),
+    'A/D/G/pi'          : Item(status='A '),
+    'A/D/G/rho'         : Item(status='A '),
+    'A/D/H'             : Item(status='A '),
+    'A/D/H/psi'         : Item(status='A '),
+    'A/D/H/omega'       : Item(status='A '),
+    'A/D/H/chi'         : Item(status='A '),
+    'A/D/gamma'         : Item(status='A '),
+    'A/C'               : Item(status='A '),
+    'A/B'               : Item(status='A '),
+    'A/B/E'             : Item(status='A '),
+    'A/B/E/beta'        : Item(status='A '),
+    'A/B/E/alpha'       : Item(status='A '),
+    'A/B/F'             : Item(status='A '),
+    'A/B/lambda'        : Item(status='A '),
+  })
+
+  expected_disk = svntest.main.greek_state.copy()
+
+  expected_status = actions.get_virginal_state(wc_dir_other, 1)
+
+  actions.run_and_verify_update(wc_dir_other, expected_output, expected_disk,
+    expected_status, None, None, None, None, None, False, wc_dir_other)
 
-  test_stderr(".*Failed to add directory.*a non-directory object of the " \
-              "same name already exists", serr)
 
 #----------------------------------------------------------------------
 

Modified: subversion/branches/performance/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/commit_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/commit_tests.py Mon Sep  6 19:13:39 2010
@@ -1497,8 +1497,10 @@ def commit_multiple_wc_multiple_repos(sb
 
   # Commit should fail, since WCs come from different repositories.
   # The exact error message depends on whether or not the tests are
-  # run below a 1.7 working copy
-  error_re = ".*(is not a|Are all targets part of the same) working copy.*"
+  # run below an existing working copy
+  error_re = ( ".*(is not a working copy" +
+                 "|Are all targets part of the same working copy" +
+                 "|was not found).*" )
   svntest.actions.run_and_verify_svn("Expected output on stderr doesn't match",
                                      [], error_re,
                                      'commit', '-m', 'log',
@@ -2659,15 +2661,16 @@ def start_commit_detect_capabilities(sbo
 def commit_url(sbox):
   "'svn commit SOME_URL' should error"
   sbox.build()
-  wc_dir = sbox.wc_dir
-  repos_url = sbox.repo_url
+  url = sbox.repo_url
 
   # Commit directly to a URL
+  expected_error = ("svn: '" + url + 
+                    "' is a URL, but URLs cannot be commit targets")
   svntest.actions.run_and_verify_commit(None,
                                         None,
                                         None,
-                                        "Must give local path",
-                                        repos_url)
+                                        expected_error,
+                                        url)
 
 # Test for issue #3198
 def commit_added_missing(sbox):

Modified: subversion/branches/performance/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/copy_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/copy_tests.py Mon Sep  6 19:13:39 2010
@@ -4249,8 +4249,6 @@ def copy_below_copy(sbox):
 def move_below_move(sbox):
   "move a dir below a moved dir"
   sbox.build()
-  "copy a dir below a copied dir"
-  sbox.build()
 
   A = os.path.join(sbox.wc_dir, 'A')
   new_A = os.path.join(sbox.wc_dir, 'new_A')
@@ -4260,16 +4258,17 @@ def move_below_move(sbox):
   new_A_new_mu = os.path.join(new_A, 'new_mu')
 
   svntest.actions.run_and_verify_svn(None, None, [],
-                                     'cp', A, new_A)
+                                     'mv', A, new_A)
 
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'mv', new_A_D, new_A_new_D)
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'mv', new_A_mu, new_A_new_mu)
 
-  # ### It could be that we miss a Deleting here.
   expected_output = svntest.wc.State(sbox.wc_dir, {
       'A'                 : Item(verb='Deleting'),
+      'new_A/D'           : Item(verb='Deleting'),
+      'new_A/mu'          : Item(verb='Deleting'),
       'new_A'             : Item(verb='Adding'),
       'new_A/new_D'       : Item(verb='Adding'),
       'new_A/new_mu'      : Item(verb='Adding'),
@@ -4298,8 +4297,6 @@ def move_below_move(sbox):
       'new_A/C'           : Item(status='  ', wc_rev='2'),
     })
 
-  # ### This remove block is untested, because the commit fails with an
-  # ### assertion on trunk (BH: 2009-11-01
   expected_status.remove('A', 'A/D', 'A/D/gamma', 'A/D/G', 'A/D/G/pi',
                          'A/D/G/rho', 'A/D/G/tau', 'A/D/H', 'A/D/H/chi',
                          'A/D/H/omega', 'A/D/H/psi', 'A/B', 'A/B/E',
@@ -4503,53 +4500,84 @@ def move_dir_containing_move(sbox):
                                      sbox.ospath('A/B/E/alpha_moved'))
 
   svntest.actions.run_and_verify_svn(None, None, [], 'mv',
-                                     sbox.ospath('A/B/E'),
-                                     sbox.ospath('A/B/E_tmp'))
+                                     sbox.ospath('A/B/F'),
+                                     sbox.ospath('A/B/F_moved'))
+
+  svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+                                     sbox.ospath('A/B'),
+                                     sbox.ospath('A/B_tmp'))
 
   expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
-  expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+  expected_status.tweak('A/B',
+                        'A/B/E',
+                        'A/B/E/alpha',
+                        'A/B/E/beta',
+                        'A/B/F',
+                        'A/B/lambda',
+                        status='D ')
   expected_status.add({
-      'A/B/E_tmp'             : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_tmp'               : Item(status='A ', copied='+', wc_rev='-'),
       # alpha has a revision that isn't reported by status.
-      'A/B/E_tmp/alpha'       : Item(status='D ', wc_rev='?', entry_rev='1'),
-      'A/B/E_tmp/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
-      'A/B/E_tmp/beta'        : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_tmp/E'             : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_tmp/E/alpha'       : Item(status='D ', wc_rev='?', entry_rev='1'),
+      'A/B_tmp/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_tmp/E/beta'        : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_tmp/F'             : Item(status='D ', wc_rev='?'),
+      'A/B_tmp/F_moved'       : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_tmp/lambda'        : Item(status='  ', copied='+', wc_rev='-'),
     })
 
   svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
 
   svntest.actions.run_and_verify_svn(None, None, [], 'mv',
-                                     sbox.ospath('A/B/E_tmp'),
-                                     sbox.ospath('A/B/E_moved'))
-  expected_status.remove('A/B/E_tmp',
-                         'A/B/E_tmp/alpha',
-                         'A/B/E_tmp/alpha_moved',
-                         'A/B/E_tmp/beta')
+                                     sbox.ospath('A/B_tmp'),
+                                     sbox.ospath('A/B_moved'))
+  expected_status.remove('A/B_tmp',
+                         'A/B_tmp/E',
+                         'A/B_tmp/E/alpha',
+                         'A/B_tmp/E/alpha_moved',
+                         'A/B_tmp/E/beta',
+                         'A/B_tmp/F',
+                         'A/B_tmp/F_moved',
+                         'A/B_tmp/lambda')
   expected_status.add({
-      'A/B/E_moved'             : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_moved'               : Item(status='A ', copied='+', wc_rev='-'),
       # alpha has a revision that isn't reported by status.
-      'A/B/E_moved/alpha'       : Item(status='D ', wc_rev='?', entry_rev='1'),
-      'A/B/E_moved/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
-      'A/B/E_moved/beta'        : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_moved/E'             : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_moved/E/alpha'       : Item(status='D ', wc_rev='?', entry_rev='1'),
+      'A/B_moved/E/alpha_moved' : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_moved/E/beta'        : Item(status='  ', copied='+', wc_rev='-'),
+      'A/B_moved/F'             : Item(status='D ', wc_rev='?'),
+      'A/B_moved/F_moved'       : Item(status='A ', copied='+', wc_rev='-'),
+      'A/B_moved/lambda'        : Item(status='  ', copied='+', wc_rev='-'),
     })
 
   svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
 
   expected_output = svntest.wc.State(sbox.wc_dir, {
-    'A/B/E'                  : Item(verb='Deleting'),
-    'A/B/E_moved'            : Item(verb='Adding'),
-    'A/B/E_moved/alpha'      : Item(verb='Deleting'),
-    'A/B/E_moved/alpha_moved': Item(verb='Adding'),
+    'A/B'                    : Item(verb='Deleting'),
+    'A/B_moved'              : Item(verb='Adding'),
+    'A/B_moved/E/alpha'      : Item(verb='Deleting'),
+    'A/B_moved/E/alpha_moved': Item(verb='Adding'),
+    'A/B_moved/F'            : Item(verb='Deleting'),
+    'A/B_moved/F_moved'      : Item(verb='Adding'),
     })
 
-  expected_status.tweak('A/B/E_moved',
-                        'A/B/E_moved/alpha_moved',
-                        'A/B/E_moved/beta',
+  expected_status.tweak('A/B_moved',
+                        'A/B_moved/E',
+                        'A/B_moved/E/alpha_moved',
+                        'A/B_moved/E/beta',
+                        'A/B_moved/F_moved',
+                        'A/B_moved/lambda',
                         status='  ', copied=None, wc_rev='2')
-  expected_status.remove('A/B/E',
+  expected_status.remove('A/B',
+                         'A/B/E',
                          'A/B/E/alpha',
                          'A/B/E/beta',
-                         'A/B/E_moved/alpha')
+                         'A/B/F',
+                         'A/B/lambda',
+                         'A/B_moved/E/alpha',
+                         'A/B_moved/F')
   svntest.actions.run_and_verify_commit(sbox.wc_dir,
                                         expected_output,
                                         expected_status,
@@ -4702,6 +4730,44 @@ def changed_dir_data_should_match_checko
   svntest.actions.run_and_verify_svn(None, verify_out, [], 'status', '-v')
   os.chdir(was_cwd)
 
+def move_added_nodes(sbox):
+  """move added nodes"""
+
+  sbox.build()
+
+  svntest.actions.run_and_verify_svn(None, None, [], 'mkdir',
+                                     sbox.ospath('X'),
+                                     sbox.ospath('X/Y'))
+
+  expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+  expected_status.add({
+      'X'   : Item(status='A ', wc_rev='0'),
+      'X/Y' : Item(status='A ', wc_rev='0'),
+      })
+  svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
+
+  svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+                                     sbox.ospath('X/Y'),
+                                     sbox.ospath('X/Z'))
+  expected_status.remove('X/Y')
+  expected_status.add({'X/Z' : Item(status='A ', wc_rev='0')})
+  svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
+
+  svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+                                     sbox.ospath('X/Z'),
+                                     sbox.ospath('Z'))
+  expected_status.remove('X/Z')
+  expected_status.add({'Z' : Item(status='A ', wc_rev='0')})
+  svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
+
+  svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+                                     sbox.ospath('Z'),
+                                     sbox.ospath('X/Z'))
+  expected_status.remove('Z')
+  expected_status.add({'X/Z' : Item(status='A ', wc_rev='0')})
+  svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
+
+
 ########################################################################
 # Run the tests
 
@@ -4786,7 +4852,7 @@ test_list = [ None,
               path_copy_in_repo_2475,
               commit_copy_depth_empty,
               copy_below_copy,
-              XFail(move_below_move),
+              move_below_move,
               reverse_merge_move,
               XFail(nonrecursive_commit_of_copy),
               copy_added_dir_with_copy,
@@ -4795,6 +4861,7 @@ test_list = [ None,
               copy_dir_with_space,
               changed_data_should_match_checkout,
               XFail(changed_dir_data_should_match_checkout),
+              XFail(move_added_nodes),
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/performance/subversion/tests/cmdline/entries-dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/entries-dump.c?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/entries-dump.c (original)
+++ subversion/branches/performance/subversion/tests/cmdline/entries-dump.c Mon Sep  6 19:13:39 2010
@@ -1,5 +1,5 @@
 /*
- * db-test.c :  test the wc_db subsystem
+ * entries-dump.c :  dump pre-1.6 svn_wc_* output for python
  *
  * ====================================================================
  *    Licensed to the Apache Software Foundation (ASF) under one

Modified: subversion/branches/performance/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/export_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/export_tests.py Mon Sep  6 19:13:39 2010
@@ -483,6 +483,34 @@ def export_working_copy_ignoring_keyword
                                         expected_disk,
                                         "--ignore-keywords")
 
+# This is test for issue #3683 - 'Escape unsafe charaters in a URL during
+# export'
+def export_with_url_unsafe_characters(sbox):
+  "export file with URL unsafe characters"
+
+  ## See http://subversion.tigris.org/issues/show_bug.cgi?id=3683 ##
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Define the paths
+  url_unsafe_path = os.path.join(wc_dir, 'A', 'test- @#$&.txt')
+  url_unsafe_path_url = sbox.repo_url + '/A/test- @#$&.txt@'
+  export_target = os.path.join(wc_dir, 'test- @#$&.txt')
+
+  # Create the file with special name and commit it.
+  svntest.main.file_write(url_unsafe_path, 'This is URL unsafe path file.')
+  svntest.main.run_svn(None, 'add', url_unsafe_path + '@')
+  svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', 'log msg',
+                                     '--quiet', wc_dir)
+
+  # Export the file and verify it.
+  svntest.actions.run_and_verify_svn(None, None, [], 'export',
+                                     url_unsafe_path_url, export_target + '@')
+
+  if not os.path.exists(export_target):
+    raise svntest.Failure("export did not fetch file with URL unsafe path")
+
 ########################################################################
 # Run the tests
 
@@ -509,6 +537,7 @@ test_list = [ None,
               export_to_explicit_cwd,
               export_ignoring_keyword_translation,
               export_working_copy_ignoring_keyword_translation,
+              export_with_url_unsafe_characters,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/performance/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout (original)
+++ subversion/branches/performance/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout Mon Sep  6 19:13:39 2010
@@ -1,12 +1,15 @@
-log: Show the log messages for a set of revision(s) and/or file(s).
-usage: 1. log [PATH]
+log: Show the log messages for a set of revision(s) and/or path(s).
+usage: 1. log [PATH][@REV]
        2. log URL[@REV] [PATH...]
 
-  1. Print the log messages for a local PATH (default: '.').
-     The default revision range is BASE:1.
+  1. Print the log messages for the URL corresponding to PATH
+     (default: '.'). If specified, REV is the revision in which the
+     URL is first looked up, and the default revision range is REV:1.
+     If REV is not specified, the default revision range is BASE:1,
+     since the URL might not exist in the HEAD revision.
 
   2. Print the log messages for the PATHs (default: '.') under URL.
-     If specified, REV determines in which revision the URL is first
+     If specified, REV is the revision in which the URL is first
      looked up, and the default revision range is REV:1; otherwise,
      the URL is looked up in HEAD, and the default revision range is
      HEAD:1.
@@ -27,8 +30,10 @@ usage: 1. log [PATH]
   Examples:
     svn log
     svn log foo.c
+    svn log bar.c@42
     svn log http://www.example.com/repo/project/foo.c
     svn log http://www.example.com/repo/project foo.c bar.c
+    svn log http://www.example.com/repo/project@50 foo.c bar.c
 
 Valid options:
   -r [--revision] ARG      : ARG (some commands also take ARG1:ARG2 range)

Modified: subversion/branches/performance/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/lock_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/lock_tests.py Mon Sep  6 19:13:39 2010
@@ -1547,6 +1547,8 @@ def replace_and_propset_locked_path(sbox
                                      'add', G_path)
   svntest.main.file_append(rho_path, "This is the new file 'rho'.\n")
   svntest.actions.run_and_verify_svn(None, None, [],
+                                     'add', rho_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
                                      'propset', 'foo', 'bar', rho_path)
 
   # And commit G.

Modified: subversion/branches/performance/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/merge_reintegrate_tests.py Mon Sep  6 19:13:39 2010
@@ -2162,29 +2162,8 @@ def two_URL_merge_removes_valid_mergefin
   # of mergeinfo showing that the history of A_COPY is now part of A_COPY_2,
   # i.e. '/A_COPY:2-11'
   #
-  # This test is currently marked as XFail because this is not what happens.
-  # Well, actually, all the above *does* happen, but as discussed in
-  # http://svn.haxx.se/dev/archive-2010-05/0292.shtml, the merge removes some
-  # of the valid mergeinfo on A_COPY_2 that describes the sync merge made in
-  # r9:
-  #
-  #   >svn pl -vR A_COPY_2
-  #   Properties on 'A_COPY_2':
-  #     svn:mergeinfo
-  #       /A:9-10
-  #       /A_COPY:2-11
-  #
-  #   >svn diff --depth empty A_COPY_2
-  #
-  #   Property changes on: A_COPY_2
-  #   ___________________________________________________________________
-  #   Modified: svn:mergeinfo
-  #      Reverse-merged /A:r3-8
-  #      Merged /A_COPY:r2-11
-  #
-  # '/A:r3-8' represents valid, operative changes merged from A to A_COPY_2!
-  # If this merge was committed, subsequent merges would try to reapply the
-  # diff, possibly leading to spurious conflicts.
+  # Before issue #3648 was fixed this test failed because the valid mergeinfo
+  # '/A:r3-8' on A_COPY_2 was removed by the merge.
   svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
   expected_output = wc.State(A_COPY_2_path, {
     ''         : Item(status=' G'),

Modified: subversion/branches/performance/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/tests/cmdline/merge_tests.py?rev=993127&r1=993126&r2=993127&view=diff
==============================================================================
--- subversion/branches/performance/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/performance/subversion/tests/cmdline/merge_tests.py Mon Sep  6 19:13:39 2010
@@ -15621,6 +15621,131 @@ def record_only_merge_creates_self_refer
                                        None, None, None, None, None, 1, 1,
                                        '--record-only')
 
+#----------------------------------------------------------------------
+# Test for issue #3657 'phantom svn:eol-style changes cause spurious merge
+# text conflicts'.
+def copy_causes_phantom_eol_conflict(sbox):
+  "other prop changes cause phantom eol conflict"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Some paths we'll care about
+  mu_path                = os.path.join(wc_dir, "A", "mu")
+  A_path                 = os.path.join(wc_dir, "A")
+  A_branch_path          = os.path.join(wc_dir, "A-branch")
+  A_branch_backport_path = os.path.join(wc_dir, "A-branch-backport")
+  mu_path                = os.path.join(wc_dir, "A", "mu")
+  mu2_path               = os.path.join(wc_dir, "A", "mu2")
+  mu_backport_path       = os.path.join(wc_dir, "A-branch-backport", "mu")
+  
+  # r2 - Set the 'native' svn:eol-style on A/mu:
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ps', 'svn:eol-style', 'native',
+                                     mu_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'Set native eol-style',
+                                     wc_dir)
+    
+  # r3 - Branch 'A' to 'A-branch':
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'copy', A_path, A_branch_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'Create a branch of A',
+                                     wc_dir)
+
+  # r4 - Make a text mod and prop mod to 'A/mu':
+  svntest.main.file_write(mu_path, "The new mu!\n")
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ps', 'prop-name', 'prop-val', mu_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'Edit a file', wc_dir)
+
+  # Now merge r4 from 'A' to 'A-branch'.
+  #
+  # Previously this failed over ra_neon and ra_serf on Windows:
+  #
+  #   >svn merge ^^/A A-branch -c4
+  #   Conflict discovered in 'A-branch/mu'.
+  #   Select: (p) postpone, (df) diff-full, (e) edit,
+  #           (mc) mine-conflict, (tc) theirs-conflict,
+  #           (s) show all options: p
+  #   --- Merging r4 into 'A-branch':
+  #   CU   A-branch\mu
+  #   --- Recording mergeinfo for merge of r4 into 'A-branch':
+  #    U   A-branch
+  #   Summary of conflicts:
+  #     Text conflicts: 1
+  #
+  # The conflict was on the whole file as it appeared there was an eol-style
+  # change to native, when in fact no such change was present in r7.
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+  expected_output = wc.State(A_branch_path, {
+    'mu' : Item(status='UU'),
+    })
+  expected_mergeinfo_output = wc.State(A_branch_path, {
+    ''   : Item(status=' U'),
+    })
+  expected_elision_output = wc.State(A_branch_path, {})
+  expected_status = wc.State(A_branch_path, {
+    ''          : Item(status=' M'),
+    'B'         : Item(status='  '),
+    'mu'        : Item(status='MM'),
+    'B/E'       : Item(status='  '),
+    'B/E/alpha' : Item(status='  '),
+    'B/E/beta'  : Item(status='  '),
+    'B/lambda'  : Item(status='  '),
+    'B/F'       : Item(status='  '),
+    'C'         : Item(status='  '),
+    'D'         : Item(status='  '),
+    'D/G'       : Item(status='  '),
+    'D/G/pi'    : Item(status='  '),
+    'D/G/rho'   : Item(status='  '),
+    'D/G/tau'   : Item(status='  '),
+    'D/gamma'   : Item(status='  '),
+    'D/H'       : Item(status='  '),
+    'D/H/chi'   : Item(status='  '),
+    'D/H/psi'   : Item(status='  '),
+    'D/H/omega' : Item(status='  '),
+    })
+  expected_status.tweak(wc_rev=4)
+  expected_disk = wc.State('', {
+    ''          : Item(props={SVN_PROP_MERGEINFO :
+                              '/A:4'}),
+    'B'         : Item(),
+    'mu'        : Item("The new mu!\n",
+                       props={'prop-name' : 'prop-val',
+                              'svn:eol-style' : 'native'}),
+    'B/E'       : Item(),
+    'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+    'B/E/beta'  : Item("This is the file 'beta'.\n"),
+    'B/lambda'  : Item("This is the file 'lambda'.\n"),
+    'B/F'       : Item(),
+    'C'         : Item(),
+    'D'         : Item(),
+    'D/G'       : Item(),
+    'D/G/pi'    : Item("This is the file 'pi'.\n"),
+    'D/G/rho'   : Item("This is the file 'rho'.\n"),
+    'D/G/tau'   : Item("This is the file 'tau'.\n"),
+    'D/gamma'   : Item("This is the file 'gamma'.\n"),
+    'D/H'       : Item(),
+    'D/H/chi'   : Item("This is the file 'chi'.\n"),
+    'D/H/psi'   : Item("This is the file 'psi'.\n"),
+    'D/H/omega' : Item("This is the file 'omega'.\n"),
+    })
+  expected_skip = wc.State(A_branch_path, {})
+  svntest.actions.run_and_verify_merge(A_branch_path, 3, 4,
+                                       sbox.repo_url + '/A',
+                                       None,
+                                       expected_output,
+                                       expected_mergeinfo_output,
+                                       expected_elision_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, None, None, None, None, 1, 1)
+  
 ########################################################################
 # Run the tests
 
@@ -15807,6 +15932,7 @@ test_list = [ None,
               foreign_repos_del_and_props,
               immediate_depth_merge_creates_minimal_subtree_mergeinfo,
               record_only_merge_creates_self_referential_mergeinfo,
+              copy_causes_phantom_eol_conflict,
              ]
 
 if __name__ == '__main__':