Author: dannas
Date: Mon Apr 26 21:21:15 2010
New Revision: 938246
URL: http://svn.apache.org/viewvc?rev=938246&view=rev
Log:
Implmenent converter function for converting svn_wc_status3_t to
svn_wc_status2_t.
* subversion/include/private/svn_wc_private.h
(svn_wc__status2_from_3): Return svn_error_t * instead of
svn_wc_status2_t *. Return the new status in an out parameter
instead. We need to be able to return errors from the entry
fetching function. Add wc_ctx and local_abspath parameters to be
used when fetching the entry.
* subversion/libsvn_wc/deprecated.c
(status_4_wrapper_baton): Add wc_ctx field to be used when calling
svn_wc__status2_from_3().
(status4_wrapper_func): Track parameter and return value changes of
svn_wc__status2_from_3().
(svn_wc_get_status_editor4): Initialize wc_ctx field of the
wrapper_baton.
(svn_wc_status2): Track parameter and return value changes of
svn_wc__status2_from_3().
* subversion/libsvn_wc/util.c
(svn_wc__status2_from_3): Initialize the svn_wc_status2_t struct with
values from svn_wc_status3_t.
* subversion/libsvn_client/deprecated.c
(status4_wrapper_baton): Add wc_ctx field.
(status4_wrapper_func): Track parameter and return value changes of
svn_wc__status2_from_3().
(svn_client_status4): Initialize wc_ctx field of wrapper_baton.
Modified:
subversion/trunk/subversion/include/private/svn_wc_private.h
subversion/trunk/subversion/libsvn_client/deprecated.c
subversion/trunk/subversion/libsvn_wc/deprecated.c
subversion/trunk/subversion/libsvn_wc/util.c
Modified: subversion/trunk/subversion/include/private/svn_wc_private.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_wc_private.h?rev=938246&r1=938245&r2=938246&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_wc_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_wc_private.h Mon Apr 26
21:21:15 2010
@@ -248,9 +248,13 @@ svn_wc__cd_to_cd2(const svn_wc_conflict_
* Convert from svn_wc_status3_t to svn_wc_status2_t.
* Allocate the result in RESULT_POOL.
*/
-svn_wc_status2_t *
-svn_wc__status2_from_3(const svn_wc_status3_t *status,
- apr_pool_t *result_pool);
+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);
/**
Modified: subversion/trunk/subversion/libsvn_client/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=938246&r1=938245&r2=938246&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_client/deprecated.c Mon Apr 26 21:21:15
2010
@@ -1428,6 +1428,7 @@ svn_client_proplist(apr_array_header_t *
struct status4_wrapper_baton
{
svn_wc_status_func3_t old_func;
+ svn_wc_context_t *wc_ctx;
void *old_baton;
};
@@ -1439,8 +1440,12 @@ status4_wrapper_func(void *baton,
{
struct status4_wrapper_baton *swb = baton;
svn_wc_status2_t *dup;
+ const char *local_abspath;
- dup = svn_wc__status2_from_3(status, scratch_pool);
+ SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
+ SVN_ERR(svn_wc__status2_from_3(&dup, status, swb->wc_ctx,
+ local_abspath, scratch_pool,
+ scratch_pool));
return (*swb->old_func)(swb->old_baton, path, dup, scratch_pool);
}
@@ -1460,7 +1465,8 @@ svn_client_status4(svn_revnum_t *result_
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- struct status4_wrapper_baton swb = { status_func, status_baton };
+ struct status4_wrapper_baton swb = { status_func, ctx->wc_ctx,
+ status_baton };
return svn_client_status5(result_rev, path, revision, status4_wrapper_func,
&swb, depth, get_all, update, no_ignore,
Modified: subversion/trunk/subversion/libsvn_wc/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/deprecated.c?rev=938246&r1=938245&r2=938246&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_wc/deprecated.c Mon Apr 26 21:21:15 2010
@@ -2230,6 +2230,7 @@ struct status4_wrapper_baton
void *old_baton;
const char *anchor_abspath;
const char *anchor_relpath;
+ svn_wc_context_t *wc_ctx;
};
/* */
@@ -2243,7 +2244,8 @@ status4_wrapper_func(void *baton,
svn_wc_status2_t *dup;
const char *path = local_abspath;
- dup = svn_wc__status2_from_3(status, scratch_pool);
+ SVN_ERR(svn_wc__status2_from_3(&dup, status, swb->wc_ctx, local_abspath,
+ scratch_pool, scratch_pool));
if (swb->anchor_abspath != NULL)
{
@@ -2289,6 +2291,8 @@ svn_wc_get_status_editor4(const svn_delt
SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL /* config */,
wc_db, pool));
+ swb->wc_ctx = wc_ctx;
+
anchor_abspath = svn_wc__adm_access_abspath(anchor);
if (!svn_dirent_is_absolute(svn_wc_adm_access_path(anchor)))
@@ -2562,7 +2566,8 @@ svn_wc_status2(svn_wc_status2_t **status
pool));
SVN_ERR(svn_wc_status3(&stat3, wc_ctx, local_abspath, pool, pool));
- *status = svn_wc__status2_from_3(stat3, pool);
+ SVN_ERR(svn_wc__status2_from_3(status, stat3, wc_ctx, local_abspath,
+ pool, pool));
return svn_error_return(svn_wc_context_destroy(wc_ctx));
}
Modified: subversion/trunk/subversion/libsvn_wc/util.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c?rev=938246&r1=938245&r2=938246&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/util.c (original)
+++ subversion/trunk/subversion/libsvn_wc/util.c Mon Apr 26 21:21:15 2010
@@ -544,11 +544,46 @@ svn_wc__cd_to_cd2(const svn_wc_conflict_
return new_conflict;
}
-svn_wc_status2_t *
-svn_wc__status2_from_3(const svn_wc_status3_t *status,
- apr_pool_t *result_pool)
+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)
{
- /* ### As of r937468, status2_t and status3_t are no longer identical. We
- * ### need to extend this function to properly do the conversion. */
- return (svn_wc_status2_t *) svn_wc_dup_status3(status, result_pool);
+ const svn_wc_entry_t *entry;
+
+ if (old_status == NULL)
+ {
+ *status = NULL;
+ return SVN_NO_ERROR;
+ }
+
+ status = apr_pcalloc(result_pool, sizeof(*status));
+
+ SVN_ERR(svn_wc__get_entry(&entry, wc_ctx->db, local_abspath, TRUE,
+ svn_node_unknown, FALSE, result_pool,
+ scratch_pool));
+ (*status)->entry = entry;
+ (*status)->text_status = old_status->text_status;
+ (*status)->prop_status = old_status->prop_status;
+ (*status)->locked = old_status->locked;
+ (*status)->copied = old_status->copied;
+ (*status)->switched = old_status->switched;
+ (*status)->repos_text_status = old_status->repos_text_status;
+ (*status)->repos_prop_status = old_status->repos_prop_status;
+ (*status)->repos_lock = svn_lock_dup(old_status->repos_lock, result_pool);
+ (*status)->url = apr_pstrdup(result_pool, old_status->url);
+ (*status)->ood_last_cmt_rev = old_status->ood_last_cmt_rev;
+ (*status)->ood_last_cmt_date = old_status->ood_last_cmt_date;
+ (*status)->ood_kind = old_status->ood_kind;
+ (*status)->ood_last_cmt_author = old_status->ood_last_cmt_author;
+ (*status)->tree_conflict =
+ svn_wc__conflict_description_dup(old_status->tree_conflict, result_pool);
+ (*status)->file_external = old_status->file_external;
+ (*status)->pristine_text_status = old_status->pristine_text_status;
+ (*status)->pristine_prop_status = old_status->pristine_prop_status;
+
+ return SVN_NO_ERROR;
}