Index: subversion/include/svn_client.h =================================================================== --- subversion/include/svn_client.h (revision 898186) +++ subversion/include/svn_client.h (working copy) @@ -4905,8 +4905,26 @@ * repository uuid, and free the session. Return the uuid in @a uuid, * allocated in @a pool. @a ctx is required for possible repository * authentication. + * + * @a high_level_svn_operation identifies the svn command that opens this + * session. + * + * @since New in 1.7. */ svn_error_t * +svn_client_uuid_from_url2(const char **uuid, + const char *url, + const char *high_level_svn_operation, + svn_client_ctx_t *ctx, + apr_pool_t *pool); + +/** Same as svn_client_uuid_from_url2, but with @a high_level_svn_operation + * always NULL, + * + * @deprecated Provided for backward compatibility. + */ +SVN_DEPRECATED +svn_error_t * svn_client_uuid_from_url(const char **uuid, const char *url, svn_client_ctx_t *ctx, @@ -4948,13 +4966,28 @@ * * Use the authentication baton stored in @a ctx for authentication. * @a *session is allocated in @a pool. + * @a high_level_svn_operation identifies the svn command that opens this + * session. + * @since New in 1.7. * - * @since New in 1.3. - * - * @note This function is similar to svn_ra_open3(), but the caller avoids + * @note This function is similar to svn_ra_open4(), but the caller avoids * having to providing its own callback functions. */ svn_error_t * +svn_client_open_ra_session2(svn_ra_session_t **session, + const char *url, + const char *high_level_svn_operation, + svn_client_ctx_t *ctx, + apr_pool_t *pool); + +/** Same as svn_client_open_ra_session2(), but with @a high_level_svn_operation + * always NULL, + * + * @since New in 1.3. + * @deprecated Provided for backward compatibility with the 1.4 API. + */ +SVN_DEPRECATED +svn_error_t * svn_client_open_ra_session(svn_ra_session_t **session, const char *url, svn_client_ctx_t *ctx, Index: subversion/include/svn_ra.h =================================================================== --- subversion/include/svn_ra.h (revision 898186) +++ subversion/include/svn_ra.h (working copy) @@ -65,7 +65,7 @@ * @a close_baton as appropriate. * * @a path is relative to the "root" of the session, defined by the - * @a repos_URL passed to svn_ra_open3() vtable call. + * @a repos_URL passed to svn_ra_open4() vtable call. * * @a name is the name of the property to fetch. If the property is present, * then it is returned in @a value. Otherwise, @a *value is set to @c NULL. @@ -294,7 +294,7 @@ * implementor should assume the directory has no entries or props. * * This will *override* any previous set_path() calls made on parent - * paths. @a path is relative to the URL specified in svn_ra_open3(). + * paths. @a path is relative to the URL specified in svn_ra_open4(). * * If @a lock_token is non-NULL, it is the lock token for @a path in the WC. * @@ -445,7 +445,7 @@ /** A collection of callbacks implemented by libsvn_client which allows * an RA layer to "pull" information from the client application, or * possibly store information. libsvn_client passes this vtable to - * svn_ra_open3(). + * svn_ra_open4(). * * Each routine takes a @a callback_baton originally provided with the * vtable. @@ -593,13 +593,35 @@ * @c svn_config_t * values. For example, the @c svn_config_t for the * "~/.subversion/config" file is under the key "config". * + * @a high_level_svn_operation is a string representing the svn command + * for which this session is opened. + * * All RA requests require a session; they will continue to * use @a pool for memory allocation. * * @see svn_client_open_ra_session(). * + * @since New in 1.7. + */ +svn_error_t * +svn_ra_open4(svn_ra_session_t **session_p, + const char *repos_URL, + const char *uuid, + const svn_ra_callbacks2_t *callbacks, + void *callback_baton, + apr_hash_t *config, + const char *high_level_svn_operation, + apr_pool_t *pool); + +/** + * Similiar to svn_ra_open4(), but with @a high_level_svn_operation + * set to @c NULL. + * * @since New in 1.5. + * @deprecated Provided for backward compatibility with the 1.6 API. + * */ +SVN_DEPRECATED svn_error_t * svn_ra_open3(svn_ra_session_t **session_p, const char *repos_URL, @@ -638,6 +660,17 @@ apr_hash_t *config, apr_pool_t *pool); +/** Change the current 'high_level_svn_operation' of an open @a ra_session + * to point to a new @high_level_svn_operation. + * Use @a pool for temporary allocations. + * + * @since New in 1.7. + */ +svn_error_t * +svn_ra_change_operation_name(svn_ra_session_t *ra_session, + const char *high_level_svn_operation, + apr_pool_t *pool); + /** Change the root URL of an open @a ra_session to point to a new path in the * same repository. @a url is the new root URL. Use @a pool for * temporary allocations. Index: subversion/libsvn_ra/ra_loader.h =================================================================== --- subversion/libsvn_ra/ra_loader.h (revision 898186) +++ subversion/libsvn_ra/ra_loader.h (working copy) @@ -58,6 +58,7 @@ const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool); /* URL is guaranteed to have what get_repos_root() returns as a prefix. */ svn_error_t *(*reparent)(svn_ra_session_t *session, @@ -262,6 +263,9 @@ svn_revnum_t revision, const char *path, apr_pool_t *pool); + svn_error_t *(*change_operation_name)(svn_ra_session_t *session, + const char *high_level_svn_operation, + apr_pool_t *pool); } svn_ra__vtable_t; Index: subversion/libsvn_ra/ra_loader.c =================================================================== --- subversion/libsvn_ra/ra_loader.c (revision 898186) +++ subversion/libsvn_ra/ra_loader.c (working copy) @@ -52,7 +52,7 @@ /* ### This file maps URL schemes to particular RA libraries. ### Currently, the only pair of RA libraries which support the same - ### protocols are neon and serf. svn_ra_open3 makes the assumption + ### protocols are neon and serf. svn_ra_open4 makes the assumption ### that this is the case; that their 'schemes' fields are both ### dav_schemes; and that "neon" is listed first. @@ -268,12 +268,13 @@ return SVN_NO_ERROR; } -svn_error_t *svn_ra_open3(svn_ra_session_t **session_p, +svn_error_t *svn_ra_open4(svn_ra_session_t **session_p, const char *repos_URL, const char *uuid, const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool) { svn_ra_session_t *session; @@ -483,7 +484,7 @@ /* Ask the library to open the session. */ SVN_ERR(vtable->open_session(session, repos_URL, callbacks, callback_baton, - config, pool)); + config, high_level_svn_operation, pool)); /* Check the UUID. */ if (uuid) @@ -505,6 +506,15 @@ return SVN_NO_ERROR; } +svn_error_t *svn_ra_change_operation_name(svn_ra_session_t *session, + const char *high_level_svn_operation, + apr_pool_t *pool) +{ + return session->vtable->change_operation_name(session, + high_level_svn_operation, + pool); +} + svn_error_t *svn_ra_reparent(svn_ra_session_t *session, const char *url, apr_pool_t *pool) Index: subversion/libsvn_ra/deprecated.c =================================================================== --- subversion/libsvn_ra/deprecated.c (revision 898186) +++ subversion/libsvn_ra/deprecated.c (working copy) @@ -148,6 +148,18 @@ abort_report }; +svn_error_t *svn_ra_open3(svn_ra_session_t **session_p, + const char *repos_URL, + const char *uuid, + const svn_ra_callbacks2_t *callbacks, + void *callback_baton, + apr_hash_t *config, + apr_pool_t *pool) +{ + return svn_ra_open4(session_p, repos_URL, uuid, callbacks, callback_baton, + config, NULL, pool); +} + svn_error_t *svn_ra_open2(svn_ra_session_t **session_p, const char *repos_URL, const svn_ra_callbacks2_t *callbacks, Index: subversion/libsvn_ra/wrapper_template.h =================================================================== --- subversion/libsvn_ra/wrapper_template.h (revision 898186) +++ subversion/libsvn_ra/wrapper_template.h (working copy) @@ -88,7 +88,7 @@ callbacks2->progress_baton = NULL; SVN_ERR(VTBL.open_session(sess, repos_URL, callbacks2, callback_baton, - config, pool)); + config, NULL, pool)); *session_baton = sess; return SVN_NO_ERROR; } Index: subversion/libsvn_ra_local/ra_plugin.c =================================================================== --- subversion/libsvn_ra_local/ra_plugin.c (revision 898186) +++ subversion/libsvn_ra_local/ra_plugin.c (working copy) @@ -439,6 +439,7 @@ const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool) { svn_ra_local__session_baton_t *sess; @@ -504,6 +505,15 @@ } static svn_error_t * +ra_local_change_operation_name(svn_ra_session_t *session, + const char *high_level_svn_operation, + apr_pool_t *pool) +{ + /*ra_local do not need to know about high_level_operation */ + return SVN_NO_ERROR; +} + +static svn_error_t * svn_ra_local__get_session_url(svn_ra_session_t *session, const char **url, apr_pool_t *pool) @@ -1488,7 +1498,8 @@ svn_ra_local__has_capability, svn_ra_local__replay_range, svn_ra_local__get_deleted_rev, - svn_ra_local__obliterate_path_rev + svn_ra_local__obliterate_path_rev, + ra_local_change_operation_name }; Index: subversion/tests/libsvn_ra_local/ra-local-test.c =================================================================== --- subversion/tests/libsvn_ra_local/ra-local-test.c (revision 898186) +++ subversion/tests/libsvn_ra_local/ra-local-test.c (working copy) @@ -96,12 +96,13 @@ SVN_ERR(current_directory_url(&url, repos_name, pool)); - SVN_ERR(svn_ra_open3(session, + SVN_ERR(svn_ra_open4(session, url, NULL, cbtable, NULL, NULL, + NULL, pool)); return SVN_NO_ERROR; Index: subversion/libsvn_ra_svn/ra_svn.h =================================================================== --- subversion/libsvn_ra_svn/ra_svn.h (revision 898186) +++ subversion/libsvn_ra_svn/ra_svn.h (working copy) @@ -97,6 +97,7 @@ const char *user; const char *hostname; /* The remote hostname. */ const char *realm_prefix; + const char *high_level_svn_operation; const char **tunnel_argv; const svn_ra_callbacks2_t *callbacks; void *callbacks_baton; Index: subversion/libsvn_ra_svn/client.c =================================================================== --- subversion/libsvn_ra_svn/client.c (revision 898186) +++ subversion/libsvn_ra_svn/client.c (working copy) @@ -680,6 +680,7 @@ const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool) { apr_pool_t *sess_pool = svn_pool_create(pool); @@ -718,6 +719,20 @@ return SVN_NO_ERROR; } +static svn_error_t * +ra_svn_change_operation_name(svn_ra_session_t *ra_session, + const char *high_level_svn_operation, + apr_pool_t *pool) +{ + svn_ra_svn__session_baton_t *sess = ra_session->priv; + if (!(sess->high_level_svn_operation != NULL && + high_level_svn_operation != NULL && + strcmp(sess->high_level_svn_operation, high_level_svn_operation) == 0)) + sess->high_level_svn_operation = apr_pstrdup(sess->pool, + high_level_svn_operation); + return SVN_NO_ERROR; +} + static svn_error_t *ra_svn_reparent(svn_ra_session_t *ra_session, const char *url, apr_pool_t *pool) @@ -2415,7 +2430,8 @@ ra_svn_has_capability, ra_svn_replay_range, ra_svn_get_deleted_rev, - NULL /* ra_svn_obliterate_node_rev */ + NULL /* ra_svn_obliterate_node_rev */, + ra_svn_change_operation_name }; svn_error_t * Index: subversion/libsvn_ra_neon/session.c =================================================================== --- subversion/libsvn_ra_neon/session.c (revision 898186) +++ subversion/libsvn_ra_neon/session.c (working copy) @@ -751,6 +751,7 @@ const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool) { apr_size_t len; @@ -934,6 +935,8 @@ ras->capabilities = apr_hash_make(ras->pool); ras->vcc = NULL; ras->uuid = NULL; + ras->high_level_svn_operation = apr_pstrdup(ras->pool, + high_level_svn_operation); /* save config and server group in the auth parameter hash */ svn_auth_set_parameter(ras->callbacks->auth_baton, SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG, cfg_client); @@ -1141,6 +1144,21 @@ SVN_VERSION_BODY; } + +static svn_error_t* +ra_neon_change_operation_name(svn_ra_session_t *session, + const char *high_level_svn_operation, + apr_pool_t *pool) +{ + svn_ra_neon__session_t *ras = session->priv; + if (!(ras->high_level_svn_operation != NULL && + high_level_svn_operation != NULL && + strcmp(ras->high_level_svn_operation, high_level_svn_operation) == 0)) + ras->high_level_svn_operation = apr_pstrdup(ras->pool, + high_level_svn_operation); + return SVN_NO_ERROR; +} + static const svn_ra__vtable_t neon_vtable = { ra_neon_version, ra_neon_get_description, @@ -1177,7 +1195,8 @@ svn_ra_neon__has_capability, svn_ra_neon__replay_range, svn_ra_neon__get_deleted_rev, - NULL /* svn_ra_neon__obliterate_node_rev */ + NULL /* svn_ra_neon__obliterate_node_rev */, + ra_neon_change_operation_name }; svn_error_t * Index: subversion/libsvn_ra_neon/util.c =================================================================== --- subversion/libsvn_ra_neon/util.c (revision 898186) +++ subversion/libsvn_ra_neon/util.c (working copy) @@ -380,6 +380,9 @@ /* Neon resources may be NULL on out-of-memory */ assert(req->ne_req != NULL); + if (sess->high_level_svn_operation) + ne_add_request_header(req->ne_req, "SVN-OPERATION", + sess->high_level_svn_operation); apr_pool_cleanup_register(sess->pool, req, dav_request_sess_cleanup, apr_pool_cleanup_null); Index: subversion/libsvn_ra_neon/ra_neon.h =================================================================== --- subversion/libsvn_ra_neon/ra_neon.h (revision 898186) +++ subversion/libsvn_ra_neon/ra_neon.h (working copy) @@ -122,6 +122,7 @@ constants' addresses, therefore). */ apr_hash_t *capabilities; + const char *high_level_svn_operation; /*** HTTP v2 protocol stuff. *** * * We assume that if mod_dav_svn sends one of the special v2 OPTIONs Index: subversion/libsvn_ra_serf/serf.c =================================================================== --- subversion/libsvn_ra_serf/serf.c (revision 898186) +++ subversion/libsvn_ra_serf/serf.c (working copy) @@ -335,6 +335,7 @@ const svn_ra_callbacks2_t *callbacks, void *callback_baton, apr_hash_t *config, + const char *high_level_svn_operation, apr_pool_t *pool) { apr_status_t status; @@ -391,6 +392,8 @@ serf_bucket_allocator_create(serf_sess->pool, NULL, NULL); serf_sess->conns[0]->session = serf_sess; serf_sess->conns[0]->last_status_code = -1; + serf_sess->high_level_svn_operation = apr_pstrdup(serf_sess->pool, + high_level_svn_operation); /* Unless we're using a proxy, fetch the DNS record for this host */ if (! serf_sess->using_proxy) @@ -485,6 +488,21 @@ } static svn_error_t * +ra_serf_change_operation_name(svn_ra_session_t *ra_session, + const char *high_level_svn_operation, + apr_pool_t *pool) +{ + svn_ra_serf__session_t *session = ra_session->priv; + if (!(session->high_level_svn_operation != NULL && + high_level_svn_operation != NULL && + strcmp(session->high_level_svn_operation, + high_level_svn_operation) == 0)) + session->high_level_svn_operation = apr_pstrdup(session->pool, + high_level_svn_operation); + return SVN_NO_ERROR; +} + +static svn_error_t * svn_ra_serf__get_session_url(svn_ra_session_t *ra_session, const char **url, apr_pool_t *pool) @@ -1023,7 +1041,8 @@ svn_ra_serf__has_capability, svn_ra_serf__replay_range, svn_ra_serf__get_deleted_rev, - NULL /* svn_ra_serf__obliterate_node_rev */ + NULL /* svn_ra_serf__obliterate_node_rev */, + ra_serf_change_operation_name }; svn_error_t * Index: subversion/libsvn_ra_serf/util.c =================================================================== --- subversion/libsvn_ra_serf/util.c (revision 898186) +++ subversion/libsvn_ra_serf/util.c (working copy) @@ -1558,6 +1558,11 @@ { ctx->header_delegate(headers_bkt, ctx->header_delegate_baton, pool); } + if (ctx->session->high_level_svn_operation) + { + serf_bucket_headers_setn(headers_bkt, "SVN-OPERATION", + ctx->session->high_level_svn_operation); + } } *handler = handle_response; Index: subversion/libsvn_ra_serf/ra_serf.h =================================================================== --- subversion/libsvn_ra_serf/ra_serf.h (revision 898186) +++ subversion/libsvn_ra_serf/ra_serf.h (working copy) @@ -225,6 +225,8 @@ /* Connection timeout value */ long timeout; + const char *high_level_svn_operation; + /*** HTTP v2 protocol stuff. *** * * We assume that if mod_dav_svn sends one of the special v2 OPTIONs Index: subversion/svnsync/main.c =================================================================== --- subversion/svnsync/main.c (revision 898186) +++ subversion/svnsync/main.c (working copy) @@ -692,9 +692,9 @@ /* Now fill in our bookkeeping info in the dest repository. */ - SVN_ERR(svn_ra_open3(&from_session, baton->from_url, NULL, + SVN_ERR(svn_ra_open4(&from_session, baton->from_url, NULL, &(baton->source_callbacks), baton, - baton->config, pool)); + baton->config, "svnsync", pool)); SVN_ERR(svn_ra_get_repos_root2(from_session, &root_url, pool)); /* If we're doing a partial replay, we have to check first if the server @@ -795,8 +795,9 @@ _("Path '%s' is not a URL"), from_url); baton = make_subcommand_baton(opt_baton, to_url, from_url, 0, 0, pool); - SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL, - &(baton->sync_callbacks), baton, baton->config, pool)); + SVN_ERR(svn_ra_open4(&to_session, baton->to_url, NULL, + &(baton->sync_callbacks), baton, baton->config, + "revprop-change", pool)); SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool)); SVN_ERR(with_locked(to_session, do_initialize, baton, pool)); @@ -860,8 +861,8 @@ _("Destination repository has not been initialized")); /* Open the session to copy the revision data. */ - SVN_ERR(svn_ra_open3(from_session, from_url->data, from_uuid->data, - callbacks, baton, config, pool)); + SVN_ERR(svn_ra_open4(from_session, from_url->data, from_uuid->data, + callbacks, baton, config, "svnsync", pool)); return SVN_NO_ERROR; } @@ -1273,8 +1274,9 @@ _("Path '%s' is not a URL"), to_url); baton = make_subcommand_baton(opt_baton, to_url, NULL, 0, 0, pool); - SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL, - &(baton->sync_callbacks), baton, baton->config, pool)); + SVN_ERR(svn_ra_open4(&to_session, baton->to_url, NULL, + &(baton->sync_callbacks), baton, baton->config, + "commit", pool)); SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool)); SVN_ERR(with_locked(to_session, do_synchronize, baton, pool)); @@ -1430,8 +1432,9 @@ baton = make_subcommand_baton(opt_baton, to_url, NULL, start_rev, end_rev, pool); - SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL, - &(baton->sync_callbacks), baton, baton->config, pool)); + SVN_ERR(svn_ra_open4(&to_session, baton->to_url, NULL, + &(baton->sync_callbacks), baton, baton->config, + "revprop-change", pool)); SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool)); SVN_ERR(with_locked(to_session, do_copy_revprops, baton, pool)); @@ -1471,8 +1474,9 @@ /* Open an RA session to the mirror repository URL. */ baton = make_subcommand_baton(opt_baton, to_url, NULL, 0, 0, pool); - SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL, - &(baton->sync_callbacks), baton, baton->config, pool)); + SVN_ERR(svn_ra_open4(&to_session, baton->to_url, NULL, + &(baton->sync_callbacks), baton, baton->config, + "info", pool)); SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool)); /* Verify that the repos has been initialized for synchronization. */ Index: tools/client-side/svnmucc/svnmucc.c =================================================================== --- tools/client-side/svnmucc/svnmucc.c (revision 898186) +++ tools/client-side/svnmucc/svnmucc.c (working copy) @@ -614,8 +614,8 @@ SVN_ERR(svn_config_get_config(&config, config_dir, pool)); SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password, non_interactive, pool)); - SVN_ERR(svn_ra_open3(&session, anchor, NULL, ra_callbacks, - NULL, config, pool)); + SVN_ERR(svn_ra_open4(&session, anchor, NULL, ra_callbacks, + NULL, config, "commit", pool)); SVN_ERR(svn_ra_get_latest_revnum(session, &head, pool)); if (SVN_IS_VALID_REVNUM(base_revision)) Index: subversion/libsvn_client/client.h =================================================================== --- subversion/libsvn_client/client.h (revision 898186) +++ subversion/libsvn_client/client.h (working copy) @@ -185,6 +185,8 @@ CTX is the client context baton. + HIGH_LEVEL_SVN_OPERATION identifies the svn command. + Use POOL for all allocations. */ svn_error_t * svn_client__repos_locations(const char **start_url, @@ -196,6 +198,7 @@ const svn_opt_revision_t *revision, const svn_opt_revision_t *start, const svn_opt_revision_t *end, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool); @@ -260,6 +263,8 @@ revision number of the object in *REV_P, and the final resulting URL in *URL_P. + HIGH_LEVEL_SVN_OPERATION identifies the svn command. + Use authentication baton cached in CTX to authenticate against the repository. @@ -272,6 +277,7 @@ const char *base_dir, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *revision, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool); @@ -382,6 +388,8 @@ The calling application's authentication baton is provided in CTX, and allocations related to this session are performed in POOL. + HIGH_LEVEL_SVN_OPERATION identifies the svn command. + NOTE: The reason for the _internal suffix of this function's name is to avoid confusion with the public API svn_client_open_ra_session(). */ svn_error_t * @@ -391,6 +399,7 @@ apr_array_header_t *commit_items, svn_boolean_t use_admin, svn_boolean_t read_only_wc, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool); Index: subversion/libsvn_client/ra.c =================================================================== --- subversion/libsvn_client/ra.c (revision 898186) +++ subversion/libsvn_client/ra.c (working copy) @@ -42,11 +42,11 @@ #include "private/svn_wc_private.h" -/* This is the baton that we pass svn_ra_open3(), and is associated with +/* This is the baton that we pass svn_ra_open4(), and is associated with the callback table we provide to RA. */ typedef struct { - /* Holds the directory that corresponds to the REPOS_URL at svn_ra_open3() + /* Holds the directory that corresponds to the REPOS_URL at svn_ra_open4() time. When callbacks specify a relative path, they are joined with this base directory. */ const char *base_dir; @@ -293,6 +293,7 @@ apr_array_header_t *commit_items, svn_boolean_t use_admin, svn_boolean_t read_only_wc, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool) { @@ -329,27 +330,31 @@ pool, pool)); } - return svn_error_return(svn_ra_open3(ra_session, base_url, uuid, cbtable, cb, - ctx->config, pool)); + return svn_error_return(svn_ra_open4(ra_session, base_url, uuid, cbtable, cb, + ctx->config, high_level_svn_operation, + pool)); } svn_error_t * -svn_client_open_ra_session(svn_ra_session_t **session, - const char *url, - svn_client_ctx_t *ctx, - apr_pool_t *pool) +svn_client_open_ra_session2(svn_ra_session_t **session, + const char *url, + const char *high_level_svn_operation, + svn_client_ctx_t *ctx, + apr_pool_t *pool) { return svn_error_return(svn_client__open_ra_session_internal(session, url, NULL, NULL, - FALSE, TRUE, ctx, pool)); + FALSE, TRUE, + high_level_svn_operation, + ctx, pool)); } - svn_error_t * -svn_client_uuid_from_url(const char **uuid, - const char *url, - svn_client_ctx_t *ctx, - apr_pool_t *pool) +svn_client_uuid_from_url2(const char **uuid, + const char *url, + const char *high_level_svn_operation, + svn_client_ctx_t *ctx, + apr_pool_t *pool) { svn_ra_session_t *ra_session; apr_pool_t *subpool = svn_pool_create(pool); @@ -358,6 +363,7 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, /* no base dir */ NULL, FALSE, TRUE, + high_level_svn_operation, ctx, subpool)); SVN_ERR(svn_ra_get_uuid2(ra_session, uuid, pool)); @@ -392,6 +398,7 @@ const char *base_dir, const svn_opt_revision_t *peg_revision_p, const svn_opt_revision_t *revision, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool) { @@ -419,7 +426,9 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, initial_url, base_dir, NULL, base_dir != NULL, - FALSE, ctx, pool)); + FALSE, + high_level_svn_operation, + ctx, pool)); dead_end_rev.kind = svn_opt_revision_unspecified; @@ -431,7 +440,7 @@ path_or_url, &peg_revision, /* search range: */ &start_rev, &dead_end_rev, - ctx, pool)); + high_level_svn_operation, ctx, pool)); good_rev = (svn_opt_revision_t *)new_rev; /* Make the session point to the real URL. */ @@ -540,6 +549,7 @@ const svn_opt_revision_t *revision, const svn_opt_revision_t *start, const svn_opt_revision_t *end, + const char *high_level_svn_operation, svn_client_ctx_t *ctx, apr_pool_t *pool) { @@ -609,6 +619,7 @@ if (! ra_session) SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, NULL, FALSE, TRUE, + high_level_svn_operation, ctx, subpool)); /* Resolve the opt_revision_ts. */ Index: subversion/libsvn_client/add.c =================================================================== --- subversion/libsvn_client/add.c (revision 898186) +++ subversion/libsvn_client/add.c (working copy) @@ -699,7 +699,7 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, first_url, NULL, NULL, FALSE, - TRUE, ctx, pool)); + TRUE, "commit", ctx, pool)); for (i = 0; i < urls->nelts; i++) { @@ -795,7 +795,8 @@ directory, nor a place to put temp files. */ if (!ra_session) SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common, NULL, - NULL, FALSE, TRUE, ctx, pool)); + NULL, FALSE, TRUE, "commit", + ctx, pool)); /* URI-decode each target. */ for (i = 0; i < targets->nelts; i++) Index: subversion/libsvn_client/commit.c =================================================================== --- subversion/libsvn_client/commit.c (revision 898186) +++ subversion/libsvn_client/commit.c (working copy) @@ -617,7 +617,7 @@ base_url, base_dir, commit_items, is_commit, !is_commit, - ctx, pool)); + "commit", ctx, pool)); /* If this is an import (aka, not a commit), we need to verify that our repository URL exists. */ Index: subversion/libsvn_client/delete.c =================================================================== --- subversion/libsvn_client/delete.c (revision 898186) +++ subversion/libsvn_client/delete.c (working copy) @@ -216,7 +216,8 @@ { SVN_ERR(svn_client__open_ra_session_internal(&ra_session, item_url, NULL, NULL, FALSE, - TRUE, ctx, pool)); + TRUE, "commit", ctx, + pool)); } else { Index: subversion/libsvn_client/locking_commands.c =================================================================== --- subversion/libsvn_client/locking_commands.c (revision 898186) +++ subversion/libsvn_client/locking_commands.c (working copy) @@ -414,7 +414,7 @@ /* Open an RA session to the common parent of TARGETS. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common_parent_url, - base_dir, NULL, FALSE, FALSE, ctx, pool)); + base_dir, NULL, FALSE, FALSE, "lock", ctx, pool)); cb.base_path = base_dir; cb.urls_to_paths = urls_to_paths; @@ -449,7 +449,8 @@ /* Open an RA session. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common_parent_url, - base_dir, NULL, FALSE, FALSE, ctx, pool)); + base_dir, NULL, FALSE, FALSE, + "unlock", ctx, pool)); /* If break_lock is not set, lock tokens are required by the server. If the targets were all URLs, ensure that we provide lock tokens, Index: subversion/libsvn_client/relocate.c =================================================================== --- subversion/libsvn_client/relocate.c (revision 898186) +++ subversion/libsvn_client/relocate.c (working copy) @@ -90,6 +90,7 @@ svn_ra_session_t *ra_session; SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, NULL, FALSE, TRUE, + "relocate", b->ctx, sesspool)); url_uuid = &APR_ARRAY_PUSH(uuids, struct url_uuid_t); SVN_ERR(svn_ra_get_uuid2(ra_session, &(url_uuid->uuid), pool)); Index: subversion/libsvn_client/status.c =================================================================== --- subversion/libsvn_client/status.c (revision 898186) +++ subversion/libsvn_client/status.c (working copy) @@ -176,7 +176,7 @@ /* Open an RA session to our common ancestor and grab the locks under it. */ SVN_ERR(svn_client__open_ra_session_internal(&ras, rb->ancestor, NULL, - NULL, FALSE, TRUE, + NULL, FALSE, TRUE, "status", rb->ctx, subpool)); /* The locks need to live throughout the edit. Note that if the @@ -380,7 +380,7 @@ /* Open a repository session to the URL. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, URL, dir_abspath, - NULL, FALSE, TRUE, + NULL, FALSE, TRUE, "status", ctx, pool)); /* Verify that URL exists in HEAD. If it doesn't, this can save Index: subversion/libsvn_client/update.c =================================================================== --- subversion/libsvn_client/update.c (revision 898186) +++ subversion/libsvn_client/update.c (working copy) @@ -73,7 +73,8 @@ SVN_ERR(svn_client__open_ra_session_internal(&(ffb->session), ffb->repos_root, NULL, NULL, FALSE, TRUE, - ffb->ctx, ffb->pool)); + "update", ffb->ctx, + ffb->pool)); return svn_ra_get_file(ffb->session, path, revision, stream, fetched_rev, props, pool); } @@ -219,7 +220,7 @@ /* Open an RA session for the URL */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, anchor_url, anchor, NULL, TRUE, TRUE, - ctx, pool)); + "update", ctx, pool)); /* ### todo: shouldn't svn_client__get_revision_number be able to take a URL as easily as a local path? */ Index: subversion/libsvn_client/url.c =================================================================== --- subversion/libsvn_client/url.c (revision 898186) +++ subversion/libsvn_client/url.c (working copy) @@ -117,7 +117,8 @@ if (ra_session == NULL) { SVN_ERR(svn_client__open_ra_session_internal(&ra_session, *url, NULL, - NULL, FALSE, TRUE, ctx, + NULL, FALSE, TRUE, + "general-read", ctx, scratch_pool)); } SVN_ERR(svn_client__get_revision_number(peg_revnum, NULL, ctx->wc_ctx, Index: subversion/libsvn_client/blame.c =================================================================== --- subversion/libsvn_client/blame.c (revision 898186) +++ subversion/libsvn_client/blame.c (working copy) @@ -620,7 +620,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &end_revnum, &url, target, NULL, peg_revision, end, - ctx, pool)); + "blame", ctx, pool)); SVN_ERR(svn_client__get_revision_number(&start_revnum, NULL, ctx->wc_ctx, target_abspath_or_url, ra_session, Index: subversion/libsvn_client/cat.c =================================================================== --- subversion/libsvn_client/cat.c (revision 898186) +++ subversion/libsvn_client/cat.c (working copy) @@ -219,7 +219,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, &url, path_or_url, NULL, peg_revision, - revision, ctx, pool)); + revision, "cat", ctx, pool)); /* Make sure the object isn't a directory. */ SVN_ERR(svn_ra_check_path(ra_session, "", rev, &url_kind, pool)); Index: subversion/libsvn_client/checkout.c =================================================================== --- subversion/libsvn_client/checkout.c (revision 898186) +++ subversion/libsvn_client/checkout.c (working copy) @@ -120,8 +120,9 @@ /* Get the RA connection. */ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &tmp_revnum, &tmp_session_url, url, NULL, - peg_revision, revision, ctx, - session_pool)); + peg_revision, revision, + "checkout", + ctx, session_pool)); if (! have_repos_root_url) SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool)); Index: subversion/libsvn_client/export.c =================================================================== --- subversion/libsvn_client/export.c (revision 898186) +++ subversion/libsvn_client/export.c (working copy) @@ -911,7 +911,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum, &url, from, NULL, peg_revision, - revision, ctx, pool)); + revision, "export", ctx, pool)); /* Get the repository root. */ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool)); Index: subversion/libsvn_client/log.c =================================================================== --- subversion/libsvn_client/log.c (revision 898186) +++ subversion/libsvn_client/log.c (working copy) @@ -144,7 +144,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &at_rev, &at_url, path_or_url, NULL, revision, revision, - ctx, sesspool)); + "log", ctx, sesspool)); /* Find the copy source. Walk the location segments to find the revision at which this node was created (copied or added). */ @@ -494,7 +494,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &ignored_revnum, &actual_url, ra_target, NULL, peg_revision, &session_opt_rev, - ctx, pool)); + "log", ctx, pool)); SVN_ERR(svn_ra_has_capability(ra_session, &has_log_revprops, SVN_RA_CAPABILITY_LOG_REVPROPS, pool)); Index: subversion/libsvn_client/switch.c =================================================================== --- subversion/libsvn_client/switch.c (revision 898186) +++ subversion/libsvn_client/switch.c (working copy) @@ -210,7 +210,7 @@ &switch_rev_url, switch_url, anchor, peg_revision, revision, - ctx, pool)); + "switch", ctx, pool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_root, pool)); /* Disallow a switch operation to change the repository root of the Index: subversion/libsvn_client/util.c =================================================================== --- subversion/libsvn_client/util.c (revision 898186) +++ subversion/libsvn_client/util.c (working copy) @@ -269,6 +269,7 @@ NULL, peg_revision, peg_revision, + "generic-read", ctx, scratch_pool)); Index: subversion/libsvn_client/externals.c =================================================================== --- subversion/libsvn_client/externals.c (revision 898186) +++ subversion/libsvn_client/externals.c (working copy) @@ -215,7 +215,7 @@ /* Get the repos root of the new URL. */ SVN_ERR(svn_client__open_ra_session_internal (&ra_session, url, NULL, NULL, FALSE, TRUE, - ctx, subpool)); + "switch", ctx, subpool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, subpool)); @@ -780,7 +780,9 @@ &ra_cache.ra_session_url, new_item->url, NULL, &(new_item->peg_revision), - &(new_item->revision), ib->ctx, + &(new_item->revision), + "checkout", + ib->ctx, ib->iter_pool)); SVN_ERR(svn_ra_get_uuid2(ra_session, &ra_cache.repos_uuid, Index: subversion/libsvn_client/info.c =================================================================== --- subversion/libsvn_client/info.c (revision 898186) +++ subversion/libsvn_client/info.c (working copy) @@ -407,7 +407,7 @@ ra_session, url, &peg_rev, &start_rev, &end_rev, - ctx, pool); + "info", ctx, pool); if (err && ((err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) || (err->apr_err == SVN_ERR_FS_NOT_FOUND))) @@ -474,7 +474,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, &url, abspath_or_url, NULL, peg_revision, - revision, ctx, pool)); + revision, "info", ctx, pool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_URL, pool)); SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_UUID, pool)); @@ -520,7 +520,7 @@ SVN_ERR(svn_client__open_ra_session_internal(&parent_ra_session, parent_url, NULL, NULL, FALSE, TRUE, - ctx, pool)); + "info", ctx, pool)); /* Get all parent's entries, and find the item's dirent in the hash. */ SVN_ERR(svn_ra_get_dir2(parent_ra_session, &parent_ents, NULL, NULL, Index: subversion/libsvn_client/merge.c =================================================================== --- subversion/libsvn_client/merge.c (revision 898186) +++ subversion/libsvn_client/merge.c (working copy) @@ -947,7 +947,7 @@ &peg_rev, &rev1_opt, &rev2_opt, - merge_b->ctx, + "merge", merge_b->ctx, pool); if (err) { @@ -3293,7 +3293,7 @@ { SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, NULL, - FALSE, TRUE, + FALSE, TRUE, "merge", ctx, scratch_pool)); } @@ -3833,7 +3833,7 @@ err = svn_client__repos_locations(&start_url, &start_revision, NULL, NULL, ra_session, url1, &pegrev, &requested, - &unspec, ctx, pool); + &unspec, "merge", ctx, pool); if (err) { if (err->apr_err == SVN_ERR_FS_NOT_FOUND @@ -6052,7 +6052,7 @@ NULL, NULL, ra_session, source_url, &pegrev, &requested, - &unspec, ctx, pool)); + &unspec, "merge", ctx, pool)); peg_revnum = youngest_requested; } @@ -7822,7 +7822,8 @@ svn_error_clear(err); err = svn_client__open_ra_session_internal(ra_session, url, NULL, NULL, - FALSE, TRUE, ctx, pool); + FALSE, TRUE, "merge", + ctx, pool); } SVN_ERR(err); @@ -8254,10 +8255,12 @@ sesspool = svn_pool_create(pool); SVN_ERR(svn_client__open_ra_session_internal(&ra_session1, URL1, NULL, NULL, - FALSE, TRUE, ctx, sesspool)); + FALSE, TRUE, "merge", + ctx, sesspool)); SVN_ERR(svn_client__open_ra_session_internal(&ra_session2, URL2, NULL, NULL, - FALSE, TRUE, ctx, sesspool)); + FALSE, TRUE, "merge", + ctx, sesspool)); /* Resolve revisions to real numbers. */ SVN_ERR(svn_client__get_revision_number(&rev1, &youngest_rev, ctx->wc_ctx, @@ -9152,7 +9155,8 @@ /* Open an RA session to our source URL, and determine its root URL. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, wc_repos_root, NULL, NULL, - FALSE, FALSE, ctx, pool)); + FALSE, FALSE, "merge", + ctx, pool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_repos_root, pool)); /* source_repos_root and wc_repos_root are required to be the same, @@ -9349,7 +9353,8 @@ /* Open an RA session to our source URL, and determine its root URL. */ sesspool = svn_pool_create(pool); SVN_ERR(svn_client__open_ra_session_internal(&ra_session, URL, NULL, NULL, - FALSE, TRUE, ctx, sesspool)); + FALSE, TRUE, "merge", + ctx, sesspool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &source_repos_root, pool)); /* Normalize our merge sources. */ Index: subversion/libsvn_client/prop_commands.c =================================================================== --- subversion/libsvn_client/prop_commands.c (revision 898186) +++ subversion/libsvn_client/prop_commands.c (working copy) @@ -217,7 +217,7 @@ directory, nor a place to put temp files. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, target, NULL, NULL, FALSE, TRUE, - ctx, pool)); + "commit", ctx, pool)); SVN_ERR(svn_ra_check_path(ra_session, "", base_revision_for_url, &node_kind, pool)); @@ -440,7 +440,8 @@ /* Open an RA session for the URL. Note that we don't have a local directory, nor a place to put temp files. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, URL, NULL, - NULL, FALSE, TRUE, ctx, pool)); + NULL, FALSE, TRUE, + "revprop-change", ctx, pool)); /* Resolve the revision into something real, and return that to the caller as well. */ @@ -889,7 +890,8 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum, &url, path_or_url, NULL, peg_revision, - revision, ctx, pool)); + revision, "propget", + ctx, pool)); SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool)); @@ -917,7 +919,8 @@ /* Open an RA session for the URL. Note that we don't have a local directory, nor a place to put temp files. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, URL, NULL, - NULL, FALSE, TRUE, ctx, pool)); + NULL, FALSE, TRUE, + "revprop-get", ctx, pool)); /* Resolve the revision into something real, and return that to the caller as well. */ @@ -1249,7 +1252,8 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum, &url, path_or_url, NULL, peg_revision, - revision, ctx, pool)); + revision, "proplist", + ctx, pool)); SVN_ERR(svn_ra_check_path(ra_session, "", revnum, &kind, pool)); @@ -1275,7 +1279,8 @@ /* Open an RA session for the URL. Note that we don't have a local directory, nor a place to put temp files. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, URL, NULL, - NULL, FALSE, TRUE, ctx, pool)); + NULL, FALSE, TRUE, + "revprop-list", ctx, pool)); /* Resolve the revision into something real, and return that to the caller as well. */ Index: subversion/libsvn_client/diff.c =================================================================== --- subversion/libsvn_client/diff.c (revision 898186) +++ subversion/libsvn_client/diff.c (working copy) @@ -1071,7 +1071,7 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, drr->url2, NULL, NULL, FALSE, - TRUE, ctx, pool)); + TRUE, "diff", ctx, pool)); /* If we are performing a pegged diff, we need to find out what our actual URLs will be. */ @@ -1086,7 +1086,7 @@ params->peg_revision, params->revision1, params->revision2, - ctx, pool)); + "diff", ctx, pool)); /* Reparent the session, since drr->url2 might have changed as a result the above call. */ SVN_ERR(svn_ra_reparent(ra_session, drr->url2, pool)); @@ -1274,8 +1274,8 @@ location for URL1. This is used during the editor calls to fetch file contents. */ SVN_ERR(svn_client__open_ra_session_internal(&extra_ra_session, drr.anchor1, - NULL, NULL, FALSE, TRUE, ctx, - pool)); + NULL, NULL, FALSE, TRUE, "diff", + ctx, pool)); /* Set up the repos_diff editor on BASE_PATH, if available. Otherwise, we just use "". */ @@ -1381,7 +1381,7 @@ path1, peg_revision, revision1, &end, - ctx, pool)); + "diff", ctx, pool)); if (!reverse) { callback_baton->orig_path_1 = url1; @@ -1397,7 +1397,7 @@ /* Establish RA session to path2's anchor */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, anchor_url, NULL, NULL, FALSE, TRUE, - ctx, pool)); + "diff", ctx, pool)); SVN_ERR(svn_wc_get_diff_editor6(&diff_editor, &diff_edit_baton, ctx->wc_ctx, @@ -1533,7 +1533,7 @@ location for URL1. This is used to get the kind of deleted paths. */ SVN_ERR(svn_client__open_ra_session_internal(&extra_ra_session, drr.anchor1, NULL, NULL, FALSE, TRUE, - ctx, pool)); + "diff-summarize", ctx, pool)); /* Set up the repos_diff editor. */ SVN_ERR(svn_client__get_diff_summarize_editor Index: subversion/libsvn_client/copy.c =================================================================== --- subversion/libsvn_client/copy.c (revision 898186) +++ subversion/libsvn_client/copy.c (working copy) @@ -737,7 +737,7 @@ of a cheap(ish) sanity check. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, first_pair->src, NULL, NULL, FALSE, TRUE, - ctx, pool)); + "commit", ctx, pool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool)); /* Verify that sources and destinations are all at or under @@ -780,7 +780,7 @@ ra_session, pair->src, &pair->src_peg_revision, &pair->src_op_revision, - &dead_end_rev, ctx, pool)); + &dead_end_rev, "commit", ctx, pool)); /* Go ahead and grab mergeinfo from the source, too. */ SVN_ERR(svn_client__ensure_ra_session_url(&ignored_url, ra_session, @@ -1195,7 +1195,8 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_dst_url, svn_wc_adm_access_path( adm_access), - NULL, TRUE, TRUE, ctx, pool)); + NULL, TRUE, TRUE, "commit", + ctx, pool)); /* If requested, determine the nearest existing parent of the destination, and reparent the ra session there. */ @@ -1374,7 +1375,8 @@ /* Open an RA session to DST_URL. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_dst_url, NULL, commit_items, - FALSE, FALSE, ctx, pool)); + FALSE, FALSE, "commit", + ctx, pool)); /* Fetch RA commit editor. */ SVN_ERR(svn_client__commit_get_baton(&commit_baton, commit_info_p, pool)); @@ -1587,7 +1589,7 @@ &pair->src_peg_revision, &pair->src_op_revision, &dead_end_rev, - ctx, iterpool)); + "repos-to-wc-copy", ctx, iterpool)); pair->src_original = pair->src; pair->src = apr_pstrdup(pool, src); @@ -1601,7 +1603,8 @@ (yet) have a working copy, so we don't have a corresponding path and tempfiles cannot go into the admin area. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_src_url, NULL, - NULL, FALSE, TRUE, ctx, pool)); + NULL, FALSE, TRUE, + "repos-to-wc-copy", ctx, pool)); /* Pass null for the path, to ensure error if trying to get a revision based on the working copy. */ Index: subversion/libsvn_client/mergeinfo.c =================================================================== --- subversion/libsvn_client/mergeinfo.c (revision 898186) +++ subversion/libsvn_client/mergeinfo.c (working copy) @@ -608,6 +608,7 @@ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, NULL, FALSE, TRUE, + "merge-or-mergeinfo", ctx, sesspool)); } @@ -715,7 +716,8 @@ { sesspool = svn_pool_create(pool); SVN_ERR(svn_client__open_ra_session_internal(&session, url, NULL, NULL, - FALSE, TRUE, ctx, + FALSE, TRUE, + "merge-or-mergeinfo", ctx, sesspool)); } @@ -1016,7 +1018,9 @@ SVN_ERR(svn_dirent_get_absolute(&local_abspath, "", scratch_pool)); SVN_ERR(svn_client__open_ra_session_internal(&ra_session, path_or_url, NULL, NULL, FALSE, - TRUE, ctx, scratch_pool)); + TRUE, + "merge-or-mergeinfo", + ctx, scratch_pool)); SVN_ERR(svn_client__get_revision_number(&rev, NULL, ctx->wc_ctx, local_abspath, ra_session, &peg_rev, scratch_pool)); @@ -1044,7 +1048,8 @@ /* Check server Merge Tracking capability. */ SVN_ERR(svn_client__open_ra_session_internal(&ra_session, url, NULL, NULL, FALSE, - TRUE, ctx, scratch_pool)); + TRUE, "merge-or-mergeinfo", + ctx, scratch_pool)); SVN_ERR(svn_ra__assert_mergeinfo_capable_server(ra_session, path_or_url, scratch_pool)); @@ -1565,7 +1570,7 @@ ? path_or_url : NULL, peg_revision, peg_revision, - ctx, subpool)); + "log", ctx, subpool)); *url = apr_pstrdup(pool, *url); *revision = apr_pcalloc(pool, sizeof(**revision)); (*revision)->kind = svn_opt_revision_number; Index: subversion/libsvn_client/list.c =================================================================== --- subversion/libsvn_client/list.c (revision 898186) +++ subversion/libsvn_client/list.c (working copy) @@ -140,7 +140,7 @@ SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, &url, path_or_url, NULL, peg_revision, - revision, ctx, pool)); + revision, "list", ctx, pool)); SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool)); @@ -180,7 +180,8 @@ SVN_ERR(svn_client__open_ra_session_internal(&parent_session, parent_url, NULL, NULL, FALSE, - TRUE, ctx, pool)); + TRUE, "list", + ctx, pool)); /* Get all parent's entries, no props. */ SVN_ERR(svn_ra_get_dir2(parent_session, &parent_ents, NULL, Index: subversion/libsvn_client/deprecated.c =================================================================== --- subversion/libsvn_client/deprecated.c (revision 898186) +++ subversion/libsvn_client/deprecated.c (working copy) @@ -49,6 +49,24 @@ /*** Code. ***/ +svn_error_t * +svn_client_open_ra_session(svn_ra_session_t **session, + const char *url, + svn_client_ctx_t *ctx, + apr_pool_t *pool) +{ + return svn_client_open_ra_session2(session, url, NULL, ctx, pool); +} + +svn_error_t * +svn_client_uuid_from_url(const char **uuid, + const char *url, + svn_client_ctx_t *ctx, + apr_pool_t *pool) +{ + return svn_client_uuid_from_url2(uuid, url, NULL, ctx, pool); +} + /*** From add.c ***/ svn_error_t * svn_client_add3(const char *path,