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/08/11 18:43:31 UTC

svn commit: r984468 [20/25] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/generator/ build/generator/templates/ notes/ notes/tree-conflicts/ notes/wc-ng/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subvers...

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/add-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/add-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/add-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/add-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/changelist-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/changelist-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/changelist-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/changelist-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/checkout-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/checkout-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/checkout-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/checkout-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/cl.h?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/cl.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/cl.h Wed Aug 11 16:43:22 2010
@@ -358,9 +358,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
@@ -540,25 +544,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/ignore-mergeinfo/subversion/svn/cleanup-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/cleanup-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/cleanup-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/cleanup-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/commit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/copy-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/copy-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/copy-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/copy-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/delete-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/delete-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/delete-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/delete-cmd.c Wed Aug 11 16:43:22 2010
@@ -46,8 +46,9 @@ 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_boolean_t is_url;
+  int i;
 
   SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
                                                       opt_state->targets,
@@ -56,11 +57,19 @@ 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));
+  /* Check that all targets are of the same type. */
+  is_url = svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *));
+  for (i = 1; i < targets->nelts; i++)
+    {
+      const char *target = APR_ARRAY_IDX(targets, i, const char *);
+      if (is_url != svn_path_is_url(target))
+        return svn_error_return(
+                 svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                  _("Cannot mix repository and working copy "
+                                    "targets")));
+    }
 
-  if (! svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *)))
+  if (! is_url)
     {
       ctx->log_msg_func3 = NULL;
       if (opt_state->message || opt_state->filedata || opt_state->revprop_table)
@@ -79,9 +88,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 +98,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/ignore-mergeinfo/subversion/svn/diff-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/diff-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/diff-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/diff-cmd.c Wed Aug 11 16:43:22 2010
@@ -284,9 +284,9 @@ svn_cl__diff(apr_getopt_t *os,
         }
 
       if (url_present && working_copy_present)
-        return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
-                                 _("Target lists to diff may not contain "
-                                   "both working copy paths and URLs"));
+        return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                  _("Cannot mix repository and working copy "
+                                    "targets"));
 
       if (opt_state->start_revision.kind == svn_opt_revision_unspecified
           && working_copy_present)

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/export-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/export-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/export-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/export-cmd.c Wed Aug 11 16:43:22 2010
@@ -34,6 +34,7 @@
 #include "cl.h"
 
 #include "svn_private_config.h"
+#include "private/svn_opt_private.h"
 
 
 /*** Code. ***/
@@ -81,11 +82,18 @@ 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 (svn_path_is_url(to))
+    return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                              NULL,
+                                              _("'%s' is not a local path"),
+                                              to));
   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/ignore-mergeinfo/subversion/svn/import-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/import-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/import-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/import-cmd.c Wed Aug 11 16:43:22 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
    *
@@ -101,15 +100,16 @@ svn_cl__import(apr_getopt_t *os,
       url = APR_ARRAY_IDX(targets, 1, const char *);
     }
 
+  if (svn_path_is_url(path))
+    return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                              NULL,
+                                              _("'%s' is not a local path"),
+                                              path));
   if (! svn_path_is_url(url))
     return svn_error_createf
       (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 +118,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 +127,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/ignore-mergeinfo/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/lock-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/lock-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/lock-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/lock-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c Wed Aug 11 16:43:22 2010
@@ -27,6 +27,7 @@
 
 #include "svn_client.h"
 #include "svn_compat.h"
+#include "svn_dirent_uri.h"
 #include "svn_string.h"
 #include "svn_path.h"
 #include "svn_error.h"
@@ -639,7 +640,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;
 
@@ -649,10 +650,13 @@ svn_cl__log(apr_getopt_t *os,
         {
           target = APR_ARRAY_IDX(targets, i, const char *);
 
-          if (svn_path_is_url(target))
-            return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
-                                    _("Only relative paths can be specified "
-                                      "after a URL"));
+          if (svn_path_is_url(target) || target[0] == '/')
+            return svn_error_return(svn_error_createf(
+                                      SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                      _("Only relative paths can be specified"
+                                        " after a URL for 'svn log', "
+                                        "but '%s' is not a relative path"),
+                                      target));
         }
     }
 
@@ -665,10 +669,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/ignore-mergeinfo/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/main.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/main.c Wed Aug 11 16:43:22 2010
@@ -466,8 +466,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_
@@ -500,7 +500,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"},
@@ -665,15 +665,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"
@@ -694,8 +697,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'},
@@ -932,20 +937,14 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "      A mimetype beginning with 'text/' (or an absent mimetype) is\n"
      "      treated as text.  Anything else is treated as binary.\n"
      "    svn:externals  - A newline separated list of module specifiers,\n"
-     "      each of which consists of a relative directory path, optional\n"
-     "      revision flags and an URL.  The ordering of the three elements\n"
-     "      implements different behavior.  Subversion 1.4 and earlier only\n"
-     "      support the following formats and the URLs cannot have peg\n"
-     "      revisions:\n"
-     "        foo             http://example.com/repos/zig\n"
-     "        foo/bar -r 1234 http://example.com/repos/zag\n"
-     "      Subversion 1.5 and greater support the above formats and the\n"
-     "      following formats where the URLs may have peg revisions:\n"
-     "                http://example.com/repos/zig@42 foo\n"
-     "        -r 1234 http://example.com/repos/zig foo/bar\n"
-     "      Relative URLs are supported in Subversion 1.5 and greater for\n"
-     "      all above formats and are indicated by starting the URL with one\n"
-     "      of the following strings\n"
+     "      each of which consists of a URL and a relative directory path,\n"
+     "      similar to the syntax of the 'svn checkout' command:\n"
+     "        http://example.com/repos/zag foo/bar\n"
+     "      An optional peg revision may be appended to the URL to pin the\n"
+     "      external to a known revision:\n"
+     "        http://example.com/repos/zig@42 foo\n"
+     "      Relative URLs are indicated by starting the URL with one\n"
+     "      of the following strings:\n"
      "        ../  to the parent directory of the extracted external\n"
      "        ^/   to the repository root\n"
      "        //   to the scheme\n"
@@ -954,6 +953,13 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "      'relative_url relative_path' with peg revision support.\n"
      "      Lines in externals definitions starting with the '#' character\n"
      "      are considered comments and are ignored.\n"
+     "      Subversion 1.4 and earlier only support the following formats\n"
+     "      where peg revisions can only be specified using a -r modifier\n"
+     "      and where URLs cannot be relative:\n"
+     "        foo             http://example.com/repos/zig\n"
+     "        foo/bar -r 1234 http://example.com/repos/zag\n"
+     "      Use of these formats is discouraged. They should only be used if\n"
+     "      interoperability with 1.4 clients is desired.\n"
      "    svn:needs-lock - If present, indicates that the file should be locked\n"
      "      before it is modified.  Makes the working copy file read-only\n"
      "      when it is not locked.  Use 'svn propdel svn:needs-lock PATH...'\n"
@@ -1187,7 +1193,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} }
@@ -1780,6 +1786,7 @@ main(int argc, const char *argv[])
         break;
       case opt_use_git_diff_format:
         opt_state.use_git_diff_format = TRUE;
+        break;
       case opt_ignore_mergeinfo:
         opt_state.ignore_mergeinfo = TRUE;
         break;
@@ -2219,6 +2226,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/ignore-mergeinfo/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/merge-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/merge-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/mkdir-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/mkdir-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/mkdir-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/mkdir-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/move-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/move-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/move-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/move-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/notify.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/notify.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/notify.c Wed Aug 11 16:43:22 2010
@@ -274,7 +274,15 @@ notify(void *baton, const svn_wc_notify_
               statchar_buf[0] = 'U';
           }
 
-        if (statchar_buf[0] != ' ')
+        if (n->prop_state == svn_wc_notify_state_conflicted)
+          {
+            nb->prop_conflicts++;
+            statchar_buf[1] = 'C';
+          }
+        else if (n->prop_state == svn_wc_notify_state_changed)
+              statchar_buf[1] = 'U';
+
+        if (statchar_buf[0] != ' ' || statchar_buf[1] != ' ')
           {
             if ((err = svn_cmdline_printf(pool, "%s      %s\n",
                                           statchar_buf, path_local)))
@@ -302,49 +310,106 @@ notify(void *baton, const svn_wc_notify_
               minus = "-";
             }
 
-          /* ### APR_INT64_T_FMT isn't translator-friendly */
+          /* ### We're creating the localized strings without
+           * ### APR_INT64_T_FMT since it isn't translator-friendly */
           if (n->hunk_fuzz)
             {
-              s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
-                    "with offset %s");
-              if ((err = svn_cmdline_printf(pool,
-                                            apr_pstrcat(pool, s,
-                                                        "%"APR_UINT64_T_FMT
-                                                        " and fuzz %d\n",
-                                                        NULL),
-                                            n->hunk_original_start,
-                                            n->hunk_original_length,
-                                            n->hunk_modified_start,
-                                            n->hunk_modified_length,
-                                            minus, off, n->hunk_fuzz)))
+
+              if (n->prop_name)
+                {
+                  s = _(">         applied hunk ## -%lu,%lu +%lu,%lu ## "
+                        "with offset %s");
+
+                  err = svn_cmdline_printf(pool,
+                                           apr_pstrcat(pool, s,
+                                                       "%"APR_UINT64_T_FMT
+                                                       " and fuzz %d (%s)\n",
+                                                       NULL),
+                                           n->hunk_original_start,
+                                           n->hunk_original_length,
+                                           n->hunk_modified_start,
+                                           n->hunk_modified_length,
+                                           minus, off, n->hunk_fuzz,
+                                           n->prop_name);
+                }
+              else
+                {
+                  s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
+                        "with offset %s");
+
+                  err = svn_cmdline_printf(pool,
+                                           apr_pstrcat(pool, s,
+                                                       "%"APR_UINT64_T_FMT
+                                                       " and fuzz %d\n",
+                                                       NULL),
+                                           n->hunk_original_start,
+                                           n->hunk_original_length,
+                                           n->hunk_modified_start,
+                                           n->hunk_modified_length,
+                                           minus, off, n->hunk_fuzz);
+                }
+
+              if (err)
                 goto print_error;
             }
           else
             {
-              s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
-                    "with offset %s");
-              if ((err = svn_cmdline_printf(pool,
+
+              if (n->prop_name)
+                {
+                  s = _(">         applied hunk ## -%lu,%lu +%lu,%lu ## "
+                        "with offset %s");
+                  err = svn_cmdline_printf(pool,
                                             apr_pstrcat(pool, s,
-                                                        "%"APR_UINT64_T_FMT"\n",
+                                                        "%"APR_UINT64_T_FMT" (%s)\n",
                                                         NULL),
                                             n->hunk_original_start,
                                             n->hunk_original_length,
                                             n->hunk_modified_start,
                                             n->hunk_modified_length,
-                                            minus, off)))
+                                            minus, off, n->prop_name);
+                }
+              else
+                {
+                  s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
+                        "with offset %s");
+                  err = svn_cmdline_printf(pool,
+                                           apr_pstrcat(pool, s,
+                                                       "%"APR_UINT64_T_FMT"\n",
+                                                       NULL),
+                                           n->hunk_original_start,
+                                           n->hunk_original_length,
+                                           n->hunk_modified_start,
+                                           n->hunk_modified_length,
+                                           minus, off);
+                }
+
+              if (err)
                 goto print_error;
             }
         }
       else if (n->hunk_fuzz)
         {
-          if ((err = svn_cmdline_printf(pool,
+          if (n->prop_name)
+            err = svn_cmdline_printf(pool,
+                          _(">         applied hunk ## -%lu,%lu +%lu,%lu ## "
+                                        "with fuzz %d (%s)\n"),
+                                        n->hunk_original_start,
+                                        n->hunk_original_length,
+                                        n->hunk_modified_start,
+                                        n->hunk_modified_length,
+                                        n->hunk_fuzz,
+                                        n->prop_name);
+          else
+            err = svn_cmdline_printf(pool,
                           _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
                                         "with fuzz %d\n"),
                                         n->hunk_original_start,
                                         n->hunk_original_length,
                                         n->hunk_modified_start,
                                         n->hunk_modified_length,
-                                        n->hunk_fuzz)))
+                                        n->hunk_fuzz);
+          if (err)
             goto print_error;
 
         }
@@ -352,13 +417,50 @@ notify(void *baton, const svn_wc_notify_
 
     case svn_wc_notify_patch_rejected_hunk:
       nb->received_some_change = TRUE;
-      if ((err = svn_cmdline_printf(pool,
-                                    _(">         rejected hunk "
-                                      "@@ -%lu,%lu +%lu,%lu @@\n"),
-                                    n->hunk_original_start,
-                                    n->hunk_original_length,
-                                    n->hunk_modified_start,
-                                    n->hunk_modified_length)))
+
+      if (n->prop_name)
+        err = svn_cmdline_printf(pool,
+                                 _(">         rejected hunk "
+                                   "## -%lu,%lu +%lu,%lu ## (%s)\n"),
+                                 n->hunk_original_start,
+                                 n->hunk_original_length,
+                                 n->hunk_modified_start,
+                                 n->hunk_modified_length,
+                                 n->prop_name);
+      else
+        err = svn_cmdline_printf(pool,
+                                 _(">         rejected hunk "
+                                   "@@ -%lu,%lu +%lu,%lu @@\n"),
+                                 n->hunk_original_start,
+                                 n->hunk_original_length,
+                                 n->hunk_modified_start,
+                                 n->hunk_modified_length);
+      if (err)
+        goto print_error;
+      break;
+
+    case svn_wc_notify_patch_hunk_already_applied:
+      nb->received_some_change = TRUE;
+      if (n->prop_name)
+        err = svn_cmdline_printf(pool,
+                                 _(">         hunk "
+                                   "## -%lu,%lu +%lu,%lu ## "
+                                   "already applied (%s)\n"),
+                                 n->hunk_original_start,
+                                 n->hunk_original_length,
+                                 n->hunk_modified_start,
+                                 n->hunk_modified_length,
+                                 n->prop_name);
+      else
+        err = svn_cmdline_printf(pool,
+                                 _(">         hunk "
+                                   "@@ -%lu,%lu +%lu,%lu @@ "
+                                   "already applied\n"),
+                                 n->hunk_original_start,
+                                 n->hunk_original_length,
+                                 n->hunk_modified_start,
+                                 n->hunk_modified_length);
+      if (err)
         goto print_error;
       break;
 
@@ -779,6 +881,12 @@ notify(void *baton, const svn_wc_notify_
           goto print_error;
       break;
 
+    case svn_wc_notify_url_redirect:
+      err = svn_cmdline_printf(pool, _("Redirecting to URL '%s'\n"),
+                               n->url);
+      if (err)
+        goto print_error;
+
     default:
       break;
     }
@@ -804,8 +912,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)
 {
@@ -813,8 +919,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;
@@ -828,3 +934,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/ignore-mergeinfo/subversion/svn/patch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/propdel-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/propdel-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/propdel-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/propdel-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/propedit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/propedit-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/propedit-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/propedit-cmd.c Wed Aug 11 16:43:22 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 *
@@ -78,6 +98,9 @@ svn_cl__propedit(apr_getopt_t *os,
                                                       opt_state->targets,
                                                       ctx, pool));
 
+  /* We do our own notifications */
+  ctx->notify_func2 = NULL;
+
   if (opt_state->revprop)  /* operate on a revprop */
     {
       svn_revnum_t rev;
@@ -153,6 +176,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 +202,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 +281,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 +299,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 +312,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/ignore-mergeinfo/subversion/svn/propset-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/resolve-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/resolved-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/revert-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/revert-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/revert-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/revert-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/status-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/switch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/unlock-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/unlock-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/unlock-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/unlock-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/update-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/update-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/update-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/update-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/upgrade-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/upgrade-cmd.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/upgrade-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/upgrade-cmd.c Wed Aug 11 16:43:22 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/ignore-mergeinfo/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/util.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/util.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/util.c Wed Aug 11 16:43:22 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))

Modified: subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c Wed Aug 11 16:43:22 2010
@@ -833,11 +833,11 @@ display_prop_diffs(const apr_array_heade
         orig_value = NULL;
 
       if (! orig_value)
-        header_fmt = _("Added: %s\n");
+        header_fmt = "Added: %s\n";
       else if (! pc->value)
-        header_fmt = _("Deleted: %s\n");
+        header_fmt = "Deleted: %s\n";
       else
-        header_fmt = _("Modified: %s\n");
+        header_fmt = "Modified: %s\n";
       SVN_ERR(svn_cmdline_printf(pool, header_fmt, pc->name));
 
       /* Flush stdout before we open a stream to it below. */
@@ -902,6 +902,7 @@ print_diff_tree(svn_fs_root_t *root,
   svn_boolean_t orig_empty = FALSE;
   svn_boolean_t is_copy = FALSE;
   svn_boolean_t binary = FALSE;
+  svn_boolean_t diff_header_printed = FALSE;
   apr_pool_t *subpool;
   svn_stringbuf_t *header;
 
@@ -1074,6 +1075,7 @@ print_diff_tree(svn_fs_root_t *root,
                        svn_cmdline_output_encoding(pool), NULL, FALSE, pool));
               SVN_ERR(svn_stream_close(ostream));
               SVN_ERR(svn_cmdline_printf(pool, "\n"));
+              diff_header_printed = TRUE;
             }
           else if (! node->prop_mod &&
                   ((! c->no_diff_added && node->action == 'A') ||
@@ -1114,7 +1116,24 @@ print_diff_tree(svn_fs_root_t *root,
                              base_proptable, pool));
       SVN_ERR(svn_categorize_props(propchanges, NULL, NULL, &props, pool));
       if (props->nelts > 0)
-        SVN_ERR(display_prop_diffs(props, base_proptable, path, pool));
+        {
+          /* We print a diff header for the case when we only have property
+           * mods. */
+          if (! diff_header_printed)
+            {
+              const char *orig_label, *new_label;
+
+              SVN_ERR(generate_label(&orig_label, base_root, base_path,
+                                     pool));
+              SVN_ERR(generate_label(&new_label, root, path, pool));
+
+              SVN_ERR(svn_cmdline_printf(pool, "Index: %s\n", path));
+              SVN_ERR(svn_cmdline_printf(pool, "%s\n", equal_string));
+              SVN_ERR(svn_cmdline_printf(pool, "--- %s\n", orig_label));
+              SVN_ERR(svn_cmdline_printf(pool, "+++ %s\n", new_label));
+            }
+          SVN_ERR(display_prop_diffs(props, base_proptable, path, pool));
+        }
     }
 
   /* Return here if the node has no children. */

Propchange: subversion/branches/ignore-mergeinfo/subversion/svnrdump/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Aug 11 16:43:22 2010
@@ -0,0 +1,7 @@
+svnrdump
+svnrdump.exe
+.libs
+*.o
+*.lo
+*~
+.*~

Modified: subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c Wed Aug 11 16:43:22 2010
@@ -338,8 +338,8 @@ get_lock(svn_ra_session_t *session, apr_
     }
 
   return svn_error_createf(APR_EINVAL, NULL,
-                           "Couldn't get lock on destination repos "
-                           "after %d attempts\n", i);
+                           _("Couldn't get lock on destination repos "
+                             "after %d attempts"), i);
 }
 
 
@@ -387,20 +387,8 @@ with_locked(svn_ra_session_t *session,
   err = func(session, baton, pool);
 
   err2 = svn_ra_change_rev_prop(session, 0, SVNSYNC_PROP_LOCK, NULL, pool);
-  if (err2 && err)
-    {
-      svn_error_clear(err2); /* XXX what to do here? */
 
-      return err;
-    }
-  else if (err2)
-    {
-      return err2;
-    }
-  else
-    {
-      return err;
-    }
+  return svn_error_compose_create(err, svn_error_return(err2));
 }
 
 

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/README
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/README?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/README (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/README Wed Aug 11 16:43:22 2010
@@ -72,7 +72,7 @@ paths adjusted appropriately:
      AuthUserFile /usr/local/apache2/conf/users
      Require valid-user
    </Location>
-     
+
    <Location /svn-test-work/local_tmp/repos>
      DAV svn
      SVNPath /home/yourusernamehere/projects/svn/subversion/tests/cmdline/svn-test-work/local_tmp/repos
@@ -83,6 +83,9 @@ paths adjusted appropriately:
      Require valid-user
    </Location>
 
+   RedirectMatch permanent ^/svn-test-work/repositories/REDIRECT-PERM-(.*)$ /svn-test-work/repositories/$1
+   RedirectMatch           ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$ /svn-test-work/repositories/$1
+
 Httpd should be running on port 80.  You may also need to ensure that
 it's running as you, so it has read/write access to the repositories
 that are probably living in your Subversion working copy.  To do this,

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py Wed Aug 11 16:43:22 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, [],
@@ -1145,9 +1149,9 @@ def basic_delete(sbox):
 
   # check versioned dir is not removed
   if not verify_dir_deleted(F_path):
-    print("Removed versioned dir")
-    ### we should raise a less generic error here. which?
-    raise svntest.Failure
+    # If we are not running in single-db, this is an error
+    if os.path.isdir(os.path.join(F_path, '../' + svntest.main.get_admin_name())):
+      raise svntest.Failure("Removed administrative area")
 
   # check unversioned and added dirs has been removed
   if verify_dir_deleted(Q_path):
@@ -1209,8 +1213,8 @@ def basic_checkout_deleted(sbox):
 
 #----------------------------------------------------------------------
 
-# Issue 846, changing a deleted file to an added directory is not
-# supported.
+# Issue 846, changing a deleted file to an added directory was not
+# supported before WC-NG. But we can handle it.
 
 def basic_node_kind_change(sbox):
   "attempt to change node kind"
@@ -1228,25 +1232,24 @@ def basic_node_kind_change(sbox):
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Try and fail to create a directory (file scheduled for deletion)
-  svntest.actions.run_and_verify_svn('Cannot change node kind',
-                                     None, svntest.verify.AnyOutput,
-                                     'mkdir', gamma_path)
+  svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', gamma_path)
 
-  # Status is unchanged
+  # Status is replaced
+  expected_status.tweak('A/D/gamma', status='R ')
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Commit file deletion
   expected_output = wc.State(wc_dir, {
-    'A/D/gamma' : Item(verb='Deleting'),
+    'A/D/gamma' : Item(verb='Replacing'),
     })
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.remove('A/D/gamma')
+  expected_status.tweak('A/D/gamma', status='  ', wc_rev='2')
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output, expected_status,
                                         None, wc_dir)
 
   # Try and fail to create a directory (file deleted)
-  svntest.actions.run_and_verify_svn('Cannot change node kind',
+  svntest.actions.run_and_verify_svn(None,
                                      None, svntest.verify.AnyOutput,
                                      'mkdir', gamma_path)
 
@@ -1257,11 +1260,12 @@ def basic_node_kind_change(sbox):
   svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
 
   # mkdir should succeed
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', gamma_path)
   svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', gamma_path)
 
   expected_status.tweak(wc_rev=2)
   expected_status.add({
-    'A/D/gamma' : Item(status='A ', wc_rev=0),
+    'A/D/gamma' : Item(status='R ', wc_rev=2),
     })
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
@@ -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,44 @@ 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')
+
+def delete_and_add_same_file(sbox):
+  "commit deletes a file and adds one with same text"
+  sbox.build()
+
+  wc_dir = sbox.wc_dir
+
+  iota = os.path.join(wc_dir, 'iota')
+  iota2 = os.path.join(wc_dir, 'iota2')
+
+  shutil.copyfile(iota, iota2)
+
+  svntest.main.run_svn(None, 'rm', iota)
+  svntest.main.run_svn(None, 'add', iota2)
+
+  expected_output = wc.State(wc_dir, {
+    'iota' : Item(verb='Deleting'),
+    'iota2' : Item(verb='Adding'),
+    })
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.remove('iota')
+  expected_status.add({ 'iota2':  Item(status='  ', wc_rev='2')})
+
+  # At one time the commit post-processing used to fail with "Pristine text
+  # not found".
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None,
+                                        wc_dir)
+
 #----------------------------------------------------------------------
 
 ########################################################################
@@ -2530,7 +2573,7 @@ test_list = [ None,
               basic_switch,
               basic_delete,
               basic_checkout_deleted,
-              basic_node_kind_change,
+              Wimp('Needs single-db', basic_node_kind_change),
               basic_import,
               basic_cat,
               basic_ls,
@@ -2565,6 +2608,9 @@ 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),
+              delete_and_add_same_file,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py?rev=984468&r1=984467&r2=984468&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py Wed Aug 11 16:43:22 2010
@@ -173,6 +173,30 @@ def cat_unversioned_file(sbox):
   svntest.actions.run_and_verify_svn2(None, [], expected_error, 0,
                                       'cat', iota_path)
 
+
+def cat_keywords(sbox):
+  "cat a file with the svn:keywords property"
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  iota_path = os.path.join(wc_dir, 'iota')
+
+  svntest.actions.run_and_verify_svn(None,
+                                     ["This is the file 'iota'.\n"],
+                                     [], 'cat', iota_path)
+
+  svntest.main.file_append(iota_path, "$Revision$\n")
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'svn:keywords', 'Revision',
+                                     iota_path)
+
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'r2', wc_dir)
+
+  svntest.actions.run_and_verify_svn(None,
+                                     ["This is the file 'iota'.\n", "$Revision: 2 $\n"],
+                                     [], 'cat', iota_path)
+
+
 ########################################################################
 # Run the tests
 
@@ -185,6 +209,7 @@ test_list = [ None,
               cat_nonexistent_file,
               cat_skip_uncattable,
               cat_unversioned_file,
+              cat_keywords,
              ]
 
 if __name__ == '__main__':