Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-metadata.sql?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-metadata.sql Mon Apr 20 08:10:40 2015 @@ -598,30 +598,30 @@ CREATE UNIQUE INDEX I_EXTERNALS_DEFINED ANALYZE sqlite_master; /* Creates empty sqlite_stat1 if necessary */ DELETE FROM sqlite_stat1 -WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK'); +WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK', 'EXTERNALS'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('NODES', 'sqlite_autoindex_NODES_1', '8000 8000 2 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('NODES', 'I_NODES_PARENT', '8000 8000 10 2 1'); /* Tell a lie: We ignore that 99.9% of all moved_to values are NULL */ -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('NODES', 'I_NODES_MOVED', '8000 8000 1 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('ACTUAL_NODE', 'sqlite_autoindex_ACTUAL_NODE_1', '8000 8000 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('ACTUAL_NODE', 'I_ACTUAL_PARENT', '8000 8000 10 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('LOCK', 'sqlite_autoindex_LOCK_1', '100 100 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('WC_LOCK', 'sqlite_autoindex_WC_LOCK_1', '100 100 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('EXTERNALS','sqlite_autoindex_EXTERNALS_1', '100 100 1'); -INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES +INSERT INTO sqlite_stat1(tbl, idx, stat) VALUES ('EXTERNALS','I_EXTERNALS_DEFINED', '100 100 3 1'); /* sqlite_autoindex_WORK_QUEUE_1 doesn't exist because WORK_QUEUE is
Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db.c (original) +++ subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db.c Mon Apr 20 08:10:40 2015 @@ -9434,8 +9434,8 @@ read_children_info(svn_wc__db_wcroot_t * moved_to_relpath, result_pool); - shadow_op_relpath = svn_relpath_limit(child_relpath, op_depth, - scratch_pool); + shadow_op_relpath = svn_relpath_prefix(child_relpath, op_depth, + scratch_pool); moved_to->shadow_op_root_abspath = svn_dirent_join(wcroot->abspath, shadow_op_relpath, @@ -9624,8 +9624,8 @@ read_single_info(const struct svn_wc__db moved_to_relpath, result_pool); - cur_relpath = svn_relpath_limit(local_relpath, op_depth, - scratch_pool); + cur_relpath = svn_relpath_prefix(local_relpath, op_depth, + scratch_pool); move->shadow_op_root_abspath = svn_dirent_join(wcroot->abspath, cur_relpath, @@ -12700,7 +12700,8 @@ scan_addition(svn_wc__db_status_t *statu /* Calculate the op root local path components */ - op_root_relpath = svn_relpath_limit(local_relpath, op_depth, scratch_pool); + op_root_relpath = svn_relpath_prefix(local_relpath, op_depth, + scratch_pool); repos_prefix_path = svn_relpath_skip_ancestor(op_root_relpath, local_relpath); @@ -12819,8 +12820,8 @@ scan_addition(svn_wc__db_status_t *statu /* Skip to op_depth */ tmp = op_root_relpath; - op_root_relpath = svn_relpath_limit(op_root_relpath, op_depth, - scratch_pool); + op_root_relpath = svn_relpath_prefix(op_root_relpath, op_depth, + scratch_pool); repos_prefix_path = svn_relpath_join( svn_relpath_skip_ancestor(op_root_relpath, tmp), repos_prefix_path, scratch_pool); @@ -13029,8 +13030,8 @@ svn_wc__db_scan_moved(const char **moved /* The deleted node is either where we moved from, or one of its ancestors */ if (moved_from_delete_abspath) { - const char *tmp = svn_relpath_limit(moved_from_op_root_relpath, - moved_from_op_depth, scratch_pool); + const char *tmp = svn_relpath_prefix(moved_from_op_root_relpath, + moved_from_op_depth, scratch_pool); *moved_from_delete_abspath = svn_dirent_join(wcroot->abspath, tmp, scratch_pool); @@ -13236,8 +13237,8 @@ svn_wc__db_scan_moved_to_internal(const *move_dst_relpath = apr_pstrdup(result_pool, dst_relpath); if (delete_relpath) - *delete_relpath = svn_relpath_limit(local_relpath, delete_op_depth, - result_pool); + *delete_relpath = svn_relpath_prefix(local_relpath, delete_op_depth, + result_pool); } return SVN_NO_ERROR; Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db_update_move.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db_update_move.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db_update_move.c (original) +++ subversion/branches/move-tracking-2/subversion/libsvn_wc/wc_db_update_move.c Mon Apr 20 08:10:40 2015 @@ -490,9 +490,9 @@ create_node_tree_conflict(svn_skel_t **c { update_move_baton_t *umb = nmb->umb; const char *dst_repos_relpath; - const char *dst_root_relpath = svn_relpath_limit(nmb->dst_relpath, - nmb->umb->dst_op_depth, - scratch_pool); + const char *dst_root_relpath = svn_relpath_prefix(nmb->dst_relpath, + nmb->umb->dst_op_depth, + scratch_pool); dst_repos_relpath = svn_relpath_join(nmb->umb->old_version->path_in_repos, @@ -504,9 +504,9 @@ create_node_tree_conflict(svn_skel_t **c return svn_error_trace( create_tree_conflict(conflict_p, umb->wcroot, dst_local_relpath, - svn_relpath_limit(dst_local_relpath, - umb->dst_op_depth, - scratch_pool), + svn_relpath_prefix(dst_local_relpath, + umb->dst_op_depth, + scratch_pool), umb->db, umb->old_version, umb->new_version, umb->operation, old_kind, new_kind, @@ -2083,8 +2083,8 @@ bump_moved_layer(svn_boolean_t *recurse, can_bump = FALSE; } - src_root_relpath = svn_relpath_limit(src_relpath, src_del_depth, - scratch_pool); + src_root_relpath = svn_relpath_prefix(src_relpath, src_del_depth, + scratch_pool); if (!can_bump) { @@ -2404,9 +2404,9 @@ svn_wc__db_op_raise_moved_away_internal( src_repos_relpath, svn_wc_conflict_reason_moved_away, action, - svn_relpath_limit(src_relpath, - delete_op_depth, - iterpool), + svn_relpath_prefix(src_relpath, + delete_op_depth, + iterpool), iterpool, iterpool); if (!err) Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/liveprops.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/liveprops.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/mod_dav_svn/liveprops.c (original) +++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/liveprops.c Mon Apr 20 08:10:40 2015 @@ -787,58 +787,39 @@ insert_prop_internal(const dav_resource case SVN_PROPID_deadprop_count: { + svn_boolean_t has_props; + if (resource->type != DAV_RESOURCE_TYPE_REGULAR) return DAV_PROP_INSERT_NOTSUPP; - if (resource->info->repos->is_svn_client) - { - svn_boolean_t has_props; - /* Retrieving the actual properties is quite expensive while - svn clients only want to know if there are properties, and - in many cases aren't interested at all (see r1673153) */ - serr = svn_fs_node_has_props(&has_props, - resource->info->root.root, - resource->info->repos_path, - scratch_pool); - - if (serr != NULL) - { - ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err, - resource->info->r, - "Can't fetch has props of '%s': " - "%s", - resource->info->repos_path, - serr->message); - svn_error_clear(serr); - value = error_value; - break; - } + /* Retrieving the actual properties is quite expensive while + svn clients only want to know if there are properties, by + using this svn defined property. + + Our and and SvnKit's implementation of the ra layer check + for '> 0' to provide the boolean if the node has custom + properties or not, so starting with 1.9 we just provide + "1" or "0". + */ + serr = svn_fs_node_has_props(&has_props, + resource->info->root.root, + resource->info->repos_path, + scratch_pool); - value = has_props ? "99" /* Magic (undocumented) value */ : "0"; - } - else + if (serr != NULL) { - unsigned int propcount; - apr_hash_t *proplist; - serr = svn_fs_node_proplist(&proplist, - resource->info->root.root, - resource->info->repos_path, scratch_pool); - if (serr != NULL) - { - ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err, - resource->info->r, - "Can't fetch proplist of '%s': " - "%s", - resource->info->repos_path, - serr->message); - svn_error_clear(serr); - value = error_value; - break; - } - - propcount = apr_hash_count(proplist); - value = apr_psprintf(scratch_pool, "%u", propcount); + ap_log_rerror(APLOG_MARK, APLOG_ERR, serr->apr_err, + resource->info->r, + "Can't fetch has properties on '%s': " + "%s", + resource->info->repos_path, + serr->message); + svn_error_clear(serr); + value = error_value; + break; } + + value = has_props ? "1" : "0"; break; } Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c (original) +++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c Mon Apr 20 08:10:40 2015 @@ -2126,6 +2126,16 @@ get_resource(request_rec *r, xslt_uri = dav_svn__get_xslt_uri(r); fs_parent_path = dav_svn__get_fs_parent_path(r); + if (r->method_number == M_COPY) + { + /* Workaround for issue #4531: Avoid a depth-infinity walk on + the copy source by overriding the Depth header here. + mod_dav defaults to infinite depth if this header is not set + which makes copies O(size of source) rather than the desired O(1). + ### Should be fixed by an explicit provider API feature in mod_dav. */ + apr_table_setn(r->headers_in, "Depth", "0"); + } + /* Special case: detect and build the SVNParentPath as a unique type of private resource, iff the SVNListParentPath directive is 'on'. */ if (dav_svn__is_parentpath_list(r)) Modified: subversion/branches/move-tracking-2/subversion/svn/conflict-callbacks.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svn/conflict-callbacks.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svn/conflict-callbacks.c (original) +++ subversion/branches/move-tracking-2/subversion/svn/conflict-callbacks.c Mon Apr 20 08:10:40 2015 @@ -44,6 +44,9 @@ #include "svn_private_config.h" #define ARRAY_LEN(ary) ((sizeof (ary)) / (sizeof ((ary)[0]))) +#define MAX_ARRAY_LEN(aryx, aryz) \ + (ARRAY_LEN((aryx)) > ARRAY_LEN((aryz)) \ + ? ARRAY_LEN((aryx)) : ARRAY_LEN((aryz))) @@ -709,12 +712,12 @@ handle_text_conflict(svn_wc_conflict_res give them a rational basis for choosing (r)esolved? */ svn_boolean_t knows_something = FALSE; const char *local_relpath; - + SVN_ERR_ASSERT(desc->kind == svn_wc_conflict_kind_text); local_relpath = svn_cl__local_style_skip_ancestor(b->path_prefix, desc->local_abspath, - scratch_pool);; + scratch_pool); if (desc->is_binary) SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, @@ -740,22 +743,17 @@ handle_text_conflict(svn_wc_conflict_res while (TRUE) { + const char *options[1 + MAX_ARRAY_LEN(binary_conflict_options, + text_conflict_options)]; + const resolver_option_t *conflict_options = desc->is_binary ? binary_conflict_options : text_conflict_options; - const char **options; - const char **next_option; + const char **next_option = options; const resolver_option_t *opt; svn_pool_clear(iterpool); - options = apr_palloc(iterpool, - sizeof (const char *) * - (desc->is_binary - ? ARRAY_LEN(binary_conflict_options) - : ARRAY_LEN(text_conflict_options))); - next_option = options; - *next_option++ = "p"; if (diff_allowed) { Modified: subversion/branches/move-tracking-2/subversion/svn/similarity.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svn/similarity.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svn/similarity.c (original) +++ subversion/branches/move-tracking-2/subversion/svn/similarity.c Mon Apr 20 08:10:40 2015 @@ -114,6 +114,8 @@ svn_cl__similarity_check(const char *key { svn_cl__simcheck_t *const token = tokens[i]; token->context = NULL; + /* If you update this factor, consider updating + * ../libsvn_subr/cmdline.c:most_similar(). */ if (token->score >= (2 * SVN_STRING__SIM_RANGE_MAX + 1) / 3) ++result; } Modified: subversion/branches/move-tracking-2/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svn/svn.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svn/svn.c (original) +++ subversion/branches/move-tracking-2/subversion/svn/svn.c Mon Apr 20 08:10:40 2015 @@ -2265,7 +2265,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(opt_state.config_options, - utf8_opt_arg, pool)); + utf8_opt_arg, "svn: ", pool)); break; case opt_autoprops: opt_state.autoprops = TRUE; Modified: subversion/branches/move-tracking-2/subversion/svnbench/cl.h URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnbench/cl.h?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnbench/cl.h (original) +++ subversion/branches/move-tracking-2/subversion/svnbench/cl.h Mon Apr 20 08:10:40 2015 @@ -80,7 +80,6 @@ typedef struct svn_cl__opt_state_t svn_boolean_t help; /* print usage message */ const char *auth_username; /* auth username */ /* UTF-8! */ const char *auth_password; /* auth password */ /* UTF-8! */ - const char *extensions; /* subprocess extension args */ /* UTF-8! */ apr_array_header_t *targets; /* target list from file */ /* UTF-8! */ svn_boolean_t no_auth_cache; /* do not cache authentication information */ svn_boolean_t stop_on_copy; /* don't cross copies during processing */ @@ -109,6 +108,7 @@ typedef struct svn_cl__cmd_baton_t /* Declare all the command procedures */ svn_opt_subcommand_t svn_cl__help, + svn_cl__null_blame, svn_cl__null_export, svn_cl__null_list, svn_cl__null_log, Modified: subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c (original) +++ subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c Mon Apr 20 08:10:40 2015 @@ -219,6 +219,26 @@ const svn_opt_subcommand_desc2_t svn_cl_ {0} }, /* This command is also invoked if we see option "--help", "-h" or "-?". */ + { "null-blame", svn_cl__null_blame, {0}, N_ + ("Fetch all versions of a file in a batch.\n" + "usage: null-blame [-rM:N] TARGET[@REV]...\n" + "\n" + " With no revision range (same as -r0:REV), or with '-r M:N' where M < N,\n" + " annotate each line that is present in revision N of the file, with\n" + " the last revision at or before rN that changed or added the line,\n" + " looking back no further than rM.\n" + "\n" + " With a reverse revision range '-r M:N' where M > N,\n" + " annotate each line that is present in revision N of the file, with\n" + " the next revision after rN that changed or deleted the line,\n" + " looking forward no further than rM.\n" + "\n" + " If specified, REV determines in which revision the target is first\n" + " looked up.\n" + "\n" + " Write the annotated result to standard output.\n"), + {'r', 'g'} }, + { "null-export", svn_cl__null_export, {0}, N_ ("Create an unversioned copy of a tree.\n" "usage: null-export [-r REV] URL[@PEGREV]\n" @@ -281,8 +301,7 @@ const svn_opt_subcommand_desc2_t svn_cl_ " follow copy history by default. Use --stop-on-copy to disable this\n" " behavior, which can be useful for determining branchpoints.\n"), {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, - 'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop, - 'x',}, + 'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,}, {{opt_with_revprop, N_("retrieve revision property ARG")}, {'c', N_("the change made in revision ARG")}} }, @@ -620,10 +639,6 @@ sub_main(int *exit_code, int argc, const 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, - opt_arg, pool)); - break; case opt_config_dir: { const char *path_utf8; @@ -639,7 +654,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(opt_state.config_options, - opt_arg, pool)); + opt_arg, "svnbench: ", pool)); break; case opt_with_all_revprops: /* If --with-all-revprops is specified along with one or more @@ -842,7 +857,8 @@ sub_main(int *exit_code, int argc, const /* Only a few commands can accept a revision range; the rest can take at most one revision number. */ - if (subcommand->cmd_func != svn_cl__null_log) + if (subcommand->cmd_func != svn_cl__null_blame + && subcommand->cmd_func != svn_cl__null_log) { if (opt_state.end_revision.kind != svn_opt_revision_unspecified) { Modified: subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original) +++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Mon Apr 20 08:10:40 2015 @@ -2378,7 +2378,7 @@ sub_main(int *exit_code, int argc, const case config_inline_opt: SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(config_options, opt_arg, - pool)); + "svnmover: ", pool)); break; case no_auth_cache_opt: no_auth_cache = TRUE; Modified: subversion/branches/move-tracking-2/subversion/svnmucc/svnmucc.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmucc/svnmucc.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnmucc/svnmucc.c (original) +++ subversion/branches/move-tracking-2/subversion/svnmucc/svnmucc.c Mon Apr 20 08:10:40 2015 @@ -625,6 +625,7 @@ sub_main(int *exit_code, int argc, const case config_inline_opt: SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(config_options, opt_arg, + "svnmucc: ", pool)); break; case no_auth_cache_opt: Modified: subversion/branches/move-tracking-2/subversion/svnrdump/svnrdump.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnrdump/svnrdump.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnrdump/svnrdump.c (original) +++ subversion/branches/move-tracking-2/subversion/svnrdump/svnrdump.c Mon Apr 20 08:10:40 2015 @@ -950,7 +950,9 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(config_options, - opt_arg, pool)); + opt_arg, + "svnrdump: ", + pool)); } } Modified: subversion/branches/move-tracking-2/subversion/svnsync/svnsync.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnsync/svnsync.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/svnsync/svnsync.c (original) +++ subversion/branches/move-tracking-2/subversion/svnsync/svnsync.c Mon Apr 20 08:10:40 2015 @@ -2073,7 +2073,8 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool)); SVN_ERR(svn_cmdline__parse_config_option(config_options, - opt_arg, pool)); + opt_arg, "svnsync: ", + pool)); break; case svnsync_opt_source_prop_encoding: @@ -2139,6 +2140,7 @@ sub_main(int *exit_code, int argc, const apr_psprintf(pool, "config:miscellany:memory-cache-size=%s", opt_arg), + NULL /* won't be used */, pool)); break; Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/checkout_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/checkout_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/checkout_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/checkout_tests.py Mon Apr 20 08:10:40 2015 @@ -1044,6 +1044,7 @@ def co_with_obstructing_local_adds(sbox) #---------------------------------------------------------------------- # Test if checking out from a Windows driveroot is supported. +@SkipUnless(svntest.main.is_os_windows) def checkout_wc_from_drive(sbox): "checkout from the root of a Windows drive" @@ -1070,10 +1071,6 @@ def checkout_wc_from_drive(sbox): return None - # Skip the test if not on Windows - if not svntest.main.windows: - raise svntest.Skip - # just create an empty folder, we'll checkout later. sbox.build(create_wc = False) svntest.main.safe_rmtree(sbox.wc_dir) @@ -1082,7 +1079,7 @@ def checkout_wc_from_drive(sbox): # create a virtual drive to the repository folder drive = find_the_next_available_drive_letter() if drive is None: - raise svntest.Skip + raise svntest.Skip('No drive letter available') subprocess.call(['subst', drive +':', sbox.repo_dir]) repo_url = 'file:///' + drive + ':/' Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/copy_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/copy_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/copy_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/copy_tests.py Mon Apr 20 08:10:40 2015 @@ -5822,6 +5822,17 @@ def copy_subtree_deleted(sbox): svntest.actions.run_and_verify_commit(wc2_dir, expected_output, None) +def resurrect_at_root(sbox): + "resurrect directory at root" + + sbox.build(create_wc=False) + + svntest.actions.run_and_verify_svn(None, [], 'rm', sbox.repo_url + '/A', + '-m', '') + + svntest.actions.run_and_verify_svn(None, [], 'cp', + sbox.repo_url + '/A/D/H@1', + sbox.repo_url + '/A', '-m', '') ######################################################################## # Run the tests @@ -5943,6 +5954,7 @@ test_list = [ None, copy_relocate, ext_wc_copy_deleted, copy_subtree_deleted, + resurrect_at_root, ] if __name__ == '__main__': Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/diff_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/diff_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/diff_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/diff_tests.py Mon Apr 20 08:10:40 2015 @@ -4867,6 +4867,151 @@ def diff_summarize_ignore_properties(sbo svntest.actions.run_and_verify_diff_summarize_xml( [], wc_dir, paths, items, props, kinds, wc_dir, '--ignore-properties') +def diff_incomplete(sbox): + "diff incomplete directory" + + sbox.build() + svntest.actions.run_and_verify_svn(None, [], 'rm', sbox.repo_url + '/A', + '-m', '') + + # This works ok + _, out1a, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', + sbox.wc_dir, + '--notice-ancestry') + + _, out1b, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + sbox.wc_dir, + '--notice-ancestry') + + + svntest.main.run_wc_incomplete_tester(sbox.ospath('A'), 1) + + # And this used to miss certain changes + _, out2a, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', + sbox.wc_dir, + '--notice-ancestry') + + _, out2b, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + sbox.wc_dir, + '--notice-ancestry') + + # Ordering may be different, but length should match + if len(out1a) != len(out2a): + raise svntest.Failure('Different output when incomplete against repos') + + svntest.verify.compare_and_display_lines('local diff', 'local diff', out1b, + out2b) + + # And add a replacement on top of the incomplete, server side + svntest.actions.run_and_verify_svn(None, [], 'cp', + sbox.repo_url + '/A/D/H@1', + sbox.repo_url + '/A', '-m', '') + + svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', + sbox.wc_dir, + '--notice-ancestry') + + # And client side + svntest.actions.run_and_verify_svn(None, [], 'rm', sbox.ospath('A'), + '--force') + sbox.simple_mkdir('A') + svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', + sbox.wc_dir, + '--notice-ancestry') + + svntest.actions.run_and_verify_svn(None, [], 'diff', + sbox.wc_dir, + '--notice-ancestry') + +def diff_incomplete_props(sbox): + "incomplete set of properties" + + sbox.build() + wc_dir = sbox.wc_dir + + sbox.simple_propset('r2-1', 'r2', 'iota', 'A') + sbox.simple_propset('r2-2', 'r2', 'iota', 'A') + sbox.simple_propset('r', 'r2', 'iota', 'A') + sbox.simple_commit() # r2 + + svntest.actions.run_and_verify_svnmucc(None, [], + '-U', sbox.repo_url, + 'propset', 'r3-1', 'r3', 'iota', + 'propset', 'r3-1', 'r3', 'A', + 'propset', 'r3-2', 'r3', 'iota', + 'propset', 'r3-2', 'r3', 'A', + 'propset', 'r', 'r3', 'iota', + 'propset', 'r', 'r3', 'A', + 'propdel', 'r2-1', 'iota', + 'propdel', 'r2-1', 'A', + 'propdel', 'r2-2', 'iota', + 'propdel', 'r2-2', 'A', + '-m', 'r3') + + _, out1, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', wc_dir, + '--notice-ancestry') + + # Now simulate a broken update to r3 + svntest.actions.set_incomplete(wc_dir, 3) + svntest.actions.set_incomplete(sbox.ospath('A'), 3) + + # The properties are still at r2 + expected_disk = svntest.main.greek_state.copy() + expected_disk.tweak('iota', 'A', props={'r2-1':'r2', 'r2-2':'r2', 'r':'r2'}) + svntest.actions.verify_disk(wc_dir, expected_disk, True) + + # But the working copy is incomplete at r3 + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('iota', wc_rev=2) + expected_status.tweak('', 'A', wc_rev=3, status='! ') + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + expected_output = svntest.wc.State(wc_dir, { + 'A' : Item(status=' U'), + 'iota' : Item(status=' U'), + }) + expected_status = svntest.actions.get_virginal_state(wc_dir, 3) + expected_disk = svntest.main.greek_state.copy() + + # Expect that iota and A have the expected sets of properties + # The r2 set is properly deleted where necessary + expected_disk.tweak('iota', 'A', props={'r3-2':'r3', 'r':'r3', 'r3-1':'r3'}) + + _, out2, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'HEAD', wc_dir, + '--notice-ancestry') + + svntest.actions.run_and_verify_update(wc_dir, + expected_output, expected_disk, + expected_status, [], True) + + # Ok, we tested that the update worked properly, but we also do this + # in the update tests... Let's see, what the diffs said + + _, out3, _ = svntest.actions.run_and_verify_svn(None, [], 'diff', + '-r', 'BASE:2', wc_dir, + '--notice-ancestry') + + # Filter out all headers (which include revisions, etc.) + out1 = [i for i in out1 if i[0].isupper()] + out1.sort() + + out2 = [i for i in out2 if i[0].isupper()] + out2.sort() + + out3 = [i for i in out3 if i[0].isupper()] + out3.sort() + + svntest.verify.compare_and_display_lines('base vs incomplete', 'local diff', + out1, out2) + + svntest.verify.compare_and_display_lines('base vs after', 'local diff', + out1, out3) ######################################################################## #Run the tests @@ -4959,6 +5104,8 @@ test_list = [ None, diff_replaced_moved, diff_local_copied_dir, diff_summarize_ignore_properties, + diff_incomplete, + diff_incomplete_props, ] if __name__ == '__main__': Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/getopt_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/getopt_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/getopt_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/getopt_tests.py Mon Apr 20 08:10:40 2015 @@ -223,6 +223,18 @@ def getopt_help_bogus_cmd(sbox): "run svn help bogus-cmd" run_one_test(sbox, 'svn_help_bogus-cmd', 'help', 'bogus-cmd') +def getopt_config_option(sbox): + "--config-option's spell checking" + sbox.build(create_wc=False, read_only=True) + expected_stderr = '.*W205000.*did you mean.*' + expected_stdout = svntest.verify.AnyOutput + svntest.actions.run_and_verify_svn2(expected_stdout, expected_stderr, 0, + 'info', + '--config-option', + 'config:miscellanous:diff-extensions=' + + '-u -p', + sbox.repo_url) + ######################################################################## # Run the tests @@ -237,6 +249,7 @@ test_list = [ None, getopt_help, getopt_help_bogus_cmd, getopt_help_log_switch, + getopt_config_option, ] if __name__ == '__main__': Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py Mon Apr 20 08:10:40 2015 @@ -792,7 +792,7 @@ def verify_incremental_fsfs(sbox): # the listing itself is valid. r2 = fsfs_file(sbox.repo_dir, 'revs', '2') if r2.endswith('pack'): - raise svntest.Skip + raise svntest.Skip('Test doesn\'t handle packed revisions') fp = open(r2, 'wb') fp.write("""id: 0-2.0.r2/0 @@ -2646,7 +2646,7 @@ def fsfs_hotcopy_progress(sbox): # and incremental scenarios. The progress output can be affected by # the --fsfs-packing option, so skip the test if that is the case. if svntest.main.options.fsfs_packing: - raise svntest.Skip + raise svntest.Skip('fsfs packing set') # Create an empty repository, configure three files per shard. sbox.build(create_wc=False, empty=True) @@ -2760,7 +2760,7 @@ def fsfs_hotcopy_progress_with_revprop_c # The progress output can be affected by the --fsfs-packing # option, so skip the test if that is the case. if svntest.main.options.fsfs_packing: - raise svntest.Skip + raise svntest.Skip('fsfs packing set') # Create an empty repository, commit several revisions and hotcopy it. sbox.build(create_wc=False, empty=True) Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/svnsync_authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/svnsync_authz_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/svnsync_authz_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/svnsync_authz_tests.py Mon Apr 20 08:10:40 2015 @@ -383,7 +383,7 @@ def identity_copy(sbox): except: pass if locale.setlocale(locale.LC_ALL) != other_locale: - raise svntest.Skip + raise svntest.Skip('Setting test locale failed') try: run_test(sbox, "copy-bad-encoding.expected.dump", Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/wc.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/wc.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/wc.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/wc.py Mon Apr 20 08:10:40 2015 @@ -980,6 +980,20 @@ def svn_uri_quote(url): # ------------ +def python_sqlite_can_read_wc(): + """Check if the Python builtin is capable enough to peek into wc.db""" + + try: + db = svntest.sqlite3.connect('') + + c = db.cursor() + c.execute('select sqlite_version()') + ver = tuple(map(int, c.fetchall()[0][0].split('.'))) + + return ver >= (3, 6, 18) # Currently enough (1.7-1.9) + except: + return False + def open_wc_db(local_path): """Open the SQLite DB for the WC path LOCAL_PATH. Return (DB object, WC root path, WC relpath of LOCAL_PATH).""" Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/switch_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/switch_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/switch_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/switch_tests.py Mon Apr 20 08:10:40 2015 @@ -771,7 +771,7 @@ def refresh_read_only_attribute(sbox): # behavior, just skip the test. if os.name == 'posix': if os.geteuid() == 0: - raise svntest.Skip + raise svntest.Skip('Test doesn\'t work as uid 0') sbox.build() wc_dir = sbox.wc_dir Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/update_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/update_tests.py Mon Apr 20 08:10:40 2015 @@ -2227,6 +2227,7 @@ def forced_update_failures(sbox): # Test for issue #2556. The tests maps a virtual drive to a working copy # and tries some basic update, commit and status actions on the virtual # drive. +@SkipUnless(svntest.main.is_os_windows) def update_wc_on_windows_drive(sbox): "update wc on the root of a Windows (virtual) drive" @@ -2253,10 +2254,6 @@ def update_wc_on_windows_drive(sbox): return None - # Skip the test if not on Windows - if not svntest.main.windows: - raise svntest.Skip - # just create an empty folder, we'll checkout later. sbox.build(create_wc = False) svntest.main.safe_rmtree(sbox.wc_dir) @@ -2265,7 +2262,7 @@ def update_wc_on_windows_drive(sbox): # create a virtual drive to the working copy folder drive = find_the_next_available_drive_letter() if drive is None: - raise svntest.Skip + raise svntest.Skip('No drive letter available') subprocess.call(['subst', drive +':', sbox.wc_dir]) wc_dir = drive + ':/' @@ -5137,7 +5134,7 @@ def skip_access_denied(sbox): try: import msvcrt except ImportError: - raise svntest.Skip + raise svntest.Skip('python msvcrt library not available') sbox.build() wc_dir = sbox.wc_dir Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/upgrade_tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/move-tracking-2/subversion/tests/cmdline/upgrade_tests.py Mon Apr 20 08:10:40 2015 @@ -1438,6 +1438,7 @@ def upgrade_1_7_dir_external(sbox): # svn: warning: W200033: sqlite[S5]: database is locked svntest.actions.run_and_verify_svn(None, [], 'upgrade', sbox.wc_dir) +@SkipUnless(svntest.wc.python_sqlite_can_read_wc) def auto_analyze(sbox): """automatic SQLite ANALYZE""" Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_client/client-test.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_client/client-test.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/libsvn_client/client-test.c (original) +++ subversion/branches/move-tracking-2/subversion/tests/libsvn_client/client-test.c Mon Apr 20 08:10:40 2015 @@ -1287,6 +1287,123 @@ test_copy_pin_externals(const svn_test_o return SVN_NO_ERROR; } +/* issue #4560 */ +static svn_error_t * +test_copy_pin_externals_select_subtree(const svn_test_opts_t *opts, apr_pool_t *pool) +{ + svn_opt_revision_t rev; + svn_opt_revision_t peg_rev; + const char *repos_url; + const char *A_copy_url; + const char *B_url; + const char *wc_path; + svn_client_ctx_t *ctx; + apr_hash_t *externals_to_pin; + apr_array_header_t *external_items; + apr_array_header_t *copy_sources; + svn_wc_external_item2_t item; + svn_client_copy_source_t copy_source; + apr_hash_t *props; + int i; + struct test_data { + const char *subtree_relpath; + const char *src_external_desc; + const char *expected_dst_external_desc; + } test_data[] = { + /* External on A/B will be pinned. */ + { "B", "^/A/D/gamma gamma-ext", "^/A/D/gamma@3 gamma-ext" }, + + /* External on A/D won't be pinned. */ + { "D", "^/A/B/F F-ext", "^/A/B/F F-ext" } , + + { NULL }, + }; + + /* Create a filesytem and repository containing the Greek tree. */ + SVN_ERR(create_greek_repos(&repos_url, "pin-externals-select-subtree", + opts, pool)); + + wc_path = svn_test_data_path("pin-externals-select-subtree-wc", pool); + + /* Remove old test data from the previous run */ + SVN_ERR(svn_io_remove_dir2(wc_path, TRUE, NULL, NULL, pool)); + + SVN_ERR(svn_io_make_dir_recursively(wc_path, pool)); + svn_test_add_dir_cleanup(wc_path); + + rev.kind = svn_opt_revision_head; + peg_rev.kind = svn_opt_revision_unspecified; + SVN_ERR(svn_client_create_context(&ctx, pool)); + + /* Configure externals. */ + i = 0; + while (test_data[i].subtree_relpath) + { + const char *subtree_relpath; + const char *url; + const svn_string_t *propval; + + subtree_relpath = test_data[i].subtree_relpath; + propval = svn_string_create(test_data[i].src_external_desc, pool); + + url = apr_pstrcat(pool, repos_url, "/A/", subtree_relpath, SVN_VA_NULL); + SVN_ERR(svn_client_propset_remote(SVN_PROP_EXTERNALS, propval, + url, TRUE, 1, NULL, + NULL, NULL, ctx, pool)); + i++; + } + + /* Set up parameters for pinning externals on A/B. */ + externals_to_pin = apr_hash_make(pool); + + item.url = "^/A/D/gamma"; + item.target_dir = "gamma-ext"; + + external_items = apr_array_make(pool, 2, sizeof(svn_wc_external_item2_t *)); + APR_ARRAY_PUSH(external_items, svn_wc_external_item2_t *) = &item; + B_url = apr_pstrcat(pool, repos_url, "/A/B", SVN_VA_NULL); + svn_hash_sets(externals_to_pin, B_url, external_items); + + /* Copy ^/A to ^/A_copy, pinning externals on ^/A/B. */ + copy_source.path = apr_pstrcat(pool, repos_url, "/A", SVN_VA_NULL); + copy_source.revision = &rev; + copy_source.peg_revision = &peg_rev; + copy_sources = apr_array_make(pool, 1, sizeof(svn_client_copy_source_t *)); + APR_ARRAY_PUSH(copy_sources, svn_client_copy_source_t *) = ©_source; + A_copy_url = apr_pstrcat(pool, repos_url, "/A_copy", SVN_VA_NULL); + SVN_ERR(svn_client_copy7(copy_sources, A_copy_url, FALSE, FALSE, + FALSE, FALSE, TRUE, externals_to_pin, + NULL, NULL, NULL, ctx, pool)); + + /* Verify that externals were pinned as expected. */ + i = 0; + while (test_data[i].subtree_relpath) + { + const char *subtree_relpath; + const char *url; + const svn_string_t *propval; + svn_stringbuf_t *externals_desc; + const char *expected_desc; + + subtree_relpath = test_data[i].subtree_relpath; + url = apr_pstrcat(pool, A_copy_url, "/", subtree_relpath, SVN_VA_NULL); + + SVN_ERR(svn_client_propget5(&props, NULL, SVN_PROP_EXTERNALS, + url, &peg_rev, &rev, NULL, + svn_depth_empty, NULL, ctx, pool, pool)); + propval = svn_hash_gets(props, url); + SVN_TEST_ASSERT(propval); + externals_desc = svn_stringbuf_create(propval->data, pool); + svn_stringbuf_strip_whitespace(externals_desc); + expected_desc = test_data[i].expected_dst_external_desc; + SVN_TEST_STRING_ASSERT(externals_desc->data, expected_desc); + + i++; + } + + return SVN_NO_ERROR; +} + /* ========================================================================== */ @@ -1313,6 +1430,8 @@ static struct svn_test_descriptor_t test "test svn_client_status6 with ignore_local_mods"), SVN_TEST_OPTS_PASS(test_copy_pin_externals, "test svn_client_copy7 with externals_to_pin"), + SVN_TEST_OPTS_PASS(test_copy_pin_externals_select_subtree, + "pin externals on selected subtrees only"), SVN_TEST_NULL }; Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_wc/op-depth-test.c?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/move-tracking-2/subversion/tests/libsvn_wc/op-depth-test.c Mon Apr 20 08:10:40 2015 @@ -3622,6 +3622,17 @@ revert_file_externals(const svn_test_opt SVN_ERR(check_db_rows(&b, "", rows)); } + SVN_ERR(sbox_wc_update(&b, "", 1)); + { + nodes_row_t rows[] = { + { 0, "", "normal", 1, "" }, + { 0, "f", "normal", 1, "f" }, + { 0, "g", "normal", 1, "f", TRUE }, + { 0 } + }; + SVN_ERR(check_db_rows(&b, "", rows)); + } + return SVN_NO_ERROR; } @@ -12086,7 +12097,7 @@ static struct svn_test_descriptor_t test SVN_TEST_OPTS_PASS(test_global_commit, "test global commit"), SVN_TEST_OPTS_PASS(test_global_commit_switched, - "test global commit"), + "test global commit switched"), SVN_TEST_NULL }; Propchange: subversion/branches/move-tracking-2/tools/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Apr 20 08:10:40 2015 @@ -82,4 +82,4 @@ /subversion/branches/verify-at-commit/tools:1462039-1462408 /subversion/branches/verify-keep-going/tools:1439280-1546110 /subversion/branches/wc-collate-path/tools:1402685-1480384 -/subversion/trunk/tools:1606692-1671790 +/subversion/trunk/tools:1606692-1674752 Modified: subversion/branches/move-tracking-2/tools/client-side/bash_completion URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/bash_completion?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/tools/client-side/bash_completion (original) +++ subversion/branches/move-tracking-2/tools/client-side/bash_completion Mon Apr 20 08:10:40 2015 @@ -938,7 +938,7 @@ _svn() status|stat|st) cmdOpts="-u --show-updates -v --verbose $nOpts $qOpts $pOpts \ --no-ignore --ignore-externals --incremental --xml \ - $cOpts" + $rOpts $cOpts" ;; switch|sw) cmdOpts="--relocate $rOpts $nOpts $qOpts $pOpts --diff3-cmd \ Modified: subversion/branches/move-tracking-2/tools/dist/backport.pl URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/dist/backport.pl?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/tools/dist/backport.pl (original) +++ subversion/branches/move-tracking-2/tools/dist/backport.pl Mon Apr 20 08:10:40 2015 @@ -765,7 +765,7 @@ sub vote { "Approve $_->{entry}->{header}." } @votesarray; (@sentences == 1) - ? $sentences[0] + ? "* STATUS: $sentences[0]" : "* STATUS:\n" . join "", map " $_\n", @sentences; }; @@ -1287,7 +1287,7 @@ sub nominate_main { # Done! system "$SVN diff -- $STATUS"; if (prompt "Commit this nomination? ") { - system "$SVN commit -m 'Nominate r$revnums[0].' -- $STATUS"; + system "$SVN commit -m '* STATUS: Nominate r$revnums[0].' -- $STATUS"; exit $?; } elsif (!$had_local_mods or prompt "Revert STATUS (destroying local mods)? ") { Modified: subversion/branches/move-tracking-2/tools/dist/release.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/dist/release.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/tools/dist/release.py (original) +++ subversion/branches/move-tracking-2/tools/dist/release.py Mon Apr 20 08:10:40 2015 @@ -87,12 +87,12 @@ tool_versions = { 'trunk' : { 'autoconf' : '2.69', 'libtool' : '2.4.3', - 'swig' : '3.0.0', + 'swig' : '2.0.12', }, '1.9' : { 'autoconf' : '2.69', 'libtool' : '2.4.3', - 'swig' : '3.0.0' + 'swig' : '2.0.12' }, '1.8' : { 'autoconf' : '2.69', Modified: subversion/branches/move-tracking-2/win-tests.py URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/win-tests.py?rev=1674754&r1=1674753&r2=1674754&view=diff ============================================================================== --- subversion/branches/move-tracking-2/win-tests.py (original) +++ subversion/branches/move-tracking-2/win-tests.py Mon Apr 20 08:10:40 2015 @@ -569,6 +569,8 @@ class Httpd: 'jrandom', 'rayjandom']) os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users, 'jconstant', 'rayjandom']) + os.spawnv(os.P_WAIT, htpasswd, ['htpasswd.exe', '-bp', self.httpd_users, + '__dumpster__', '__loadster__']) def _create_mime_types_file(self): "Create empty mime.types file" @@ -635,6 +637,10 @@ class Httpd: else: self._start_daemon() + # Avoid output from starting and preparing between test results + sys.stderr.flush() + sys.stdout.flush() + def stop(self): if self.service: self._stop_service() Propchange: subversion/branches/move-tracking-2/win-tests.py ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Apr 20 08:10:40 2015 @@ -86,4 +86,4 @@ /subversion/branches/verify-at-commit/win-tests.py:1462039-1462408 /subversion/branches/verify-keep-going/win-tests.py:1439280-1546110 /subversion/branches/wc-collate-path/win-tests.py:1402685-1480384 -/subversion/trunk/win-tests.py:1606692-1671790 +/subversion/trunk/win-tests.py:1606692-1674752
