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__':