This commit intends to help the http servers to identify the high level intension of the svn request. We need it to differentiate between the read request and the write request to decide whether to proxy some ambiguous 'PROPFIND' requests to Master or not. There could be other usecases for this new change, Administrators can deny resource hungry svn operation by the following pseudo httpd configuration. RewriteRule ^/svn/.* - [E=SVN-OPERATION:%{HTTP:SVN-OPERATION},PT] May be I need to Make mod_dav_svn set SVN-OPERATION env as an var by default. SetEnvIf SVN-OPERATION ^merge_aware_revision_graph resource_intensive_command Deny from env=resource_intensive_command ... Revs the following public APIs, 'svn_client_uuid_from_url', 'svn_client_open_ra_session' and 'svn_ra_open3'. Introduces the new API svn_ra_change_operation_name. New 'svn_ra_open4' accepts the 'high_level_svn_operation' which the caller can set it to descriptive value as per the operation he intend to do. If the caller want to reuse the ra_session for some other purpose he can use the new 'svn_ra_change_operation_name' to change as per his new intension. * subversion/include/svn_client.h (svn_client_uuid_from_url2): Rev svn_client_uuid_from_url. (svn_client_uuid_from_url): Deprecate in favour of svn_client_uuid_from_url2. (svn_client_open_ra_session2): Rev svn_client_open_ra_session. (svn_client_open_ra_session): Deprecate in favour of svn_client_open_ra_session2. * subversion/include/svn_ra.h (svn_ra_change_operation_name): Prototype new API. (svn_ra_open4): Rev svn_ra_open3 (svn_ra_open3): Deprecate in favour of svn_ra_open4. (svn_ra_get_wc_prop_func_t, svn_ra_reporter3_t.set_path, svn_ra_callbacks2_t): Doc string to refer new function svn_ra_open4 * subversion/libsvn_ra/ra_loader.h (svn_ra__vtable_t.open_session): Change the signature to accept the 'high_level_svn_operation'. (svn_ra__vtable_t.change_operation_name): Hook for new operation change. * subversion/libsvn_ra/ra_loader.c () Some comment referring svn_ra_open3 to svn_ra_open4. (svn_ra_open4): Renamed from svn_ra_open3 with new parameter 'high_level_svn_operation' added cascade to svn_ra__vtable_t.open_session(). (svn_ra_open3): Moved to subversion/libsvn_ra/deprecated.c (svn_ra_change_operation_name): New function. * subversion/libsvn_ra/deprecated.c House deprecated function 'svn_ra_open3' * subversion/libsvn_ra/wrapper_template.h (svn_ra_plugin_t.compat_open): Pass 'NULL' as new parameter svn_ra__vtable_t.open_session(). * subversion/libsvn_ra_local/ra_plugin.c (svn_ra_local__open): Change Signature as per new signature of 'svn_ra__vtable_t.open_session'. (+ra_local_change_operation_name): Implement 'svn_ra__vtable_t.change_operation_name'. * subversion/tests/libsvn_ra_local/ra-local-test.c (make_and_open_local_repos): svn_ra_open3 -> svn_ra_open4. * subversion/libsvn_ra_svn/client.c (ra_svn_open): Change Signature as per new signature of 'svn_ra__vtable_t.open_session'. Now we are not passing this to svnserve, may be later we may need to. (ra_svn_change_operation_name): Implement 'svn_ra__vtable_t.change_operation_name'. * subversion/libsvn_ra_neon/session.c (svn_ra_neon__open): Change Signature as per new signature of 'svn_ra__vtable_t.open_session' and persist high_level_svn_operation for later requests. (ra_neon_change_operation_name): Implement 'svn_ra__vtable_t.change_operation_name'. * subversion/libsvn_ra_neon/util.c (svn_ra_neon__request_create): Set 'SVN-OPERATION' request header if high_level_svn_operation is not-NULL. * subversion/libsvn_ra_neon/ra_neon.h (svn_ra_neon__session_t.high_level_svn_operation): New member. * subversion/libsvn_ra_serf/serf.c (svn_ra_serf__open): Change Signature as per new signature of 'svn_ra__vtable_t.open_session' and persist high_level_svn_operation for later requests. (ra_serf_change_operation_name): Implement 'svn_ra__vtable_t.change_operation_name'. * subversion/libsvn_ra_serf/util.c (setup_request): Set 'SVN-OPERATION' request header if high_level_svn_operation is not-NULL. * subversion/libsvn_ra_serf/ra_serf.h (svn_ra_serf__session_t.high_level_svn_operation): New member. * subversion/svnsync/main.c (do_initialize, initialize_cmd, open_source_session, synchronize_cmd, copy_revprops_cmd, info_cmd): * tools/client-side/svnmucc/svnmucc.c (execute): Make use of 'svn_ra_open4'. * subversion/libsvn_client/client.h (svn_client__repos_locations, svn_client__ra_session_from_path, svn_client__open_ra_session_internal): Change signature to accept 'high_level_svn_operation'. * subversion/libsvn_client/ra.c (callback_baton_t): Change comments referring 'svn_ra_open3' to 'svn_ra_open4'. (svn_client__open_ra_session_internal): Change signature to accept 'high_level_svn_operation' and cascade to svn_ra_open4. (svn_client_open_ra_session2): Rev svn_client_open_ra_session. (svn_client_open_ra_session): Moved to subversion/libsvn_client/deprecated.c (svn_client_uuid_from_url2): Rev svn_client_open_ra_session. (svn_client_uuid_from_url): Moved to subversion/libsvn_client/deprecated.c (svn_client__ra_session_from_path): Accept 'high_level_svn_operation' and cascade. (svn_client__repos_locations): Accept 'high_level_svn_operation' and cascade. * subversion/libsvn_client/add.c (mkdir_urls): * subversion/libsvn_client/commit.c (get_ra_editor): * subversion/libsvn_client/delete.c (delete_urls): * subversion/libsvn_client/locking_commands.c (svn_client_lock, svn_client_unlock): * subversion/libsvn_client/relocate.c (validator_func): * subversion/libsvn_client/status.c (reporter_finish_report, svn_client_status5): * subversion/libsvn_client/update.c (file_fetcher, svn_client__update_internal): * subversion/libsvn_client/url.c (svn_client__derive_location): Call svn_client__open_ra_session_internal as per new signature. * subversion/libsvn_client/blame.c (svn_client_blame5): * subversion/libsvn_client/cat.c (svn_client_cat2): * subversion/libsvn_client/checkout.c (svn_client__checkout_internal): * subversion/libsvn_client/export.c (svn_client_export5): * subversion/libsvn_client/log.c (svn_client__get_copy_source, file_rev_handler): * subversion/libsvn_client/switch.c (svn_client__switch_internal): * subversion/libsvn_client/util.c (svn_client__get_repos_root): Call svn_client__ra_session_from_path as per new signature. * subversion/libsvn_client/externals.c (switch_dir_external): Call svn_client__open_ra_session_internal as per new signature. (handle_external_item_change): Call svn_client__ra_session_from_path as per new signature. * subversion/libsvn_client/info.c (same_resource_in_head): Call 'svn_client__repos_locations' as per new signature. (svn_client_info3): Call 'svn_client__ra_session_from_path' and 'svn_client__open_ra_session_internal' as per new signature. * subversion/libsvn_client/merge.c (filter_self_referential_mergeinfo, calculate_remaining_ranges, normalize_merge_sources): Call 'svn_client__repos_locations' as per new Signature. (get_full_mergeinfo, ensure_ra_session_url, svn_client_merge3, svn_client_merge_reintegrate, svn_client_merge_peg3): Call 'svn_client__open_ra_session_internal' as per new Signature. * subversion/libsvn_client/prop_commands.c (propset_on_url, svn_client_revprop_set2, svn_client_revprop_get, svn_client_revprop_list): Call 'svn_client__open_ra_session_internal' as per new Signature. (svn_client_propget3, svn_client_proplist3): Call 'svn_client__open_ra_session_from_path' as per new Signature. * subversion/libsvn_client/diff.c (diff_prepare_repos_repos, diff_repos_wc): Call 'svn_client__open_ra_session_internal' as per new Signature. Call 'svn_client__repos_locations' as per new Signature. (diff_repos_repos, diff_summarize_repos_repos): Call 'svn_client__open_ra_session_internal' as per new Signature. * subversion/libsvn_client/copy.c (repos_to_repos_copy, repos_to_wc_copy): Call 'svn_client__open_ra_session_internal' as per new Signature. Call 'svn_client__repos_locations' as per new Signature. (wc_to_repos_copy): Call 'svn_client__open_ra_session_internal' as per new Signature. * subversion/libsvn_client/mergeinfo.c (svn_client__get_wc_or_repos_mergeinfo_catalog, svn_client__get_history_as_mergeinfo, get_mergeinfo): Call 'svn_client__open_ra_session_internal' as per new Signature. (location_from_path_and_rev): Call 'svn_client__ra_session_from_path' as per new signature. * subversion/libsvn_client/list.c (svn_client_list2): Call 'svn_client__open_ra_session_internal' as per new Signature. Call 'svn_client__ra_session_from_path' as per new Signature. * subversion/libsvn_client/deprecated.c House deprecated functions 'svn_client_open_ra_session' and 'svn_client_uuid_from_url'