diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
commit | cf46733632c7279a9fd0fe6ce26f9185a4ae82a9 (patch) | |
tree | da27775a2161723ef342e91af41a8b51fedef405 /subversion/libsvn_wc/deprecated.c | |
parent | bb0ef45f7c46b0ae221b26265ef98a768c33f820 (diff) | |
download | subversion-tarball-master.tar.gz |
subversion-1.9.7HEADsubversion-1.9.7master
Diffstat (limited to 'subversion/libsvn_wc/deprecated.c')
-rw-r--r-- | subversion/libsvn_wc/deprecated.c | 304 |
1 files changed, 270 insertions, 34 deletions
diff --git a/subversion/libsvn_wc/deprecated.c b/subversion/libsvn_wc/deprecated.c index 79cdb30..dcb5e42 100644 --- a/subversion/libsvn_wc/deprecated.c +++ b/subversion/libsvn_wc/deprecated.c @@ -127,7 +127,7 @@ gather_traversal_info(svn_wc_context_t *wc_ctx, hi; hi = apr_hash_next(hi)) { - const char *node_abspath = svn__apr_hash_index_key(hi); + const char *node_abspath = apr_hash_this_key(hi); const char *relpath; relpath = svn_dirent_join(path, @@ -137,11 +137,11 @@ gather_traversal_info(svn_wc_context_t *wc_ctx, if (gather_as_old) svn_hash_sets(traversal_info->externals_old, relpath, - svn__apr_hash_index_val(hi)); + apr_hash_this_val(hi)); if (gather_as_new) svn_hash_sets(traversal_info->externals_new, relpath, - svn__apr_hash_index_val(hi)); + apr_hash_this_val(hi)); svn_hash_sets(traversal_info->depths, relpath, svn_hash_gets(ambient_depths, node_abspath)); @@ -652,6 +652,24 @@ svn_wc_get_pristine_contents(svn_stream_t **contents, return svn_error_trace(svn_wc_context_destroy(wc_ctx)); } +svn_error_t * +svn_wc_queue_committed3(svn_wc_committed_queue_t *queue, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_boolean_t recurse, + const apr_array_header_t *wcprop_changes, + svn_boolean_t remove_lock, + svn_boolean_t remove_changelist, + const svn_checksum_t *sha1_checksum, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc_queue_committed4(queue, wc_ctx, local_abspath, + recurse, TRUE /* is_committed */, + wcprop_changes, remove_lock, + remove_changelist, sha1_checksum, + scratch_pool)); +} svn_error_t * svn_wc_queue_committed2(svn_wc_committed_queue_t *queue, @@ -668,7 +686,9 @@ svn_wc_queue_committed2(svn_wc_committed_queue_t *queue, const char *local_abspath; const svn_checksum_t *sha1_checksum = NULL; - SVN_ERR(svn_wc_context_create(&wc_ctx, NULL, scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL, + svn_wc__adm_get_db(adm_access), + scratch_pool)); SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool)); if (md5_checksum != NULL) @@ -759,15 +779,11 @@ svn_wc_process_committed4(const char *path, const char *local_abspath; const svn_checksum_t *md5_checksum; const svn_checksum_t *sha1_checksum = NULL; - apr_time_t new_date; - apr_hash_t *wcprop_changes_hash; + svn_wc_context_t *wc_ctx; + svn_wc_committed_queue_t *queue; SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool)); - - if (rev_date) - SVN_ERR(svn_time_from_cstring(&new_date, rev_date, pool)); - else - new_date = 0; + SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL, db, pool)); if (digest) md5_checksum = svn_checksum__from_digest_md5(digest, pool); @@ -790,15 +806,20 @@ svn_wc_process_committed4(const char *path, SVN_ERR(err); } - wcprop_changes_hash = svn_wc__prop_array_to_hash(wcprop_changes, pool); - SVN_ERR(svn_wc__process_committed_internal(db, local_abspath, recurse, TRUE, - new_revnum, new_date, rev_author, - wcprop_changes_hash, - !remove_lock, !remove_changelist, - sha1_checksum, NULL, pool)); + queue = svn_wc_committed_queue_create(pool); + SVN_ERR(svn_wc_queue_committed3(queue, wc_ctx, local_abspath, recurse, + wcprop_changes, remove_lock, + remove_changelist, + sha1_checksum /* or NULL if not modified + or directory */, + pool)); + + SVN_ERR(svn_wc_process_committed_queue2(queue, wc_ctx, + new_revnum, rev_date, rev_author, + NULL, NULL /* cancel */, + pool)); - /* Run the log file(s) we just created. */ - return svn_error_trace(svn_wc__wq_run(db, local_abspath, NULL, NULL, pool)); + return svn_error_trace(svn_wc_context_destroy(wc_ctx)); } @@ -925,6 +946,19 @@ svn_wc_delete(const char *path, } svn_error_t * +svn_wc_add_from_disk2(svn_wc_context_t *wc_ctx, + const char *local_abspath, + const apr_hash_t *props, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *scratch_pool) +{ + SVN_ERR(svn_wc_add_from_disk3(wc_ctx, local_abspath, props, FALSE, + notify_func, notify_baton, scratch_pool)); + return SVN_NO_ERROR; +} + +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, @@ -1025,6 +1059,30 @@ svn_wc_add(const char *path, compat_call_notify_func, &nb, pool); } +/*** From revert.c ***/ +svn_error_t * +svn_wc_revert4(svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_depth_t depth, + svn_boolean_t use_commit_times, + const apr_array_header_t *changelist_filter, + 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_revert5(wc_ctx, local_abspath, + depth, + use_commit_times, + changelist_filter, + FALSE /* clear_changelists */, + FALSE /* metadata_only */, + cancel_func, cancel_baton, + notify_func, notify_baton, + scratch_pool)); +} + svn_error_t * svn_wc_revert3(const char *path, svn_wc_adm_access_t *parent_access, @@ -1966,16 +2024,37 @@ svn_wc_get_diff_editor6(const svn_delta_editor_t **editor, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { + const svn_diff_tree_processor_t *diff_processor; + + /* --git implies --show-copies-as-adds */ + if (use_git_diff_format) + show_copies_as_adds = TRUE; + + /* --show-copies-as-adds implies --notice-ancestry */ + if (show_copies_as_adds) + ignore_ancestry = FALSE; + + SVN_ERR(svn_wc__wrap_diff_callbacks(&diff_processor, + callbacks, callback_baton, TRUE, + result_pool, scratch_pool)); + + if (reverse_order) + diff_processor = svn_diff__tree_processor_reverse_create( + diff_processor, NULL, result_pool); + + if (! show_copies_as_adds) + diff_processor = svn_diff__tree_processor_copy_as_changed_create( + diff_processor, result_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, + ignore_ancestry, use_text_base, reverse_order, server_performs_filtering, changelist_filter, - callbacks, callback_baton, + diff_processor, cancel_func, cancel_baton, result_pool, scratch_pool)); } @@ -2633,6 +2712,146 @@ svn_wc_props_modified_p(svn_boolean_t *modified_p, } +svn_error_t * +svn_wc__status2_from_3(svn_wc_status2_t **status, + const svn_wc_status3_t *old_status, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + const svn_wc_entry_t *entry = NULL; + + if (old_status == NULL) + { + *status = NULL; + return SVN_NO_ERROR; + } + + *status = apr_pcalloc(result_pool, sizeof(**status)); + + if (old_status->versioned) + { + svn_error_t *err; + err= svn_wc__get_entry(&entry, wc_ctx->db, local_abspath, FALSE, + svn_node_unknown, result_pool, scratch_pool); + + if (err && err->apr_err == SVN_ERR_NODE_UNEXPECTED_KIND) + svn_error_clear(err); + else + SVN_ERR(err); + } + + (*status)->entry = entry; + (*status)->copied = old_status->copied; + (*status)->repos_lock = svn_lock_dup(old_status->repos_lock, result_pool); + + if (old_status->repos_relpath) + (*status)->url = svn_path_url_add_component2(old_status->repos_root_url, + old_status->repos_relpath, + result_pool); + (*status)->ood_last_cmt_rev = old_status->ood_changed_rev; + (*status)->ood_last_cmt_date = old_status->ood_changed_date; + (*status)->ood_kind = old_status->ood_kind; + (*status)->ood_last_cmt_author = old_status->ood_changed_author; + + if (old_status->conflicted) + { + const svn_wc_conflict_description2_t *tree_conflict2; + SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict2, wc_ctx, local_abspath, + scratch_pool, scratch_pool)); + (*status)->tree_conflict = svn_wc__cd2_to_cd(tree_conflict2, result_pool); + } + + (*status)->switched = old_status->switched; + + (*status)->text_status = old_status->node_status; + (*status)->prop_status = old_status->prop_status; + + (*status)->repos_text_status = old_status->repos_node_status; + (*status)->repos_prop_status = old_status->repos_prop_status; + + /* Some values might be inherited from properties */ + if (old_status->node_status == svn_wc_status_modified + || old_status->node_status == svn_wc_status_conflicted) + (*status)->text_status = old_status->text_status; + + /* (Currently a no-op, but just make sure it is ok) */ + if (old_status->repos_node_status == svn_wc_status_modified + || old_status->repos_node_status == svn_wc_status_conflicted) + (*status)->repos_text_status = old_status->repos_text_status; + + if (old_status->node_status == svn_wc_status_added) + (*status)->prop_status = svn_wc_status_none; /* No separate info */ + + /* Find pristine_text_status value */ + switch (old_status->text_status) + { + case svn_wc_status_none: + case svn_wc_status_normal: + case svn_wc_status_modified: + (*status)->pristine_text_status = old_status->text_status; + break; + case svn_wc_status_conflicted: + default: + /* ### Fetch compare data, or fall back to the documented + not retrieved behavior? */ + (*status)->pristine_text_status = svn_wc_status_none; + break; + } + + /* Find pristine_prop_status value */ + switch (old_status->prop_status) + { + case svn_wc_status_none: + case svn_wc_status_normal: + case svn_wc_status_modified: + if (old_status->node_status != svn_wc_status_added + && old_status->node_status != svn_wc_status_deleted + && old_status->node_status != svn_wc_status_replaced) + { + (*status)->pristine_prop_status = old_status->prop_status; + } + else + (*status)->pristine_prop_status = svn_wc_status_none; + break; + case svn_wc_status_conflicted: + default: + /* ### Fetch compare data, or fall back to the documented + not retrieved behavior? */ + (*status)->pristine_prop_status = svn_wc_status_none; + break; + } + + if (old_status->versioned + && old_status->conflicted + && old_status->node_status != svn_wc_status_obstructed + && (old_status->kind == svn_node_file + || old_status->node_status != svn_wc_status_missing)) + { + svn_boolean_t text_conflict_p, prop_conflict_p; + + /* The entry says there was a conflict, but the user might have + marked it as resolved by deleting the artifact files, so check + for that. */ + SVN_ERR(svn_wc__internal_conflicted_p(&text_conflict_p, + &prop_conflict_p, + NULL, + wc_ctx->db, local_abspath, + scratch_pool)); + + if (text_conflict_p) + (*status)->text_status = svn_wc_status_conflicted; + + if (prop_conflict_p) + (*status)->prop_status = svn_wc_status_conflicted; + } + + return SVN_NO_ERROR; +} + + + /*** From status.c ***/ struct status4_wrapper_baton @@ -2698,9 +2917,9 @@ svn_wc_get_status_editor5(const svn_delta_editor_t **editor, wc_ctx, anchor_abspath, target_basename, - depth, - get_all, no_ignore, - depth_as_sticky, + depth, get_all, + TRUE, /* check_working_copy */ + no_ignore, depth_as_sticky, server_performs_filtering, ignore_patterns, status_func, status_baton, @@ -4044,7 +4263,26 @@ svn_wc_relocate(const char *path, } -/*** From log.c ***/ +/*** From log.c / cleanup.c ***/ + +svn_error_t * +svn_wc_cleanup3(svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *scratch_pool) +{ + return svn_error_trace( + svn_wc_cleanup4(wc_ctx, + local_abspath, + TRUE /* break_locks */, + TRUE /* fix_recorded_timestamps */, + TRUE /* clear_dav_cache */, + TRUE /* clean_pristines */, + cancel_func, cancel_baton, + NULL, NULL /* notify */, + scratch_pool)); +} svn_error_t * svn_wc_cleanup2(const char *path, @@ -4570,13 +4808,11 @@ svn_wc_read_kind(svn_node_kind_t *kind, 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; +svn_wc_conflict_description2_t * +svn_wc__conflict_description2_dup(const svn_wc_conflict_description2_t *conflict, + apr_pool_t *pool) +{ + return svn_wc_conflict_description2_dup(conflict, pool); } |