You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2015/01/03 15:00:44 UTC
svn commit: r1649205 [26/30] - in /subversion/branches/authzperf: ./ build/
build/ac-macros/ notes/ subversion/bindings/ctypes-python/
subversion/bindings/cxxhl/
subversion/bindings/javahl/tests/org/apache/subversion/javahl/
subversion/bindings/swig/ s...
Modified: subversion/branches/authzperf/subversion/svn-bench/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn-bench/cl.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn-bench/cl.h (original)
+++ subversion/branches/authzperf/subversion/svn-bench/cl.h Sat Jan 3 14:00:41 2015
@@ -90,8 +90,12 @@ typedef struct svn_cl__opt_state_t
svn_boolean_t no_revprops; /* retrieve no revprops */
apr_hash_t *revprop_table; /* table of revision properties to get/set */
svn_boolean_t use_merge_history; /* use/display extra merge information */
- svn_boolean_t trust_server_cert; /* trust server SSL certs that would
- otherwise be rejected as "untrusted" */
+ /* trust server SSL certs that would otherwise be rejected as "untrusted" */
+ svn_boolean_t trust_server_cert_unknown_ca;
+ svn_boolean_t trust_server_cert_cn_mismatch;
+ svn_boolean_t trust_server_cert_expired;
+ svn_boolean_t trust_server_cert_not_yet_valid;
+ svn_boolean_t trust_server_cert_other_failure;
} svn_cl__opt_state_t;
Modified: subversion/branches/authzperf/subversion/svn-bench/help-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn-bench/help-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn-bench/help-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svn-bench/help-cmd.c Sat Jan 3 14:00:41 2015
@@ -45,10 +45,9 @@ svn_cl__help(apr_getopt_t *os,
{
svn_cl__opt_state_t *opt_state;
- /* xgettext: the %s is for SVN_VER_NUMBER. */
- char help_header_template[] =
+ char help_header[] =
N_("usage: svn-bench <subcommand> [options] [args]\n"
- "Subversion command-line client, version %s.\n"
+ "Subversion benchmarking tool.\n"
"Type 'svn-bench help <subcommand>' for help on a specific subcommand.\n"
"Type 'svn-bench --version' to see the program version and RA modules\n"
" or 'svn-bench --version --quiet' to see just the version number.\n"
@@ -63,9 +62,6 @@ svn_cl__help(apr_getopt_t *os,
N_("Subversion is a tool for version control.\n"
"For additional information, see http://subversion.apache.org/\n");
- char *help_header =
- apr_psprintf(pool, _(help_header_template), SVN_VER_NUMBER);
-
const char *ra_desc_start
= _("The following repository access (RA) modules are available:\n\n");
Modified: subversion/branches/authzperf/subversion/svn-bench/svn-bench.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn-bench/svn-bench.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn-bench/svn-bench.c (original)
+++ subversion/branches/authzperf/subversion/svn-bench/svn-bench.c Sat Jan 3 14:00:41 2015
@@ -67,6 +67,11 @@ typedef enum svn_cl__longopt_t {
opt_with_all_revprops,
opt_with_no_revprops,
opt_trust_server_cert,
+ opt_trust_server_cert_unknown_ca,
+ opt_trust_server_cert_cn_mismatch,
+ opt_trust_server_cert_expired,
+ opt_trust_server_cert_not_yet_valid,
+ opt_trust_server_cert_other_failure,
opt_changelist
} svn_cl__longopt_t;
@@ -122,11 +127,29 @@ const apr_getopt_option_t svn_cl__option
{"no-auth-cache", opt_no_auth_cache, 0,
N_("do not cache authentication tokens")},
{"trust-server-cert", opt_trust_server_cert, 0,
- N_("accept SSL server certificates from unknown\n"
+ N_("deprecated; same as --trust-unknown-ca")},
+ {"trust-unknown-ca", opt_trust_server_cert_unknown_ca, 0,
+ N_("with --non-interactive, accept SSL server\n"
" "
- "certificate authorities without prompting (but only\n"
+ "certificates from unknown certificate authorities")},
+ {"trust-cn-mismatch", opt_trust_server_cert_cn_mismatch, 0,
+ N_("with --non-interactive, accept SSL server\n"
" "
- "with '--non-interactive')") },
+ "certificates even if the server hostname does not\n"
+ " "
+ "match the certificate's common name attribute")},
+ {"trust-expired", opt_trust_server_cert_expired, 0,
+ N_("with --non-interactive, accept expired SSL server\n"
+ " "
+ "certificates")},
+ {"trust-not-yet-valid", opt_trust_server_cert_not_yet_valid, 0,
+ N_("with --non-interactive, accept SSL server\n"
+ " "
+ "certificates from the future")},
+ {"trust-other-failure", opt_trust_server_cert_other_failure, 0,
+ N_("with --non-interactive, accept SSL server\n"
+ " "
+ "certificates with failures other than the above")},
{"non-interactive", opt_non_interactive, 0,
N_("do no interactive prompting")},
{"config-dir", opt_config_dir, 1,
@@ -182,7 +205,10 @@ const apr_getopt_option_t svn_cl__option
willy-nilly to every invocation of 'svn') . */
const int svn_cl__global_options[] =
{ opt_auth_username, opt_auth_password, opt_no_auth_cache, opt_non_interactive,
- opt_trust_server_cert, opt_config_dir, opt_config_options, 0
+ opt_trust_server_cert, opt_trust_server_cert_unknown_ca,
+ opt_trust_server_cert_cn_mismatch, opt_trust_server_cert_expired,
+ opt_trust_server_cert_not_yet_valid, opt_trust_server_cert_other_failure,
+ opt_config_dir, opt_config_options, 0
};
const svn_opt_subcommand_desc2_t svn_cl__cmd_table[] =
@@ -206,7 +232,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
{ "null-list", svn_cl__null_list, {"ls"}, N_
("List directory entries in the repository.\n"
- "usage: list [TARGET[@REV]...]\n"
+ "usage: null-list [TARGET[@REV]...]\n"
"\n"
" List each TARGET file and the contents of each TARGET directory as\n"
" they exist in the repository. If TARGET is a working copy path, the\n"
@@ -262,7 +288,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
{ "null-info", svn_cl__null_info, {0}, N_
("Display information about a local or remote item.\n"
- "usage: info [TARGET[@REV]...]\n"
+ "usage: null-info [TARGET[@REV]...]\n"
"\n"
" Print information about each TARGET (default: '.').\n"
" TARGET may be either a working-copy path or URL. If specified, REV\n"
@@ -578,8 +604,21 @@ sub_main(int *exit_code, int argc, const
case opt_non_interactive:
opt_state.non_interactive = TRUE;
break;
- case opt_trust_server_cert:
- opt_state.trust_server_cert = TRUE;
+ case opt_trust_server_cert: /* backwards compat to 1.8 */
+ case opt_trust_server_cert_unknown_ca:
+ opt_state.trust_server_cert_unknown_ca = TRUE;
+ break;
+ case opt_trust_server_cert_cn_mismatch:
+ opt_state.trust_server_cert_cn_mismatch = TRUE;
+ break;
+ case opt_trust_server_cert_expired:
+ opt_state.trust_server_cert_expired = TRUE;
+ break;
+ case opt_trust_server_cert_not_yet_valid:
+ opt_state.trust_server_cert_not_yet_valid = TRUE;
+ break;
+ case opt_trust_server_cert_other_failure:
+ opt_state.trust_server_cert_other_failure = TRUE;
break;
case 'x':
SVN_ERR(svn_utf_cstring_to_utf8(&opt_state.extensions,
@@ -756,12 +795,29 @@ sub_main(int *exit_code, int argc, const
"are mutually exclusive"));
}
- /* --trust-server-cert can only be used with --non-interactive */
- if (opt_state.trust_server_cert && !opt_state.non_interactive)
+ /* --trust-* options can only be used with --non-interactive */
+ if (!opt_state.non_interactive)
{
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("--trust-server-cert requires "
- "--non-interactive"));
+ if (opt_state.trust_server_cert_unknown_ca)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-unknown-ca requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_cn_mismatch)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-cn-mismatch requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_expired)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-expired requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_not_yet_valid)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-not-yet-valid requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_other_failure)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-other-failure requires "
+ "--non-interactive"));
}
/* Ensure that 'revision_ranges' has at least one item, and make
@@ -867,17 +923,22 @@ sub_main(int *exit_code, int argc, const
#endif
/* Set up Authentication stuff. */
- SVN_ERR(svn_cmdline_create_auth_baton(&ab,
- opt_state.non_interactive,
- opt_state.auth_username,
- opt_state.auth_password,
- opt_state.config_dir,
- opt_state.no_auth_cache,
- opt_state.trust_server_cert,
- cfg_config,
- ctx->cancel_func,
- ctx->cancel_baton,
- pool));
+ SVN_ERR(svn_cmdline_create_auth_baton2(
+ &ab,
+ opt_state.non_interactive,
+ opt_state.auth_username,
+ opt_state.auth_password,
+ opt_state.config_dir,
+ opt_state.no_auth_cache,
+ opt_state.trust_server_cert_unknown_ca,
+ opt_state.trust_server_cert_cn_mismatch,
+ opt_state.trust_server_cert_expired,
+ opt_state.trust_server_cert_not_yet_valid,
+ opt_state.trust_server_cert_other_failure,
+ cfg_config,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ pool));
ctx->auth_baton = ab;
Modified: subversion/branches/authzperf/subversion/svn/auth-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/auth-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/auth-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svn/auth-cmd.c Sat Jan 3 14:00:41 2015
@@ -293,7 +293,6 @@ svn_error_t *
svn_cl__auth(apr_getopt_t *os, void *baton, apr_pool_t *pool)
{
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;
const char *config_path;
struct walk_credentials_baton_t b;
@@ -301,11 +300,17 @@ svn_cl__auth(apr_getopt_t *os, void *bat
b.show_passwords = opt_state->show_passwords;
b.list = !opt_state->remove;
b.delete = opt_state->remove;
+ b.patterns = apr_array_make(pool, 1, sizeof(const char *));
+ for (; os->ind < os->argc; os->ind++)
+ {
+ /* The apr_getopt targets are still in native encoding. */
+ const char *raw_target = os->argv[os->ind];
+ const char *utf8_target;
- SVN_ERR(svn_cl__args_to_target_array_print_reserved(&b.patterns, os,
- opt_state->targets,
- ctx, FALSE,
- pool));
+ SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target,
+ raw_target, pool));
+ APR_ARRAY_PUSH(b.patterns, const char *) = utf8_target;
+ }
SVN_ERR(svn_config_get_user_config_path(&config_path,
opt_state->config_dir, NULL,
Modified: subversion/branches/authzperf/subversion/svn/checkout-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/checkout-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/checkout-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svn/checkout-cmd.c Sat Jan 3 14:00:41 2015
@@ -72,6 +72,7 @@ svn_cl__checkout(apr_getopt_t *os,
svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
apr_pool_t *subpool;
apr_array_header_t *targets;
+ struct svn_cl__check_externals_failed_notify_baton nwb;
const char *last_target, *local_dir;
int i;
@@ -113,6 +114,12 @@ svn_cl__checkout(apr_getopt_t *os,
if (! opt_state->quiet)
SVN_ERR(svn_cl__notifier_mark_checkout(ctx->notify_baton2));
+ nwb.wrapped_func = ctx->notify_func2;
+ nwb.wrapped_baton = ctx->notify_baton2;
+ nwb.had_externals_error = FALSE;
+ ctx->notify_func2 = svn_cl__check_externals_failed_notify_wrapper;
+ ctx->notify_baton2 = &nwb;
+
subpool = svn_pool_create(pool);
for (i = 0; i < targets->nelts; ++i)
{
@@ -169,5 +176,10 @@ svn_cl__checkout(apr_getopt_t *os,
}
svn_pool_destroy(subpool);
+ if (nwb.had_externals_error)
+ return svn_error_create(SVN_ERR_CL_ERROR_PROCESSING_EXTERNALS, NULL,
+ _("Failure occurred processing one or "
+ "more externals definitions"));
+
return SVN_NO_ERROR;
}
Modified: subversion/branches/authzperf/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/cl.h?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/cl.h (original)
+++ subversion/branches/authzperf/subversion/svn/cl.h Sat Jan 3 14:00:41 2015
@@ -227,8 +227,12 @@ typedef struct svn_cl__opt_state_t
svn_cl__show_revs_t show_revs; /* mergeinfo flavor */
svn_depth_t set_depth; /* new sticky ambient depth value */
svn_boolean_t reintegrate; /* use "reintegrate" merge-source heuristic */
- svn_boolean_t trust_server_cert; /* trust server SSL certs that would
- otherwise be rejected as "untrusted" */
+ /* trust server SSL certs that would otherwise be rejected as "untrusted" */
+ svn_boolean_t trust_server_cert_unknown_ca;
+ svn_boolean_t trust_server_cert_cn_mismatch;
+ svn_boolean_t trust_server_cert_expired;
+ svn_boolean_t trust_server_cert_not_yet_valid;
+ svn_boolean_t trust_server_cert_other_failure;
int strip; /* number of leading path components to strip */
svn_boolean_t ignore_keywords; /* do not expand keywords */
svn_boolean_t reverse_diff; /* reverse a diff (e.g. when patching) */
Modified: subversion/branches/authzperf/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/conflict-callbacks.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/authzperf/subversion/svn/conflict-callbacks.c Sat Jan 3 14:00:41 2015
@@ -695,6 +695,10 @@ handle_text_conflict(svn_wc_conflict_res
b->path_prefix, desc->local_abspath,
scratch_pool)));
+ /* ### TODO This whole feature availability check is grossly outdated.
+ DIFF_ALLOWED needs either to be redefined or to go away.
+ */
+
/* Diffing can happen between base and merged, to show conflict
markers to the user (this is the typical 3-way merge
scenario), or if no base is available, we can show a diff
@@ -714,9 +718,15 @@ handle_text_conflict(svn_wc_conflict_res
*next_option++ = "p";
if (diff_allowed)
{
- *next_option++ = "df";
+ /* We need one more path for this feature. */
+ if (desc->my_abspath)
+ *next_option++ = "df";
+
*next_option++ = "e";
- *next_option++ = "m";
+
+ /* We need one more path for this feature. */
+ if (desc->my_abspath)
+ *next_option++ = "m";
if (knows_something)
*next_option++ = "r";
@@ -781,7 +791,8 @@ handle_text_conflict(svn_wc_conflict_res
}
else if (strcmp(opt->code, "df") == 0)
{
- if (! diff_allowed)
+ /* Re-check preconditions. */
+ if (! diff_allowed || desc->my_abspath)
{
SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
_("Invalid option; there's no "
@@ -805,6 +816,15 @@ handle_text_conflict(svn_wc_conflict_res
{
svn_error_t *err;
+ /* Re-check preconditions. */
+ if (! desc->my_abspath)
+ {
+ SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+ _("Invalid option; there's no "
+ "base path to merge.\n\n")));
+ continue;
+ }
+
err = svn_cl__merge_file_externally(desc->base_abspath,
desc->their_abspath,
desc->my_abspath,
Modified: subversion/branches/authzperf/subversion/svn/export-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/export-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/export-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svn/export-cmd.c Sat Jan 3 14:00:41 2015
@@ -85,7 +85,15 @@ svn_cl__export(apr_getopt_t *os,
if (strcmp("", to) != 0)
/* svn_cl__eat_peg_revisions() but only on one target */
- SVN_ERR(svn_opt__split_arg_at_peg_revision(&to, NULL, to, pool));
+ {
+ const char *peg;
+
+ SVN_ERR(svn_opt__split_arg_at_peg_revision(&to, &peg, to, pool));
+ if (peg[0] && peg[1])
+ return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("'%s': a peg revision is not allowed here"),
+ APR_ARRAY_IDX(targets, 1, const char *));
+ }
}
SVN_ERR(svn_cl__check_target_is_local_path(to));
Modified: subversion/branches/authzperf/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/svn.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/svn.c (original)
+++ subversion/branches/authzperf/subversion/svn/svn.c Sat Jan 3 14:00:41 2015
@@ -125,6 +125,11 @@ typedef enum svn_cl__longopt_t {
opt_show_revs,
opt_reintegrate,
opt_trust_server_cert,
+ opt_trust_server_cert_unknown_ca,
+ opt_trust_server_cert_cn_mismatch,
+ opt_trust_server_cert_expired,
+ opt_trust_server_cert_not_yet_valid,
+ opt_trust_server_cert_other_failure,
opt_strip,
opt_ignore_keywords,
opt_reverse_diff,
@@ -236,11 +241,29 @@ const apr_getopt_option_t svn_cl__option
{"no-auth-cache", opt_no_auth_cache, 0,
N_("do not cache authentication tokens")},
{"trust-server-cert", opt_trust_server_cert, 0,
- N_("accept SSL server certificates from unknown\n"
+ N_("deprecated; same as --trust-unknown-ca")},
+ {"trust-unknown-ca", opt_trust_server_cert_unknown_ca, 0,
+ N_("with --non-interactive, accept SSL server\n"
" "
- "certificate authorities without prompting (but only\n"
+ "certificates from unknown certificate authorities")},
+ {"trust-cn-mismatch", opt_trust_server_cert_cn_mismatch, 0,
+ N_("with --non-interactive, accept SSL server\n"
" "
- "with '--non-interactive')") },
+ "certificates even if the server hostname does not\n"
+ " "
+ "match the certificate's common name attribute")},
+ {"trust-expired", opt_trust_server_cert_expired, 0,
+ N_("with --non-interactive, accept expired SSL server\n"
+ " "
+ "certificates")},
+ {"trust-not-yet-valid", opt_trust_server_cert_not_yet_valid, 0,
+ N_("with --non-interactive, accept SSL server\n"
+ " "
+ "certificates from the future")},
+ {"trust-other-failure", opt_trust_server_cert_other_failure, 0,
+ N_("with --non-interactive, accept SSL server\n"
+ " "
+ "certificates with failures other than the above")},
{"non-interactive", opt_non_interactive, 0,
N_("do no interactive prompting (default is to prompt\n"
" "
@@ -427,8 +450,11 @@ const apr_getopt_option_t svn_cl__option
willy-nilly to every invocation of 'svn') . */
const int svn_cl__global_options[] =
{ opt_auth_username, opt_auth_password, opt_no_auth_cache, opt_non_interactive,
- opt_force_interactive, opt_trust_server_cert, opt_config_dir,
- opt_config_options, 0
+ opt_force_interactive, opt_trust_server_cert,
+ opt_trust_server_cert_unknown_ca, opt_trust_server_cert_cn_mismatch,
+ opt_trust_server_cert_expired, opt_trust_server_cert_not_yet_valid,
+ opt_trust_server_cert_other_failure,
+ opt_config_dir, opt_config_options, 0
};
/* Options for giving a log message. (Some of these also have other uses.)
@@ -1505,9 +1531,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
" another Subversion client modifying the working copy\n"
" ' ' not locked for writing\n"
" 'L' locked for writing\n"
- " Fourth column: Scheduled commit will contain addition-with-history\n"
- " ' ' no history scheduled with commit\n"
- " '+' history scheduled with commit\n"
+ " Fourth column: Scheduled commit will create a copy (addition-with-history)\n"
+ " ' ' no history scheduled with commit (item was newly added)\n"
+ " '+' history scheduled with commit (item was copied)\n"
" Fifth column: Whether the item is switched or a file external\n"
" ' ' normal\n"
" 'S' the item has a Switched URL relative to the parent\n"
@@ -2124,8 +2150,21 @@ sub_main(int *exit_code, int argc, const
case opt_force_interactive:
force_interactive = TRUE;
break;
- case opt_trust_server_cert:
- opt_state.trust_server_cert = TRUE;
+ case opt_trust_server_cert: /* backwards compat to 1.8 */
+ case opt_trust_server_cert_unknown_ca:
+ opt_state.trust_server_cert_unknown_ca = TRUE;
+ break;
+ case opt_trust_server_cert_cn_mismatch:
+ opt_state.trust_server_cert_cn_mismatch = TRUE;
+ break;
+ case opt_trust_server_cert_expired:
+ opt_state.trust_server_cert_expired = TRUE;
+ break;
+ case opt_trust_server_cert_not_yet_valid:
+ opt_state.trust_server_cert_not_yet_valid = TRUE;
+ break;
+ case opt_trust_server_cert_other_failure:
+ opt_state.trust_server_cert_other_failure = TRUE;
break;
case opt_no_diff_added:
opt_state.diff.no_diff_added = TRUE;
@@ -2551,12 +2590,29 @@ sub_main(int *exit_code, int argc, const
"are mutually exclusive"));
}
- /* --trust-server-cert can only be used with --non-interactive */
- if (opt_state.trust_server_cert && !opt_state.non_interactive)
+ /* --trust-* options can only be used with --non-interactive */
+ if (!opt_state.non_interactive)
{
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- _("--trust-server-cert requires "
- "--non-interactive"));
+ if (opt_state.trust_server_cert_unknown_ca)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-unknown-ca requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_cn_mismatch)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-cn-mismatch requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_expired)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-expired requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_not_yet_valid)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-not-yet-valid requires "
+ "--non-interactive"));
+ if (opt_state.trust_server_cert_other_failure)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--trust-other-failure requires "
+ "--non-interactive"));
}
/* Disallow simultaneous use of both --diff-cmd and
@@ -2874,17 +2930,22 @@ sub_main(int *exit_code, int argc, const
#endif
/* Set up Authentication stuff. */
- SVN_ERR(svn_cmdline_create_auth_baton(&ab,
- opt_state.non_interactive,
- opt_state.auth_username,
- opt_state.auth_password,
- opt_state.config_dir,
- opt_state.no_auth_cache,
- opt_state.trust_server_cert,
- cfg_config,
- ctx->cancel_func,
- ctx->cancel_baton,
- pool));
+ SVN_ERR(svn_cmdline_create_auth_baton2(
+ &ab,
+ opt_state.non_interactive,
+ opt_state.auth_username,
+ opt_state.auth_password,
+ opt_state.config_dir,
+ opt_state.no_auth_cache,
+ opt_state.trust_server_cert_unknown_ca,
+ opt_state.trust_server_cert_cn_mismatch,
+ opt_state.trust_server_cert_expired,
+ opt_state.trust_server_cert_not_yet_valid,
+ opt_state.trust_server_cert_other_failure,
+ cfg_config,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ pool));
ctx->auth_baton = ab;
Modified: subversion/branches/authzperf/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svn/util.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svn/util.c (original)
+++ subversion/branches/authzperf/subversion/svn/util.c Sat Jan 3 14:00:41 2015
@@ -560,8 +560,8 @@ svn_cl__error_checked_fputs(const char *
if (fputs(string, stream) == EOF)
{
- if (errno)
- return svn_error_wrap_apr(errno, _("Write error"));
+ if (apr_get_os_error()) /* is errno on POSIX */
+ return svn_error_wrap_apr(apr_get_os_error(), _("Write error"));
else
return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL, NULL);
}
Modified: subversion/branches/authzperf/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnadmin/svnadmin.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/authzperf/subversion/svnadmin/svnadmin.c Sat Jan 3 14:00:41 2015
@@ -329,7 +329,7 @@ static const apr_getopt_option_t options
" identical")},
{"metadata-only", svnadmin__metadata_only, 0,
- N_("verify metadata only (ignored for BDB),"
+ N_("verify metadata only (ignored for BDB),\n"
" checking against external corruption in\n"
" Subversion 1.9+ format repositories.\n")},
@@ -358,14 +358,16 @@ static const svn_opt_subcommand_desc2_t
} },
{"delrevprop", subcommand_delrevprop, {0}, N_
- ("usage: svnadmin delrevprop REPOS_PATH -r REVISION NAME\n\n"
- "Delete the property NAME on revision REVISION. Use\n"
- "--use-pre-revprop-change-hook/--use-post-revprop-change-hook to trigger\n"
- "the revision property-related hooks (for example, if you want an email\n"
- "notification sent from your post-revprop-change hook).\n\n"
+ ("usage: 1. svnadmin delrevprop REPOS_PATH -r REVISION NAME\n"
+ " 2. svnadmin delrevprop REPO_PATH -t TXN NAME\n\n"
+ "1. Delete the property NAME on revision REVISION.\n\n"
+ "Use --use-pre-revprop-change-hook/--use-post-revprop-change-hook to\n"
+ "trigger the revision property-related hooks (for example, if you want\n"
+ "an email notification sent from your post-revprop-change hook).\n\n"
"NOTE: Revision properties are not versioned, so this command will\n"
- "irreversibly destroy the previous value of the property.\n"),
- {'r', svnadmin__use_pre_revprop_change_hook,
+ "irreversibly destroy the previous value of the property.\n\n"
+ "2. Delete the property NAME on transaction TXN.\n"),
+ {'r', 't', svnadmin__use_pre_revprop_change_hook,
svnadmin__use_post_revprop_change_hook} },
{"deltify", subcommand_deltify, {0}, N_
@@ -497,14 +499,16 @@ static const svn_opt_subcommand_desc2_t
{'r', svnadmin__bypass_hooks} },
{"setrevprop", subcommand_setrevprop, {0}, N_
- ("usage: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n\n"
- "Set the property NAME on revision REVISION to the contents of FILE. Use\n"
- "--use-pre-revprop-change-hook/--use-post-revprop-change-hook to trigger\n"
- "the revision property-related hooks (for example, if you want an email\n"
- "notification sent from your post-revprop-change hook).\n\n"
+ ("usage: 1. svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE\n"
+ " 2. svnadmin setrevprop REPOS_PATH -t TXN NAME FILE\n\n"
+ "1. Set the property NAME on revision REVISION to the contents of FILE.\n\n"
+ "Use --use-pre-revprop-change-hook/--use-post-revprop-change-hook to\n"
+ "trigger the revision property-related hooks (for example, if you want\n"
+ "an email notification sent from your post-revprop-change hook).\n\n"
"NOTE: Revision properties are not versioned, so this command will\n"
- "overwrite the previous value of the property.\n"),
- {'r', svnadmin__use_pre_revprop_change_hook,
+ "overwrite the previous value of the property.\n\n"
+ "2. Set the property NAME on transaction TXN to the contents of FILE.\n"),
+ {'r', 't', svnadmin__use_pre_revprop_change_hook,
svnadmin__use_post_revprop_change_hook} },
{"setuuid", subcommand_setuuid, {0}, N_
@@ -1609,7 +1613,7 @@ subcommand_rmtxns(apr_getopt_t *os, void
/* A helper for the 'setrevprop' and 'setlog' commands. Expects
- OPT_STATE->use_pre_revprop_change_hook and
+ OPT_STATE->txn_id, OPT_STATE->use_pre_revprop_change_hook and
OPT_STATE->use_post_revprop_change_hook to be set appropriately.
If FILENAME is NULL, delete property PROP_NAME. */
static svn_error_t *
@@ -1640,9 +1644,16 @@ set_revprop(const char *prop_name, const
/* Open the filesystem */
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
- /* If we are bypassing the hooks system, we just hit the filesystem
- directly. */
- SVN_ERR(svn_repos_fs_change_rev_prop4(
+ if (opt_state->txn_id)
+ {
+ svn_fs_t *fs = svn_repos_fs(repos);
+ svn_fs_txn_t *txn;
+
+ SVN_ERR(svn_fs_open_txn(&txn, fs, opt_state->txn_id, pool));
+ SVN_ERR(svn_fs_change_txn_prop(txn, prop_name, prop_value, pool));
+ }
+ else
+ SVN_ERR(svn_repos_fs_change_rev_prop4(
repos, opt_state->start_revision.value.number,
NULL, prop_name, NULL, prop_value,
opt_state->use_pre_revprop_change_hook,
@@ -1667,7 +1678,21 @@ subcommand_setrevprop(apr_getopt_t *os,
filename = APR_ARRAY_IDX(args, 1, const char *);
SVN_ERR(target_arg_to_dirent(&filename, filename, pool));
- if (opt_state->start_revision.kind != svn_opt_revision_number)
+ if (opt_state->txn_id)
+ {
+ if (opt_state->start_revision.kind != svn_opt_revision_unspecified
+ || opt_state->end_revision.kind != svn_opt_revision_unspecified)
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--revision (-r) and --transaction (-t) "
+ "are mutually exclusive"));
+
+ if (opt_state->use_pre_revprop_change_hook
+ || opt_state->use_post_revprop_change_hook)
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Calling hooks is incompatible with "
+ "--transaction (-t)"));
+ }
+ else if (opt_state->start_revision.kind != svn_opt_revision_number)
return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Missing revision"));
else if (opt_state->end_revision.kind != svn_opt_revision_unspecified)
@@ -2002,6 +2027,11 @@ subcommand_info(apr_getopt_t *os, void *
SVN_ERR(svn_cmdline_printf(pool, _("FSFS Shards Packed: %ld/%ld\n"),
shards_packed, shards_full));
}
+
+ if (fsfs_info->log_addressing)
+ SVN_ERR(svn_cmdline_printf(pool, _("FSFS Logical Addressing: yes\n")));
+ else
+ SVN_ERR(svn_cmdline_printf(pool, _("FSFS Logical Addressing: no\n")));
}
}
@@ -2348,7 +2378,21 @@ subcommand_delrevprop(apr_getopt_t *os,
SVN_ERR(parse_args(&args, os, 1, 1, pool));
prop_name = APR_ARRAY_IDX(args, 0, const char *);
- if (opt_state->start_revision.kind != svn_opt_revision_number)
+ if (opt_state->txn_id)
+ {
+ if (opt_state->start_revision.kind != svn_opt_revision_unspecified
+ || opt_state->end_revision.kind != svn_opt_revision_unspecified)
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--revision (-r) and --transaction (-t) "
+ "are mutually exclusive"));
+
+ if (opt_state->use_pre_revprop_change_hook
+ || opt_state->use_post_revprop_change_hook)
+ return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Calling hooks is incompatible with "
+ "--transaction (-t)"));
+ }
+ else if (opt_state->start_revision.kind != svn_opt_revision_number)
return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Missing revision"));
else if (opt_state->end_revision.kind != svn_opt_revision_unspecified)
Modified: subversion/branches/authzperf/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svndumpfilter/svndumpfilter.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/authzperf/subversion/svndumpfilter/svndumpfilter.c Sat Jan 3 14:00:41 2015
@@ -791,10 +791,16 @@ adjust_mergeinfo(svn_string_t **final_va
start of all history. E.g. if we dump -r100:400 then dumpfilter the
result with --skip-missing-merge-sources, any mergeinfo with revision
100 implies a change of -r99:100, but r99 is part of the history we
- want filtered. This is analogous to how r1 is always meaningless as
- a merge source revision.
+ want filtered.
If the oldest rev is r0 then there is nothing to filter. */
+
+ /* ### This seems to cater only for use cases where the revisions being
+ processed are not following on from revisions that will already
+ exist in the destination repository. If the revisions being
+ processed do follow on, then we might want to keep the mergeinfo
+ that refers to those older revisions. */
+
if (rb->pb->skip_missing_merge_sources && rb->pb->oldest_original_rev > 0)
SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
&mergeinfo, mergeinfo,
@@ -852,7 +858,7 @@ adjust_mergeinfo(svn_string_t **final_va
svn_hash_sets(final_mergeinfo, merge_source, rangelist);
}
- SVN_ERR(svn_mergeinfo_sort(final_mergeinfo, subpool));
+ SVN_ERR(svn_mergeinfo__canonicalize_ranges(final_mergeinfo, subpool));
SVN_ERR(svn_mergeinfo_to_string(final_val, final_mergeinfo, pool));
svn_pool_destroy(subpool);
Modified: subversion/branches/authzperf/subversion/svnfsfs/dump-index-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnfsfs/dump-index-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnfsfs/dump-index-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svnfsfs/dump-index-cmd.c Sat Jan 3 14:00:41 2015
@@ -20,14 +20,11 @@
* ====================================================================
*/
+#define APR_WANT_BYTEFUNC
+
#include "svn_dirent_uri.h"
#include "svn_pools.h"
-
-#include "../libsvn_fs_fs/fs.h"
-#include "../libsvn_fs_fs/index.h"
-#include "../libsvn_fs_fs/rev_file.h"
-#include "../libsvn_fs_fs/util.h"
-#include "../libsvn_fs/fs-loader.h"
+#include "private/svn_fs_fs_private.h"
#include "svnfsfs.h"
@@ -50,6 +47,28 @@ fnv1_to_string(apr_uint32_t fnv1,
static const char *item_type_str[]
= {"none ", "frep ", "drep ", "fprop", "dprop", "node ", "chgs ", "rep "};
+/* Implements svn_fs_fs__dump_index_func_t as printing one table row
+ * containing the fields of ENTRY to the console.
+ */
+static svn_error_t *
+dump_index_entry(const svn_fs_fs__p2l_entry_t *entry,
+ void *baton,
+ apr_pool_t *scratch_pool)
+{
+ const char *type_str
+ = entry->type < (sizeof(item_type_str) / sizeof(item_type_str[0]))
+ ? item_type_str[entry->type]
+ : "???";
+
+ printf("%12" APR_UINT64_T_HEX_FMT " %12" APR_UINT64_T_HEX_FMT
+ " %s %9ld %8" APR_UINT64_T_FMT " %s\n",
+ (apr_uint64_t)entry->offset, (apr_uint64_t)entry->size,
+ type_str, entry->item.revision, entry->item.number,
+ fnv1_to_string(entry->fnv1_checksum, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
/* Read the repository at PATH beginning with revision START_REVISION and
* return the result in *FS. Allocate caches with MEMSIZE bytes total
* capacity. Use POOL for non-cache allocations.
@@ -59,65 +78,17 @@ dump_index(const char *path,
svn_revnum_t revision,
apr_pool_t *pool)
{
- svn_fs_fs__revision_file_t *rev_file;
svn_fs_t *fs;
- fs_fs_data_t *ffd;
- int i;
- apr_off_t offset, max_offset;
- apr_pool_t *iterpool = svn_pool_create(pool);
/* Check repository type and open it. */
SVN_ERR(open_fs(&fs, path, pool));
- ffd = fs->fsap_data;
-
- /* Check the FS format. */
- if (! svn_fs_fs__use_log_addressing(fs, revision))
- return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL, NULL);
-
- /* Revision & index file access object. */
- SVN_ERR(svn_fs_fs__open_pack_or_rev_file(&rev_file, fs, revision, pool,
- iterpool));
-
- /* Offset range to cover. */
- SVN_ERR(svn_fs_fs__p2l_get_max_offset(&max_offset, fs, rev_file, revision,
- pool));
/* Write header line. */
printf(" Start Length Type Revision Item Checksum\n");
- /* Walk through all P2L index entries in offset order. */
- for (offset = 0; offset < max_offset; )
- {
- apr_array_header_t *entries;
-
- /* Read entries for the next block. There will be no overlaps since
- * we start at the first offset not covered. */
- svn_pool_clear(iterpool);
- SVN_ERR(svn_fs_fs__p2l_index_lookup(&entries, fs, rev_file, revision,
- offset, ffd->p2l_page_size,
- iterpool));
-
- /* Print entries for this block, one line per entry. */
- for (i = 0; i < entries->nelts && offset < max_offset; ++i)
- {
- const svn_fs_fs__p2l_entry_t *entry
- = &APR_ARRAY_IDX(entries, i, const svn_fs_fs__p2l_entry_t);
- const char *type_str
- = entry->type < (sizeof(item_type_str) / sizeof(item_type_str[0]))
- ? item_type_str[entry->type]
- : "???";
-
- offset = entry->offset + entry->size;
-
- printf("%12" APR_UINT64_T_HEX_FMT " %12" APR_UINT64_T_HEX_FMT
- " %s %9ld %8" APR_UINT64_T_FMT " %s\n",
- (apr_uint64_t)entry->offset, (apr_uint64_t)entry->size,
- type_str, entry->item.revision, entry->item.number,
- fnv1_to_string(entry->fnv1_checksum, iterpool));
- }
- }
-
- svn_pool_destroy(iterpool);
+ /* Dump the whole index contents */
+ SVN_ERR(svn_fs_fs__dump_index(fs, revision, dump_index_entry, NULL,
+ check_cancel, NULL, pool));
return SVN_NO_ERROR;
}
Modified: subversion/branches/authzperf/subversion/svnfsfs/load-index-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnfsfs/load-index-cmd.c?rev=1649205&r1=1649204&r2=1649205&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnfsfs/load-index-cmd.c (original)
+++ subversion/branches/authzperf/subversion/svnfsfs/load-index-cmd.c Sat Jan 3 14:00:41 2015
@@ -25,12 +25,9 @@
#include "svn_io.h"
#include "svn_pools.h"
+#include "private/svn_fs_fs_private.h"
#include "private/svn_sorts_private.h"
-#include "../libsvn_fs_fs/index.h"
-#include "../libsvn_fs_fs/transaction.h"
-#include "../libsvn_fs_fs/util.h"
-
#include "svn_private_config.h"
#include "svnfsfs.h"
@@ -168,45 +165,11 @@ load_index(const char *path,
* Get a revision from (probably inside) the respective shard. */
if ( revision == SVN_INVALID_REVNUM
&& entry->item.revision != SVN_INVALID_REVNUM)
- {
- revision = entry->item.revision;
-
- /* Check the FS format number. */
- if (! svn_fs_fs__use_log_addressing(fs, revision))
- return svn_error_create(SVN_ERR_FS_UNSUPPORTED_FORMAT, NULL, NULL);
- }
-
- }
-
- /* Treat an empty array as a no-op instead error. */
- if (entries->nelts != 0)
- {
- const char *l2p_proto_index;
- const char *p2l_proto_index;
- svn_fs_fs__revision_file_t *rev_file;
-
- /* Open rev / pack file & trim indexes + footer off it. */
- SVN_ERR(svn_fs_fs__open_pack_or_rev_file_writable(&rev_file, fs,
- revision, iterpool,
- iterpool));
- SVN_ERR(svn_fs_fs__auto_read_footer(rev_file));
- SVN_ERR(svn_io_file_trunc(rev_file->file, rev_file->l2p_offset,
- iterpool));
-
- /* Create proto index files for the new index data
- * (will be cleaned up automatically with iterpool). */
- SVN_ERR(svn_fs_fs__p2l_index_from_p2l_entries(&p2l_proto_index, fs,
- rev_file, entries,
- iterpool, iterpool));
- SVN_ERR(svn_fs_fs__l2p_index_from_p2l_entries(&l2p_proto_index, fs,
- entries, iterpool,
- iterpool));
-
- /* Combine rev data with new index data. */
- SVN_ERR(svn_fs_fs__add_index_data(fs, rev_file->file, l2p_proto_index,
- p2l_proto_index, revision, iterpool));
+ revision = entry->item.revision;
}
+ /* Rewrite the indexes. */
+ SVN_ERR(svn_fs_fs__load_index(fs, revision, entries, iterpool));
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;