Index: subversion/clients/cmdline/cl.h =================================================================== --- subversion/clients/cmdline/cl.h (revision 15888) +++ subversion/clients/cmdline/cl.h (working copy) @@ -150,7 +150,38 @@ svn_client_ctx_t *ctx; } svn_cl__cmd_baton_t; +struct svn_cl__notify_baton; +struct svn_cl__status_baton +{ + /* These fields all correspond to the ones in the + svn_cl__print_status() interface. */ + svn_boolean_t detailed; + svn_boolean_t show_last_committed; + svn_boolean_t skip_unrecognized; + svn_boolean_t repos_locks; + apr_pool_t *pool; + svn_boolean_t had_print_error; /* To avoid printing lots of errors if we get + errors while printing to stdout */ + svn_boolean_t xml_mode; + struct svn_cl__notify_baton *nb; +}; + +/* Baton for notify and friends. */ +struct svn_cl__notify_baton +{ + svn_boolean_t received_some_change; + svn_boolean_t is_checkout; + svn_boolean_t is_export; + svn_boolean_t suppress_final_line; + svn_boolean_t sent_first_txdelta; + svn_boolean_t in_external; + svn_boolean_t had_print_error; /* Used to not keep printing error messages + when we've already had one print error. */ + int extern_path_prefix_length; /* Used to recreate external folder name */ + struct svn_cl__status_baton *sb; +}; + /* Declare all the command procedures */ svn_opt_subcommand_t svn_cl__add, Index: subversion/clients/cmdline/notify.c =================================================================== --- subversion/clients/cmdline/notify.c (revision 15888) +++ subversion/clients/cmdline/notify.c (working copy) @@ -33,27 +33,12 @@ #include "svn_private_config.h" - -/* Baton for notify and friends. */ -struct notify_baton -{ - svn_boolean_t received_some_change; - svn_boolean_t is_checkout; - svn_boolean_t is_export; - svn_boolean_t suppress_final_line; - svn_boolean_t sent_first_txdelta; - svn_boolean_t in_external; - svn_boolean_t had_print_error; /* Used to not keep printing error messages - when we've already had one print error. */ -}; - - /* This implements `svn_wc_notify_func2_t'. * NOTE: This function can't fail, so we just ignore any print errors. */ static void notify (void *baton, const svn_wc_notify_t *n, apr_pool_t *pool) { - struct notify_baton *nb = baton; + struct svn_cl__notify_baton *nb = baton; char statchar_buf[5] = " "; const char *path_local; svn_error_t *err; @@ -281,10 +266,25 @@ break; case svn_wc_notify_status_external: - if ((err = svn_cmdline_printf - (pool, _("\nPerforming status on external item at '%s'\n"), - path_local))) - goto print_error; + if (nb->sb->detailed) /* -v, --verbose */ + { + if (nb->sb->skip_unrecognized) /* -q, --quiet */ + { + nb->extern_path_prefix_length = strlen(path_local); + } + else + { + nb->extern_path_prefix_length = 0; + if ((err = svn_cmdline_printf + (pool, _("\nPerforming status on external item at '%s'\n"), + path_local))) + goto print_error; + } + } + else + { + nb->extern_path_prefix_length = 0; + } break; case svn_wc_notify_status_completed: @@ -391,7 +391,7 @@ svn_boolean_t suppress_final_line, apr_pool_t *pool) { - struct notify_baton *nb = apr_palloc (pool, sizeof (*nb)); + struct svn_cl__notify_baton *nb = apr_palloc (pool, sizeof (*nb)); nb->received_some_change = FALSE; nb->sent_first_txdelta = FALSE; @@ -400,6 +400,8 @@ nb->suppress_final_line = suppress_final_line; nb->in_external = FALSE; nb->had_print_error = FALSE; + nb->extern_path_prefix_length = 0; + nb->sb = NULL; *notify_func_p = notify; *notify_baton_p = nb; Index: subversion/clients/cmdline/status-cmd.c =================================================================== --- subversion/clients/cmdline/status-cmd.c (revision 15888) +++ subversion/clients/cmdline/status-cmd.c (working copy) @@ -22,6 +22,7 @@ /*** Includes. ***/ +#include "svn_cmdline.h" #include "svn_wc.h" #include "svn_client.h" #include "svn_error.h" @@ -32,26 +33,8 @@ #include "svn_private_config.h" - - /*** Code. ***/ -struct status_baton -{ - /* These fields all correspond to the ones in the - svn_cl__print_status() interface. */ - svn_boolean_t detailed; - svn_boolean_t show_last_committed; - svn_boolean_t skip_unrecognized; - svn_boolean_t repos_locks; - apr_pool_t *pool; - - svn_boolean_t had_print_error; /* To avoid printing lots of errors if we get - errors while printing to stdout */ - svn_boolean_t xml_mode; -}; - - /* Prints XML target element with path attribute TARGET, using POOL for temporary allocations. */ static svn_error_t * @@ -119,9 +102,17 @@ const char *path, svn_wc_status2_t *status) { - struct status_baton *sb = baton; + struct svn_cl__status_baton *sb = baton; svn_error_t *err; - + + if (sb->nb->extern_path_prefix_length > 0) + { + err = svn_cmdline_printf + (sb->pool, _("\nPerforming status on external item at '%s'\n"), + apr_pstrndup (sb->pool, path, sb->nb->extern_path_prefix_length)); + sb->nb->extern_path_prefix_length = 0; + } + if (sb->xml_mode) err = svn_cl__print_status_xml (path, status, sb->pool); else @@ -156,7 +147,7 @@ apr_pool_t * subpool; int i; svn_opt_revision_t rev; - struct status_baton sb; + struct svn_cl__status_baton sb; svn_revnum_t repos_rev = SVN_INVALID_REVNUM; SVN_ERR (svn_opt_args_to_target_array2 (&targets, os, @@ -169,7 +160,10 @@ if (! opt_state->xml) svn_cl__get_notifier (&ctx->notify_func2, &ctx->notify_baton2, FALSE, FALSE, FALSE, pool); - + struct svn_cl__notify_baton *nb = ctx->notify_baton2; + sb.nb = nb; + nb->sb = &sb; + /* Add "." if user passed 0 arguments */ svn_opt_push_implicit_dot_target(targets, pool);