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/util.c | |
parent | bb0ef45f7c46b0ae221b26265ef98a768c33f820 (diff) | |
download | subversion-tarball-master.tar.gz |
subversion-1.9.7HEADsubversion-1.9.7master
Diffstat (limited to 'subversion/libsvn_wc/util.c')
-rw-r--r-- | subversion/libsvn_wc/util.c | 212 |
1 files changed, 44 insertions, 168 deletions
diff --git a/subversion/libsvn_wc/util.c b/subversion/libsvn_wc/util.c index a527eda..7bb2179 100644 --- a/subversion/libsvn_wc/util.c +++ b/subversion/libsvn_wc/util.c @@ -248,9 +248,34 @@ svn_wc_conflict_description_create_tree2( return conflict; } +svn_wc_conflict_version_t * +svn_wc_conflict_version_create2(const char *repos_url, + const char *repos_uuid, + const char *repos_relpath, + svn_revnum_t revision, + svn_node_kind_t kind, + apr_pool_t *result_pool) +{ + svn_wc_conflict_version_t *version; + + version = apr_pcalloc(result_pool, sizeof(*version)); + + SVN_ERR_ASSERT_NO_RETURN(svn_uri_is_canonical(repos_url, result_pool) + && svn_relpath_is_canonical(repos_relpath) + && SVN_IS_VALID_REVNUM(revision) + /* ### repos_uuid can be NULL :( */); + + version->repos_url = repos_url; + version->peg_rev = revision; + version->path_in_repos = repos_relpath; + version->node_kind = kind; + version->repos_uuid = repos_uuid; + + return version; +} svn_wc_conflict_description2_t * -svn_wc__conflict_description2_dup(const svn_wc_conflict_description2_t *conflict, +svn_wc_conflict_description2_dup(const svn_wc_conflict_description2_t *conflict, apr_pool_t *pool) { svn_wc_conflict_description2_t *new_conflict; @@ -281,36 +306,27 @@ svn_wc__conflict_description2_dup(const svn_wc_conflict_description2_t *conflict new_conflict->src_right_version = svn_wc_conflict_version_dup(conflict->src_right_version, pool); - return new_conflict; -} + /* ### For property conflicts, cd2 stores prop_reject_abspath in + * ### their_abspath, and stores theirs_abspath in merged_file. */ + if (conflict->prop_reject_abspath) + new_conflict->prop_reject_abspath = new_conflict->their_abspath; + + if (conflict->prop_value_base) + new_conflict->prop_value_base = + svn_string_dup(conflict->prop_value_base, pool); + if (conflict->prop_value_working) + new_conflict->prop_value_working = + svn_string_dup(conflict->prop_value_working, pool); + if (conflict->prop_value_incoming_old) + new_conflict->prop_value_incoming_old = + svn_string_dup(conflict->prop_value_incoming_old, pool); + if (conflict->prop_value_incoming_new) + new_conflict->prop_value_incoming_new = + svn_string_dup(conflict->prop_value_incoming_new, pool); -svn_wc_conflict_version_t * -svn_wc_conflict_version_create2(const char *repos_url, - const char *repos_uuid, - const char *repos_relpath, - svn_revnum_t revision, - svn_node_kind_t kind, - apr_pool_t *result_pool) -{ - svn_wc_conflict_version_t *version; - - version = apr_pcalloc(result_pool, sizeof(*version)); - - SVN_ERR_ASSERT_NO_RETURN(svn_uri_is_canonical(repos_url, result_pool) - && svn_relpath_is_canonical(repos_relpath) - && SVN_IS_VALID_REVNUM(revision) - /* ### repos_uuid can be NULL :( */); - - version->repos_url = repos_url; - version->peg_rev = revision; - version->path_in_repos = repos_relpath; - version->node_kind = kind; - version->repos_uuid = repos_uuid; - - return version; + return new_conflict; } - svn_wc_conflict_version_t * svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version, apr_pool_t *result_pool) @@ -339,7 +355,6 @@ svn_wc_conflict_version_dup(const svn_wc_conflict_version_t *version, return new_version; } - svn_wc_conflict_description_t * svn_wc__cd2_to_cd(const svn_wc_conflict_description2_t *conflict, apr_pool_t *result_pool) @@ -403,145 +418,6 @@ svn_wc__cd2_to_cd(const svn_wc_conflict_description2_t *conflict, 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_conflict; - SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict, wc_ctx, local_abspath, - scratch_pool, scratch_pool)); - (*status)->tree_conflict = svn_wc__cd2_to_cd(tree_conflict, 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; -} - - -svn_error_t * svn_wc__fetch_kind_func(svn_node_kind_t *kind, void *baton, const char *path, |