diff options
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 a527eda51b93..7bb2179ad1d4 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, | 
