diff options
author | peter <peter@FreeBSD.org> | 2013-06-18 02:07:41 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2013-06-18 02:07:41 +0000 |
commit | d25dac7fcc6acc838b71bbda8916fd9665c709ab (patch) | |
tree | 135691142dc0e75a5e5d97b5074d03436435b8e0 /subversion/libsvn_ra/deprecated.c | |
download | FreeBSD-src-d25dac7fcc6acc838b71bbda8916fd9665c709ab.zip FreeBSD-src-d25dac7fcc6acc838b71bbda8916fd9665c709ab.tar.gz |
Import trimmed svn-1.8.0-rc3
Diffstat (limited to 'subversion/libsvn_ra/deprecated.c')
-rw-r--r-- | subversion/libsvn_ra/deprecated.c | 509 |
1 files changed, 509 insertions, 0 deletions
diff --git a/subversion/libsvn_ra/deprecated.c b/subversion/libsvn_ra/deprecated.c new file mode 100644 index 0000000..b7e717e --- /dev/null +++ b/subversion/libsvn_ra/deprecated.c @@ -0,0 +1,509 @@ +/* + * deprecated.c: holding file for all deprecated APIs. + * "we can't lose 'em, but we can shun 'em!" + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + */ + +/* We define this here to remove any further warnings about the usage of + deprecated functions in this file. */ +#define SVN_DEPRECATED + +#include "svn_hash.h" +#include "svn_ra.h" +#include "svn_path.h" +#include "svn_compat.h" +#include "svn_props.h" +#include "svn_pools.h" + +#include "ra_loader.h" +#include "deprecated.h" + +#include "svn_private_config.h" + + + + +/*** From ra_loader.c ***/ +/*** Compatibility Wrappers ***/ + +/* Wrap @c svn_ra_reporter3_t in an interface that looks like + @c svn_ra_reporter2_t, for compatibility with functions that take + the latter. This shields the ra-specific implementations from + worrying about what kind of reporter they're dealing with. + + This code does not live in wrapper_template.h because that file is + about the big changeover from a vtable-style to function-style + interface, and does not contain the post-changeover interfaces + that we are compatiblizing here. + + This code looks like it duplicates code in libsvn_wc/adm_crawler.c, + but in fact it does not. That code makes old things look like new + things; this code makes a new thing look like an old thing. */ + +/* Baton for abovementioned wrapping. */ +struct reporter_3in2_baton { + const svn_ra_reporter3_t *reporter3; + void *reporter3_baton; +}; + +/* Wrap the corresponding svn_ra_reporter3_t field in an + svn_ra_reporter2_t interface. @a report_baton is a + @c reporter_3in2_baton_t *. */ +static svn_error_t * +set_path(void *report_baton, + const char *path, + svn_revnum_t revision, + svn_boolean_t start_empty, + const char *lock_token, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = report_baton; + return b->reporter3->set_path(b->reporter3_baton, + path, revision, svn_depth_infinity, + start_empty, lock_token, pool); +} + +/* Wrap the corresponding svn_ra_reporter3_t field in an + svn_ra_reporter2_t interface. @a report_baton is a + @c reporter_3in2_baton_t *. */ +static svn_error_t * +delete_path(void *report_baton, + const char *path, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = report_baton; + return b->reporter3->delete_path(b->reporter3_baton, path, pool); +} + +/* Wrap the corresponding svn_ra_reporter3_t field in an + svn_ra_reporter2_t interface. @a report_baton is a + @c reporter_3in2_baton_t *. */ +static svn_error_t * +link_path(void *report_baton, + const char *path, + const char *url, + svn_revnum_t revision, + svn_boolean_t start_empty, + const char *lock_token, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = report_baton; + return b->reporter3->link_path(b->reporter3_baton, + path, url, revision, svn_depth_infinity, + start_empty, lock_token, pool); + +} + +/* Wrap the corresponding svn_ra_reporter3_t field in an + svn_ra_reporter2_t interface. @a report_baton is a + @c reporter_3in2_baton_t *. */ +static svn_error_t * +finish_report(void *report_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = report_baton; + return b->reporter3->finish_report(b->reporter3_baton, pool); +} + +/* Wrap the corresponding svn_ra_reporter3_t field in an + svn_ra_reporter2_t interface. @a report_baton is a + @c reporter_3in2_baton_t *. */ +static svn_error_t * +abort_report(void *report_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = report_baton; + return b->reporter3->abort_report(b->reporter3_baton, pool); +} + +/* Wrap svn_ra_reporter3_t calls in an svn_ra_reporter2_t interface. + + Note: For calls where the prototypes are exactly the same, we could + avoid the pass-through overhead by using the function in the + reporter returned from session->vtable->do_foo. But the code would + get a lot less readable, and the only benefit would be to shave a + few instructions in a network-bound operation anyway. So in + delete_path(), finish_report(), and abort_report(), we cheerfully + pass through to identical functions. */ +static svn_ra_reporter2_t reporter_3in2_wrapper = { + set_path, + delete_path, + link_path, + finish_report, + 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, NULL, repos_URL, uuid, + callbacks, callback_baton, config, pool); +} + +svn_error_t *svn_ra_open2(svn_ra_session_t **session_p, + const char *repos_URL, + const svn_ra_callbacks2_t *callbacks, + void *callback_baton, + apr_hash_t *config, + apr_pool_t *pool) +{ + return svn_ra_open3(session_p, repos_URL, NULL, + callbacks, callback_baton, config, pool); +} + +svn_error_t *svn_ra_open(svn_ra_session_t **session_p, + const char *repos_URL, + const svn_ra_callbacks_t *callbacks, + void *callback_baton, + apr_hash_t *config, + apr_pool_t *pool) +{ + /* Deprecated function. Copy the contents of the svn_ra_callbacks_t + to a new svn_ra_callbacks2_t and call svn_ra_open2(). */ + svn_ra_callbacks2_t *callbacks2; + SVN_ERR(svn_ra_create_callbacks(&callbacks2, pool)); + callbacks2->open_tmp_file = callbacks->open_tmp_file; + callbacks2->auth_baton = callbacks->auth_baton; + callbacks2->get_wc_prop = callbacks->get_wc_prop; + callbacks2->set_wc_prop = callbacks->set_wc_prop; + callbacks2->push_wc_prop = callbacks->push_wc_prop; + callbacks2->invalidate_wc_props = callbacks->invalidate_wc_props; + callbacks2->progress_func = NULL; + callbacks2->progress_baton = NULL; + return svn_ra_open2(session_p, repos_URL, + callbacks2, callback_baton, + config, pool); +} + +svn_error_t *svn_ra_change_rev_prop(svn_ra_session_t *session, + svn_revnum_t rev, + const char *name, + const svn_string_t *value, + apr_pool_t *pool) +{ + return svn_ra_change_rev_prop2(session, rev, name, NULL, value, pool); +} + +svn_error_t *svn_ra_get_commit_editor2(svn_ra_session_t *session, + const svn_delta_editor_t **editor, + void **edit_baton, + const char *log_msg, + svn_commit_callback2_t commit_callback, + void *commit_baton, + apr_hash_t *lock_tokens, + svn_boolean_t keep_locks, + apr_pool_t *pool) +{ + apr_hash_t *revprop_table = apr_hash_make(pool); + if (log_msg) + svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG, + svn_string_create(log_msg, pool)); + return svn_ra_get_commit_editor3(session, editor, edit_baton, revprop_table, + commit_callback, commit_baton, + lock_tokens, keep_locks, pool); +} + +svn_error_t *svn_ra_get_commit_editor(svn_ra_session_t *session, + const svn_delta_editor_t **editor, + void **edit_baton, + const char *log_msg, + svn_commit_callback_t callback, + void *callback_baton, + apr_hash_t *lock_tokens, + svn_boolean_t keep_locks, + apr_pool_t *pool) +{ + svn_commit_callback2_t callback2; + void *callback2_baton; + + svn_compat_wrap_commit_callback(&callback2, &callback2_baton, + callback, callback_baton, + pool); + + return svn_ra_get_commit_editor2(session, editor, edit_baton, + log_msg, callback2, + callback2_baton, lock_tokens, + keep_locks, pool); +} + +svn_error_t *svn_ra_do_diff2(svn_ra_session_t *session, + const svn_ra_reporter2_t **reporter, + void **report_baton, + svn_revnum_t revision, + const char *diff_target, + svn_boolean_t recurse, + svn_boolean_t ignore_ancestry, + svn_boolean_t text_deltas, + const char *versus_url, + const svn_delta_editor_t *diff_editor, + void *diff_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = apr_palloc(pool, sizeof(*b)); + SVN_ERR_ASSERT(svn_path_is_empty(diff_target) + || svn_path_is_single_path_component(diff_target)); + *reporter = &reporter_3in2_wrapper; + *report_baton = b; + return session->vtable->do_diff(session, + &(b->reporter3), &(b->reporter3_baton), + revision, diff_target, + SVN_DEPTH_INFINITY_OR_FILES(recurse), + ignore_ancestry, text_deltas, versus_url, + diff_editor, diff_baton, pool); +} + +svn_error_t *svn_ra_do_diff(svn_ra_session_t *session, + const svn_ra_reporter2_t **reporter, + void **report_baton, + svn_revnum_t revision, + const char *diff_target, + svn_boolean_t recurse, + svn_boolean_t ignore_ancestry, + const char *versus_url, + const svn_delta_editor_t *diff_editor, + void *diff_baton, + apr_pool_t *pool) +{ + SVN_ERR_ASSERT(svn_path_is_empty(diff_target) + || svn_path_is_single_path_component(diff_target)); + return svn_ra_do_diff2(session, reporter, report_baton, revision, + diff_target, recurse, ignore_ancestry, TRUE, + versus_url, diff_editor, diff_baton, pool); +} + +svn_error_t *svn_ra_get_log(svn_ra_session_t *session, + const apr_array_header_t *paths, + svn_revnum_t start, + svn_revnum_t end, + int limit, + svn_boolean_t discover_changed_paths, + svn_boolean_t strict_node_history, + svn_log_message_receiver_t receiver, + void *receiver_baton, + apr_pool_t *pool) +{ + svn_log_entry_receiver_t receiver2; + void *receiver2_baton; + + if (paths) + { + int i; + for (i = 0; i < paths->nelts; i++) + { + const char *path = APR_ARRAY_IDX(paths, i, const char *); + SVN_ERR_ASSERT(*path != '/'); + } + } + + svn_compat_wrap_log_receiver(&receiver2, &receiver2_baton, + receiver, receiver_baton, + pool); + + return svn_ra_get_log2(session, paths, start, end, limit, + discover_changed_paths, strict_node_history, + FALSE, svn_compat_log_revprops_in(pool), + receiver2, receiver2_baton, pool); +} + +svn_error_t *svn_ra_get_file_revs(svn_ra_session_t *session, + const char *path, + svn_revnum_t start, + svn_revnum_t end, + svn_ra_file_rev_handler_t handler, + void *handler_baton, + apr_pool_t *pool) +{ + svn_file_rev_handler_t handler2; + void *handler2_baton; + + SVN_ERR_ASSERT(*path != '/'); + + svn_compat_wrap_file_rev_handler(&handler2, &handler2_baton, + handler, handler_baton, + pool); + + return svn_ra_get_file_revs2(session, path, start, end, FALSE, handler2, + handler2_baton, pool); +} + +svn_error_t * +svn_ra_do_update2(svn_ra_session_t *session, + const svn_ra_reporter3_t **reporter, + void **report_baton, + svn_revnum_t revision_to_update_to, + const char *update_target, + svn_depth_t depth, + svn_boolean_t send_copyfrom_args, + const svn_delta_editor_t *update_editor, + void *update_baton, + apr_pool_t *pool) +{ + return svn_error_trace( + svn_ra_do_update3(session, + reporter, report_baton, + revision_to_update_to, update_target, + depth, + send_copyfrom_args, + FALSE /* ignore_ancestry */, + update_editor, update_baton, + pool, pool)); +} + +svn_error_t *svn_ra_do_update(svn_ra_session_t *session, + const svn_ra_reporter2_t **reporter, + void **report_baton, + svn_revnum_t revision_to_update_to, + const char *update_target, + svn_boolean_t recurse, + const svn_delta_editor_t *update_editor, + void *update_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = apr_palloc(pool, sizeof(*b)); + SVN_ERR_ASSERT(svn_path_is_empty(update_target) + || svn_path_is_single_path_component(update_target)); + *reporter = &reporter_3in2_wrapper; + *report_baton = b; + return session->vtable->do_update(session, + &(b->reporter3), &(b->reporter3_baton), + revision_to_update_to, update_target, + SVN_DEPTH_INFINITY_OR_FILES(recurse), + FALSE, /* no copyfrom args */ + FALSE /* ignore_ancestry */, + update_editor, update_baton, + pool, pool); +} + + +svn_error_t * +svn_ra_do_switch2(svn_ra_session_t *session, + const svn_ra_reporter3_t **reporter, + void **report_baton, + svn_revnum_t revision_to_switch_to, + const char *switch_target, + svn_depth_t depth, + const char *switch_url, + const svn_delta_editor_t *switch_editor, + void *switch_baton, + apr_pool_t *pool) +{ + return svn_error_trace( + svn_ra_do_switch3(session, + reporter, report_baton, + revision_to_switch_to, switch_target, + depth, + switch_url, + FALSE /* send_copyfrom_args */, + TRUE /* ignore_ancestry */, + switch_editor, switch_baton, + pool, pool)); +} + +svn_error_t *svn_ra_do_switch(svn_ra_session_t *session, + const svn_ra_reporter2_t **reporter, + void **report_baton, + svn_revnum_t revision_to_switch_to, + const char *switch_target, + svn_boolean_t recurse, + const char *switch_url, + const svn_delta_editor_t *switch_editor, + void *switch_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = apr_palloc(pool, sizeof(*b)); + SVN_ERR_ASSERT(svn_path_is_empty(switch_target) + || svn_path_is_single_path_component(switch_target)); + *reporter = &reporter_3in2_wrapper; + *report_baton = b; + return session->vtable->do_switch(session, + &(b->reporter3), &(b->reporter3_baton), + revision_to_switch_to, switch_target, + SVN_DEPTH_INFINITY_OR_FILES(recurse), + switch_url, + FALSE /* send_copyfrom_args */, + TRUE /* ignore_ancestry */, + switch_editor, switch_baton, + pool, pool); +} + +svn_error_t *svn_ra_do_status(svn_ra_session_t *session, + const svn_ra_reporter2_t **reporter, + void **report_baton, + const char *status_target, + svn_revnum_t revision, + svn_boolean_t recurse, + const svn_delta_editor_t *status_editor, + void *status_baton, + apr_pool_t *pool) +{ + struct reporter_3in2_baton *b = apr_palloc(pool, sizeof(*b)); + SVN_ERR_ASSERT(svn_path_is_empty(status_target) + || svn_path_is_single_path_component(status_target)); + *reporter = &reporter_3in2_wrapper; + *report_baton = b; + return session->vtable->do_status(session, + &(b->reporter3), &(b->reporter3_baton), + status_target, revision, + SVN_DEPTH_INFINITY_OR_IMMEDIATES(recurse), + status_editor, status_baton, pool); +} + +svn_error_t *svn_ra_get_dir(svn_ra_session_t *session, + const char *path, + svn_revnum_t revision, + apr_hash_t **dirents, + svn_revnum_t *fetched_rev, + apr_hash_t **props, + apr_pool_t *pool) +{ + SVN_ERR_ASSERT(*path != '/'); + return session->vtable->get_dir(session, dirents, fetched_rev, props, + path, revision, SVN_DIRENT_ALL, pool); +} + +svn_error_t * +svn_ra_local__deprecated_init(int abi_version, + apr_pool_t *pool, + apr_hash_t *hash) +{ + return svn_error_trace(svn_ra_local_init(abi_version, pool, hash)); +} + +svn_error_t * +svn_ra_svn__deprecated_init(int abi_version, + apr_pool_t *pool, + apr_hash_t *hash) +{ + return svn_error_trace(svn_ra_svn_init(abi_version, pool, hash)); +} + +svn_error_t * +svn_ra_serf__deprecated_init(int abi_version, + apr_pool_t *pool, + apr_hash_t *hash) +{ + return svn_error_trace(svn_ra_serf_init(abi_version, pool, hash)); +} |