diff options
Diffstat (limited to 'subversion/libsvn_wc/deprecated.c')
-rw-r--r-- | subversion/libsvn_wc/deprecated.c | 458 |
1 files changed, 410 insertions, 48 deletions
diff --git a/subversion/libsvn_wc/deprecated.c b/subversion/libsvn_wc/deprecated.c index d9dbdf4..79cdb30 100644 --- a/subversion/libsvn_wc/deprecated.c +++ b/subversion/libsvn_wc/deprecated.c @@ -32,10 +32,12 @@ #include "svn_subst.h" #include "svn_pools.h" #include "svn_props.h" +#include "svn_hash.h" #include "svn_time.h" #include "svn_dirent_uri.h" #include "svn_path.h" +#include "private/svn_subr_private.h" #include "private/svn_wc_private.h" #include "wc.h" @@ -84,8 +86,7 @@ traversal_info_update(void *baton, { dup_val = apr_pstrmemdup(dup_pool, old_val->data, old_val->len); - apr_hash_set(ub->traversal->externals_old, dup_path, APR_HASH_KEY_STRING, - dup_val); + svn_hash_sets(ub->traversal->externals_old, dup_path, dup_val); } if (new_val) @@ -94,12 +95,10 @@ traversal_info_update(void *baton, if (old_val != new_val) dup_val = apr_pstrmemdup(dup_pool, new_val->data, new_val->len); - apr_hash_set(ub->traversal->externals_new, dup_path, APR_HASH_KEY_STRING, - dup_val); + svn_hash_sets(ub->traversal->externals_new, dup_path, dup_val); } - apr_hash_set(ub->traversal->depths, dup_path, APR_HASH_KEY_STRING, - svn_depth_to_word(depth)); + svn_hash_sets(ub->traversal->depths, dup_path, svn_depth_to_word(depth)); return SVN_NO_ERROR; } @@ -137,19 +136,15 @@ gather_traversal_info(svn_wc_context_t *wc_ctx, traversal_info->pool); if (gather_as_old) - apr_hash_set(traversal_info->externals_old, - relpath, APR_HASH_KEY_STRING, - svn__apr_hash_index_val(hi)); + svn_hash_sets(traversal_info->externals_old, relpath, + svn__apr_hash_index_val(hi)); if (gather_as_new) - apr_hash_set(traversal_info->externals_new, - relpath, APR_HASH_KEY_STRING, - svn__apr_hash_index_val(hi)); - - apr_hash_set(traversal_info->depths, - relpath, APR_HASH_KEY_STRING, - apr_hash_get(ambient_depths, node_abspath, - APR_HASH_KEY_STRING)); + svn_hash_sets(traversal_info->externals_new, relpath, + svn__apr_hash_index_val(hi)); + + svn_hash_sets(traversal_info->depths, relpath, + svn_hash_gets(ambient_depths, node_abspath)); } return SVN_NO_ERROR; @@ -606,6 +601,34 @@ svn_wc_create_tmp_file(apr_file_t **fp, pool); } +svn_error_t * +svn_wc_create_tmp_file2(apr_file_t **fp, + const char **new_name, + const char *path, + svn_io_file_del_t delete_when, + apr_pool_t *pool) +{ + svn_wc_context_t *wc_ctx; + const char *local_abspath; + const char *temp_dir; + svn_error_t *err; + + SVN_ERR_ASSERT(fp || new_name); + + SVN_ERR(svn_wc_context_create(&wc_ctx, NULL /* config */, pool, pool)); + + SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool)); + err = svn_wc__get_tmpdir(&temp_dir, wc_ctx, local_abspath, pool, pool); + err = svn_error_compose_create(err, svn_wc_context_destroy(wc_ctx)); + if (err) + return svn_error_trace(err); + + SVN_ERR(svn_io_open_unique_file3(fp, new_name, temp_dir, + delete_when, pool, pool)); + + return SVN_NO_ERROR; +} + /*** From adm_ops.c ***/ svn_error_t * @@ -688,9 +711,8 @@ svn_wc_queue_committed(svn_wc_committed_queue_t **queue, const svn_checksum_t *md5_checksum; if (digest) - md5_checksum = svn_checksum__from_digest( - digest, svn_checksum_md5, - svn_wc__get_committed_queue_pool(*queue)); + md5_checksum = svn_checksum__from_digest_md5( + digest, svn_wc__get_committed_queue_pool(*queue)); else md5_checksum = NULL; @@ -748,7 +770,7 @@ svn_wc_process_committed4(const char *path, new_date = 0; if (digest) - md5_checksum = svn_checksum__from_digest(digest, svn_checksum_md5, pool); + md5_checksum = svn_checksum__from_digest_md5(digest, pool); else md5_checksum = NULL; @@ -903,6 +925,18 @@ svn_wc_delete(const char *path, } svn_error_t * +svn_wc_add_from_disk(svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *scratch_pool) +{ + SVN_ERR(svn_wc_add_from_disk2(wc_ctx, local_abspath, NULL, + notify_func, notify_baton, scratch_pool)); + return SVN_NO_ERROR; +} + +svn_error_t * svn_wc_add3(const char *path, svn_wc_adm_access_t *parent_access, svn_depth_t depth, @@ -930,10 +964,13 @@ svn_wc_add3(const char *path, /* Make sure the caller gets the new access baton in the set. */ if (svn_wc__adm_retrieve_internal2(wc_db, local_abspath, pool) == NULL) { - svn_wc__db_kind_t kind; + svn_node_kind_t kind; - SVN_ERR(svn_wc__db_read_kind(&kind, wc_db, local_abspath, FALSE, pool)); - if (kind == svn_wc__db_kind_dir) + SVN_ERR(svn_wc__db_read_kind(&kind, wc_db, local_abspath, + FALSE /* allow_missing */, + TRUE /* show_deleted */, + FALSE /* show_hidden */, pool)); + if (kind == svn_node_dir) { svn_wc_adm_access_t *adm_access; @@ -1907,6 +1944,43 @@ static struct svn_wc_diff_callbacks4_t diff_callbacks3_wrapper = { wrap_4to3_dir_closed }; + +svn_error_t * +svn_wc_get_diff_editor6(const svn_delta_editor_t **editor, + void **edit_baton, + svn_wc_context_t *wc_ctx, + const char *anchor_abspath, + const char *target, + svn_depth_t depth, + svn_boolean_t ignore_ancestry, + svn_boolean_t show_copies_as_adds, + svn_boolean_t use_git_diff_format, + svn_boolean_t use_text_base, + svn_boolean_t reverse_order, + svn_boolean_t server_performs_filtering, + const apr_array_header_t *changelist_filter, + const svn_wc_diff_callbacks4_t *callbacks, + void *callback_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc__get_diff_editor(editor, edit_baton, + wc_ctx, + anchor_abspath, target, + depth, + ignore_ancestry, show_copies_as_adds, + use_git_diff_format, use_text_base, + reverse_order, server_performs_filtering, + changelist_filter, + callbacks, callback_baton, + cancel_func, cancel_baton, + result_pool, scratch_pool)); +} + + svn_error_t * svn_wc_get_diff_editor5(svn_wc_adm_access_t *anchor, const char *target, @@ -2277,8 +2351,7 @@ svn_wc_parse_externals_description(apr_hash_t **externals_p, svn_wc_external_item_t *item; item = APR_ARRAY_IDX(list, i, svn_wc_external_item_t *); - apr_hash_set(*externals_p, item->target_dir, - APR_HASH_KEY_STRING, item); + svn_hash_sets(*externals_p, item->target_dir, item); } } return SVN_NO_ERROR; @@ -2432,27 +2505,36 @@ svn_wc_merge_props2(svn_wc_notify_state_t *state, { const char *local_abspath; svn_error_t *err; + svn_wc_context_t *wc_ctx; struct conflict_func_1to2_baton conflict_wrapper; + if (base_merge && !dry_run) + return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL, + U_("base_merge=TRUE is no longer supported; " + "see notes/api-errata/1.7/wc006.txt")); + SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool)); conflict_wrapper.inner_func = conflict_func; conflict_wrapper.inner_baton = conflict_baton; - err = svn_wc__perform_props_merge(state, - svn_wc__adm_get_db(adm_access), - local_abspath, - NULL /* left_version */, - NULL /* right_version */, - baseprops, - propchanges, - base_merge, - dry_run, - conflict_func ? conflict_func_1to2_wrapper - : NULL, - &conflict_wrapper, - NULL, NULL, - scratch_pool); + SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL, + svn_wc__adm_get_db(adm_access), + scratch_pool)); + + err = svn_wc_merge_props3(state, + wc_ctx, + local_abspath, + NULL /* left_version */, + NULL /* right_version */, + baseprops, + propchanges, + dry_run, + conflict_func ? conflict_func_1to2_wrapper + : NULL, + &conflict_wrapper, + NULL, NULL, + scratch_pool); if (err) switch(err->apr_err) @@ -2462,7 +2544,9 @@ svn_wc_merge_props2(svn_wc_notify_state_t *state, err->apr_err = SVN_ERR_UNVERSIONED_RESOURCE; break; } - return svn_error_trace(err); + return svn_error_trace( + svn_error_compose_create(err, + svn_wc_context_destroy(wc_ctx))); } svn_error_t * @@ -2585,6 +2669,47 @@ status4_wrapper_func(void *baton, return (*swb->old_func)(swb->old_baton, path, dup, scratch_pool); } + +svn_error_t * +svn_wc_get_status_editor5(const svn_delta_editor_t **editor, + void **edit_baton, + void **set_locks_baton, + svn_revnum_t *edit_revision, + svn_wc_context_t *wc_ctx, + const char *anchor_abspath, + const char *target_basename, + svn_depth_t depth, + svn_boolean_t get_all, + svn_boolean_t no_ignore, + svn_boolean_t depth_as_sticky, + svn_boolean_t server_performs_filtering, + const apr_array_header_t *ignore_patterns, + svn_wc_status_func4_t status_func, + void *status_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc__get_status_editor(editor, edit_baton, + set_locks_baton, + edit_revision, + wc_ctx, + anchor_abspath, + target_basename, + depth, + get_all, no_ignore, + depth_as_sticky, + server_performs_filtering, + ignore_patterns, + status_func, status_baton, + cancel_func, cancel_baton, + result_pool, + scratch_pool)); +} + + svn_error_t * svn_wc_get_status_editor4(const svn_delta_editor_t **editor, void **edit_baton, @@ -3016,8 +3141,7 @@ svn_wc_add_repos_file2(const char *dst_path, /* If the new file is special, then we can simply open the given contents since it is already in normal form. */ - if (apr_hash_get(new_props, - SVN_PROP_SPECIAL, APR_HASH_KEY_STRING) != NULL) + if (svn_hash_gets(new_props, SVN_PROP_SPECIAL) != NULL) { SVN_ERR(svn_stream_open_readonly(&new_contents, new_text_path, pool, pool)); @@ -3030,8 +3154,7 @@ svn_wc_add_repos_file2(const char *dst_path, apr_hash_t *keywords = NULL; svn_string_t *list; - list = apr_hash_get(new_props, - SVN_PROP_KEYWORDS, APR_HASH_KEY_STRING); + list = svn_hash_gets(new_props, SVN_PROP_KEYWORDS); if (list != NULL) { /* Since we are detranslating, all of the keyword values @@ -3045,9 +3168,8 @@ svn_wc_add_repos_file2(const char *dst_path, } svn_subst_eol_style_from_value(&eol_style, &eol_str, - apr_hash_get(new_props, - SVN_PROP_EOL_STYLE, - APR_HASH_KEY_STRING)); + svn_hash_gets(new_props, + SVN_PROP_EOL_STYLE)); if (svn_subst_translation_required(eol_style, eol_str, keywords, FALSE, FALSE)) @@ -3116,6 +3238,38 @@ svn_wc_get_actual_target(const char *path, return svn_error_trace(svn_wc_context_destroy(wc_ctx)); } +/* This function has no internal variant as its behavior on switched + non-directories is not what you would expect. But this happens to + be the legacy behavior of this function. */ +svn_error_t * +svn_wc_is_wc_root2(svn_boolean_t *wc_root, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *scratch_pool) +{ + svn_boolean_t is_root; + svn_boolean_t is_switched; + svn_node_kind_t kind; + svn_error_t *err; + SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath)); + + err = svn_wc__db_is_switched(&is_root, &is_switched, &kind, + wc_ctx->db, local_abspath, scratch_pool); + + if (err) + { + if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND && + err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY) + return svn_error_trace(err); + + return svn_error_create(SVN_ERR_ENTRY_NOT_FOUND, err, err->message); + } + + *wc_root = is_root || (kind == svn_node_dir && is_switched); + + return SVN_NO_ERROR; +} + svn_error_t * svn_wc_is_wc_root(svn_boolean_t *wc_root, const char *path, @@ -3154,6 +3308,59 @@ svn_wc_is_wc_root(svn_boolean_t *wc_root, return svn_error_trace(svn_wc_context_destroy(wc_ctx)); } + +svn_error_t * +svn_wc_get_update_editor4(const svn_delta_editor_t **editor, + void **edit_baton, + svn_revnum_t *target_revision, + svn_wc_context_t *wc_ctx, + const char *anchor_abspath, + const char *target_basename, + svn_boolean_t use_commit_times, + svn_depth_t depth, + svn_boolean_t depth_is_sticky, + svn_boolean_t allow_unver_obstructions, + svn_boolean_t adds_as_modification, + svn_boolean_t server_performs_filtering, + svn_boolean_t clean_checkout, + const char *diff3_cmd, + const apr_array_header_t *preserved_exts, + svn_wc_dirents_func_t fetch_dirents_func, + void *fetch_dirents_baton, + svn_wc_conflict_resolver_func2_t conflict_func, + void *conflict_baton, + svn_wc_external_update_t external_func, + void *external_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc__get_update_editor(editor, edit_baton, + target_revision, + wc_ctx, + anchor_abspath, + target_basename, NULL, + use_commit_times, + depth, depth_is_sticky, + allow_unver_obstructions, + adds_as_modification, + server_performs_filtering, + clean_checkout, + diff3_cmd, + preserved_exts, + fetch_dirents_func, fetch_dirents_baton, + conflict_func, conflict_baton, + external_func, external_baton, + cancel_func, cancel_baton, + notify_func, notify_baton, + result_pool, scratch_pool)); +} + + svn_error_t * svn_wc_get_update_editor3(svn_revnum_t *target_revision, svn_wc_adm_access_t *anchor, @@ -3288,6 +3495,56 @@ svn_wc_get_update_editor(svn_revnum_t *target_revision, traversal_info, pool); } + +svn_error_t * +svn_wc_get_switch_editor4(const svn_delta_editor_t **editor, + void **edit_baton, + svn_revnum_t *target_revision, + svn_wc_context_t *wc_ctx, + const char *anchor_abspath, + const char *target_basename, + const char *switch_url, + svn_boolean_t use_commit_times, + svn_depth_t depth, + svn_boolean_t depth_is_sticky, + svn_boolean_t allow_unver_obstructions, + svn_boolean_t server_performs_filtering, + const char *diff3_cmd, + const apr_array_header_t *preserved_exts, + svn_wc_dirents_func_t fetch_dirents_func, + void *fetch_dirents_baton, + svn_wc_conflict_resolver_func2_t conflict_func, + void *conflict_baton, + svn_wc_external_update_t external_func, + void *external_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc__get_switch_editor(editor, edit_baton, + target_revision, + wc_ctx, + anchor_abspath, target_basename, + switch_url, NULL, + use_commit_times, + depth, depth_is_sticky, + allow_unver_obstructions, + server_performs_filtering, + diff3_cmd, + preserved_exts, + fetch_dirents_func, fetch_dirents_baton, + conflict_func, conflict_baton, + external_func, external_baton, + cancel_func, cancel_baton, + notify_func, notify_baton, + result_pool, scratch_pool)); +} + + svn_error_t * svn_wc_get_switch_editor3(svn_revnum_t *target_revision, svn_wc_adm_access_t *anchor, @@ -3426,6 +3683,14 @@ svn_wc_get_switch_editor(svn_revnum_t *target_revision, } +svn_error_t * +svn_wc_external_item_create(const svn_wc_external_item2_t **item, + apr_pool_t *pool) +{ + *item = apr_pcalloc(pool, sizeof(svn_wc_external_item2_t)); + return SVN_NO_ERROR; +} + svn_wc_external_item_t * svn_wc_external_item_dup(const svn_wc_external_item_t *item, apr_pool_t *pool) @@ -3996,6 +4261,49 @@ svn_wc_copy(const char *src_path, /*** From merge.c ***/ svn_error_t * +svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome, + svn_wc_context_t *wc_ctx, + const char *left_abspath, + const char *right_abspath, + const char *target_abspath, + const char *left_label, + const char *right_label, + const char *target_label, + const svn_wc_conflict_version_t *left_version, + const svn_wc_conflict_version_t *right_version, + svn_boolean_t dry_run, + const char *diff3_cmd, + const apr_array_header_t *merge_options, + const apr_array_header_t *prop_diff, + svn_wc_conflict_resolver_func2_t conflict_func, + void *conflict_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc_merge5(merge_outcome, + NULL /* merge_props_outcome */, + wc_ctx, + left_abspath, + right_abspath, + target_abspath, + left_label, + right_label, + target_label, + left_version, + right_version, + dry_run, + diff3_cmd, + merge_options, + NULL /* original_props */, + prop_diff, + conflict_func, conflict_baton, + cancel_func, cancel_baton, + scratch_pool)); +} + +svn_error_t * svn_wc_merge3(enum svn_wc_merge_outcome_t *merge_outcome, const char *left, const char *right, @@ -4095,6 +4403,17 @@ svn_wc_merge(const char *left, /*** From util.c ***/ +svn_wc_conflict_version_t * +svn_wc_conflict_version_create(const char *repos_url, + const char *path_in_repos, + svn_revnum_t peg_rev, + svn_node_kind_t node_kind, + apr_pool_t *pool) +{ + return svn_wc_conflict_version_create2(repos_url, NULL, path_in_repos, + peg_rev, node_kind, pool); +} + svn_wc_conflict_description_t * svn_wc_conflict_description_create_text(const char *path, svn_wc_adm_access_t *adm_access, @@ -4218,3 +4537,46 @@ svn_wc_crop_tree(svn_wc_adm_access_t *anchor, return svn_error_trace(svn_wc_context_destroy(wc_ctx)); } + +svn_error_t * +svn_wc_move(svn_wc_context_t *wc_ctx, + const char *src_abspath, + const char *dst_abspath, + svn_boolean_t metadata_only, + svn_cancel_func_t cancel_func, + void *cancel_baton, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *scratch_pool) +{ + return svn_error_trace(svn_wc__move2(wc_ctx, src_abspath, dst_abspath, + metadata_only, + TRUE, /* allow_mixed_revisions */ + cancel_func, cancel_baton, + notify_func, notify_baton, + scratch_pool)); +} + +svn_error_t * +svn_wc_read_kind(svn_node_kind_t *kind, + svn_wc_context_t *wc_ctx, + const char *abspath, + svn_boolean_t show_hidden, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc_read_kind2(kind, + wc_ctx, abspath, + TRUE /* show_deleted */, + show_hidden, + scratch_pool)); + + /*if (db_kind == svn_node_dir) + *kind = svn_node_dir; + else if (db_kind == svn_node_file || db_kind == svn_node_symlink) + *kind = svn_node_file; + else + *kind = svn_node_none;*/ + + return SVN_NO_ERROR; +} |