summaryrefslogtreecommitdiff
path: root/subversion/libsvn_wc/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_wc/util.c')
-rw-r--r--subversion/libsvn_wc/util.c212
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,