You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/11/23 05:53:47 UTC
svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc: status.c
update_editor.c util.c wc.h
Author: hwright
Date: Wed Nov 23 04:53:47 2011
New Revision: 1205287
URL: http://svn.apache.org/viewvc?rev=1205287&view=rev
Log:
Generalize the prop fetching shim handler in libsvn_wc, and use it with the
status editor.
This doesn't fix any tests, but does handle a few segfaults.
* subversion/libsvn_wc/util.c
(svn_wc__fetch_kind_func, svn_wc__fetch_props_func): New.
* subversion/libsvn_wc/wc.h
(svn_wc__shim_fetch_baton_t, svn_wc__fetch_kind_func,
svn_wc__fetch_props_func): New.
* subversion/libsvn_wc/update_editor.c
(fetch_baton, fetch_props_func, fetch_kind_func): Remove.
(make_editor): Update references.
* subversion/libsvn_wc/status.c
(svn_wc_get_status_editor5): Create a baton, and use the proper handlers for
the shims.
Modified:
subversion/trunk/subversion/libsvn_wc/status.c
subversion/trunk/subversion/libsvn_wc/update_editor.c
subversion/trunk/subversion/libsvn_wc/util.c
subversion/trunk/subversion/libsvn_wc/wc.h
Modified: subversion/trunk/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/status.c?rev=1205287&r1=1205286&r2=1205287&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/status.c (original)
+++ subversion/trunk/subversion/libsvn_wc/status.c Wed Nov 23 04:53:47 2011
@@ -2455,6 +2455,7 @@ svn_wc_get_status_editor5(const svn_delt
struct edit_baton *eb;
svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
void *inner_baton;
+ struct svn_wc__shim_fetch_baton_t *sfb;
const svn_delta_editor_t *inner_editor;
svn_delta_shim_callbacks_t *shim_callbacks =
svn_delta_shim_callbacks_default(result_pool);
@@ -2545,6 +2546,15 @@ svn_wc_get_status_editor5(const svn_delt
if (set_locks_baton)
*set_locks_baton = eb;
+ sfb = apr_palloc(result_pool, sizeof(*sfb));
+ sfb->db = wc_ctx->db;
+ sfb->base_abspath = eb->target_abspath;
+
+ shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
+ shim_callbacks->fetch_kind_baton = sfb;
+ shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
+ shim_callbacks->fetch_props_baton = sfb;
+
SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
shim_callbacks,
result_pool, scratch_pool));
Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/update_editor.c?rev=1205287&r1=1205286&r2=1205287&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/trunk/subversion/libsvn_wc/update_editor.c Wed Nov 23 04:53:47 2011
@@ -4719,55 +4719,6 @@ close_edit(void *edit_baton,
/*** Returning editors. ***/
-struct fetch_baton
-{
- svn_wc__db_t *db;
- const char *target_abspath;
-};
-
-static svn_error_t *
-fetch_props_func(apr_hash_t **props,
- void *baton,
- const char *path,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- struct fetch_baton *fpb = baton;
- const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
- scratch_pool);
- svn_error_t *err;
-
- err = svn_wc__db_read_props(props, fpb->db, local_abspath,
- result_pool, scratch_pool);
-
- /* If the path doesn't exist, just return an empty set of props. */
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- {
- svn_error_clear(err);
- *props = apr_hash_make(result_pool);
- }
- else if (err)
- return svn_error_trace(err);
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-fetch_kind_func(svn_kind_t *kind,
- void *baton,
- const char *path,
- apr_pool_t *scratch_pool)
-{
- struct fetch_baton *fpb = baton;
- const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
- scratch_pool);
-
- SVN_ERR(svn_wc__db_read_kind(kind, fpb->db, local_abspath, FALSE,
- scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
/* Helper for the three public editor-supplying functions. */
static svn_error_t *
make_editor(svn_revnum_t *target_revision,
@@ -4805,7 +4756,7 @@ make_editor(svn_revnum_t *target_revisio
svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
const svn_delta_editor_t *inner_editor;
const char *repos_root, *repos_uuid;
- struct fetch_baton *fpb;
+ struct svn_wc__shim_fetch_baton_t *sfb;
svn_delta_shim_callbacks_t *shim_callbacks =
svn_delta_shim_callbacks_default(edit_pool);
@@ -5035,14 +4986,14 @@ make_editor(svn_revnum_t *target_revisio
edit_baton,
result_pool));
- fpb = apr_palloc(result_pool, sizeof(*fpb));
- fpb->db = db;
- fpb->target_abspath = eb->target_abspath;
-
- shim_callbacks->fetch_kind_func = fetch_kind_func;
- shim_callbacks->fetch_kind_baton = fpb;
- shim_callbacks->fetch_props_func = fetch_props_func;
- shim_callbacks->fetch_props_baton = fpb;
+ sfb = apr_palloc(result_pool, sizeof(*sfb));
+ sfb->db = db;
+ sfb->base_abspath = eb->target_abspath;
+
+ shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
+ shim_callbacks->fetch_kind_baton = sfb;
+ shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
+ shim_callbacks->fetch_props_baton = sfb;
SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor, *edit_baton,
shim_callbacks, result_pool, scratch_pool));
Modified: subversion/trunk/subversion/libsvn_wc/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c?rev=1205287&r1=1205286&r2=1205287&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/util.c (original)
+++ subversion/trunk/subversion/libsvn_wc/util.c Wed Nov 23 04:53:47 2011
@@ -533,3 +533,48 @@ svn_wc__status2_from_3(svn_wc_status2_t
return SVN_NO_ERROR;
}
+
+
+svn_error_t *
+svn_wc__fetch_kind_func(svn_kind_t *kind,
+ void *baton,
+ const char *path,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__shim_fetch_baton_t *sfb = baton;
+ const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
+ scratch_pool);
+
+ SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath, FALSE,
+ scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
+svn_wc__fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ struct svn_wc__shim_fetch_baton_t *sfb = baton;
+ const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
+ scratch_pool);
+ svn_error_t *err;
+
+ err = svn_wc__db_read_props(props, sfb->db, local_abspath,
+ result_pool, scratch_pool);
+
+ /* If the path doesn't exist, just return an empty set of props. */
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
Modified: subversion/trunk/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc.h?rev=1205287&r1=1205286&r2=1205287&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc.h Wed Nov 23 04:53:47 2011
@@ -724,6 +724,30 @@ svn_wc__perform_file_merge(svn_skel_t **
apr_pool_t *scratch_pool);
+/* Couple of random helpers for the Ev2 shims.
+ ### These will eventually be obsoleted and removed. */
+struct svn_wc__shim_fetch_baton_t
+{
+ svn_wc__db_t *db;
+ const char *base_abspath;
+};
+
+/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
+svn_error_t *
+svn_wc__fetch_kind_func(svn_kind_t *kind,
+ void *baton,
+ const char *path,
+ apr_pool_t *scratch_pool);
+
+/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
+svn_error_t *
+svn_wc__fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Re: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
status.c update_editor.c util.c wc.h
Posted by Hyrum K Wright <hy...@wandisco.com>.
On Wed, Nov 23, 2011 at 2:36 AM, Bert Huijben <be...@qqmail.nl> wrote:
>
>
>> -----Original Message-----
>> From: hwright@apache.org [mailto:hwright@apache.org]
>> Sent: woensdag 23 november 2011 5:54
>> To: commits@subversion.apache.org
>> Subject: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
>> status.c update_editor.c util.c wc.h
>>
>> Author: hwright
>> Date: Wed Nov 23 04:53:47 2011
>> New Revision: 1205287
>>
>> URL: http://svn.apache.org/viewvc?rev=1205287&view=rev
>> Log:
>> Generalize the prop fetching shim handler in libsvn_wc, and use it with the
>> status editor.
>>
>> This doesn't fix any tests, but does handle a few segfaults.
>>
>> * subversion/libsvn_wc/util.c
>> (svn_wc__fetch_kind_func, svn_wc__fetch_props_func): New.
>>
>> * subversion/libsvn_wc/wc.h
>> (svn_wc__shim_fetch_baton_t, svn_wc__fetch_kind_func,
>> svn_wc__fetch_props_func): New.
>>
>> * subversion/libsvn_wc/update_editor.c
>> (fetch_baton, fetch_props_func, fetch_kind_func): Remove.
>> (make_editor): Update references.
>>
>> * subversion/libsvn_wc/status.c
>> (svn_wc_get_status_editor5): Create a baton, and use the proper handlers
>> for
>> the shims.
>>
>> Modified:
>> subversion/trunk/subversion/libsvn_wc/status.c
>> subversion/trunk/subversion/libsvn_wc/update_editor.c
>> subversion/trunk/subversion/libsvn_wc/util.c
>> subversion/trunk/subversion/libsvn_wc/wc.h
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/status.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/stat
>> us.c?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/status.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/status.c Wed Nov 23 04:53:47
>> 2011
>> @@ -2455,6 +2455,7 @@ svn_wc_get_status_editor5(const svn_delt
>> struct edit_baton *eb;
>> svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
>> void *inner_baton;
>> + struct svn_wc__shim_fetch_baton_t *sfb;
>> const svn_delta_editor_t *inner_editor;
>> svn_delta_shim_callbacks_t *shim_callbacks =
>> svn_delta_shim_callbacks_default(result_pool);
>> @@ -2545,6 +2546,15 @@ svn_wc_get_status_editor5(const svn_delt
>> if (set_locks_baton)
>> *set_locks_baton = eb;
>>
>> + sfb = apr_palloc(result_pool, sizeof(*sfb));
>> + sfb->db = wc_ctx->db;
>> + sfb->base_abspath = eb->target_abspath;
>> +
>> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
>> + shim_callbacks->fetch_kind_baton = sfb;
>> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
>> + shim_callbacks->fetch_props_baton = sfb;
>> +
>> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
>> *edit_baton,
>> shim_callbacks,
>> result_pool, scratch_pool));
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/upd
>> ate_editor.c?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/update_editor.c Wed Nov 23
>> 04:53:47 2011
>> @@ -4719,55 +4719,6 @@ close_edit(void *edit_baton,
>>
>
>> /*** Returning editors. ***/
>>
>> -struct fetch_baton
>> -{
>> - svn_wc__db_t *db;
>> - const char *target_abspath;
>> -};
>> -
>> -static svn_error_t *
>> -fetch_props_func(apr_hash_t **props,
>> - void *baton,
>> - const char *path,
>> - apr_pool_t *result_pool,
>> - apr_pool_t *scratch_pool)
>> -{
>> - struct fetch_baton *fpb = baton;
>> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
>> - scratch_pool);
>> - svn_error_t *err;
>> -
>> - err = svn_wc__db_read_props(props, fpb->db, local_abspath,
>> - result_pool, scratch_pool);
>> -
>> - /* If the path doesn't exist, just return an empty set of props. */
>> - if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
>> - {
>> - svn_error_clear(err);
>> - *props = apr_hash_make(result_pool);
>> - }
>> - else if (err)
>> - return svn_error_trace(err);
>> -
>> - return SVN_NO_ERROR;
>> -}
>> -
>> -static svn_error_t *
>> -fetch_kind_func(svn_kind_t *kind,
>> - void *baton,
>> - const char *path,
>> - apr_pool_t *scratch_pool)
>> -{
>> - struct fetch_baton *fpb = baton;
>> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
>> - scratch_pool);
>> -
>> - SVN_ERR(svn_wc__db_read_kind(kind, fpb->db, local_abspath, FALSE,
>> - scratch_pool));
>> -
>> - return SVN_NO_ERROR;
>> -}
>> -
>> /* Helper for the three public editor-supplying functions. */
>> static svn_error_t *
>> make_editor(svn_revnum_t *target_revision,
>> @@ -4805,7 +4756,7 @@ make_editor(svn_revnum_t *target_revisio
>> svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
>> const svn_delta_editor_t *inner_editor;
>> const char *repos_root, *repos_uuid;
>> - struct fetch_baton *fpb;
>> + struct svn_wc__shim_fetch_baton_t *sfb;
>> svn_delta_shim_callbacks_t *shim_callbacks =
>> svn_delta_shim_callbacks_default(edit_pool);
>>
>> @@ -5035,14 +4986,14 @@ make_editor(svn_revnum_t *target_revisio
>> edit_baton,
>> result_pool));
>>
>> - fpb = apr_palloc(result_pool, sizeof(*fpb));
>> - fpb->db = db;
>> - fpb->target_abspath = eb->target_abspath;
>> -
>> - shim_callbacks->fetch_kind_func = fetch_kind_func;
>> - shim_callbacks->fetch_kind_baton = fpb;
>> - shim_callbacks->fetch_props_func = fetch_props_func;
>> - shim_callbacks->fetch_props_baton = fpb;
>> + sfb = apr_palloc(result_pool, sizeof(*sfb));
>> + sfb->db = db;
>> + sfb->base_abspath = eb->target_abspath;
>> +
>> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
>> + shim_callbacks->fetch_kind_baton = sfb;
>> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
>> + shim_callbacks->fetch_props_baton = sfb;
>>
>> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
>> *edit_baton,
>> shim_callbacks, result_pool, scratch_pool));
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/util.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c
>> ?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/util.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/util.c Wed Nov 23 04:53:47 2011
>> @@ -533,3 +533,48 @@ svn_wc__status2_from_3(svn_wc_status2_t
>>
>> return SVN_NO_ERROR;
>> }
>> +
>> +
>> +svn_error_t *
>> +svn_wc__fetch_kind_func(svn_kind_t *kind,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *scratch_pool)
>> +{
>> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
>> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
>> + scratch_pool);
>> +
>> + SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath, FALSE,
>> + scratch_pool));
>> +
>> + return SVN_NO_ERROR;
>> +}
>> +
>> +
>> +svn_error_t *
>> +svn_wc__fetch_props_func(apr_hash_t **props,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *result_pool,
>> + apr_pool_t *scratch_pool)
>> +{
>> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
>> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
>> + scratch_pool);
>> + svn_error_t *err;
>> +
>> + err = svn_wc__db_read_props(props, sfb->db, local_abspath,
>> + result_pool, scratch_pool);
>
> At least in the update editor you want to fetch the BASE (op_depth 0) properties from here. I think you need the pristine properties in most other cases.
>
> But this code fetches the local properties from ACTUAL.
I think r1208833 should address your concern.
-Hyrum
>> +
>> + /* If the path doesn't exist, just return an empty set of props. */
>> + if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
>> + {
>> + svn_error_clear(err);
>> + *props = apr_hash_make(result_pool);
>> + }
>> + else if (err)
>> + return svn_error_trace(err);
>> +
>> + return SVN_NO_ERROR;
>> +}
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/wc.h
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc.h
>> ?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/wc.h (original)
>> +++ subversion/trunk/subversion/libsvn_wc/wc.h Wed Nov 23 04:53:47 2011
>> @@ -724,6 +724,30 @@ svn_wc__perform_file_merge(svn_skel_t **
>> apr_pool_t *scratch_pool);
>>
>>
>> +/* Couple of random helpers for the Ev2 shims.
>> + ### These will eventually be obsoleted and removed. */
>> +struct svn_wc__shim_fetch_baton_t
>> +{
>> + svn_wc__db_t *db;
>> + const char *base_abspath;
>> +};
>> +
>> +/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
>> +svn_error_t *
>> +svn_wc__fetch_kind_func(svn_kind_t *kind,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *scratch_pool);
>> +
>> +/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
>> +svn_error_t *
>> +svn_wc__fetch_props_func(apr_hash_t **props,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *result_pool,
>> + apr_pool_t *scratch_pool);
>> +
>> +
>> #ifdef __cplusplus
>> }
>> #endif /* __cplusplus */
>>
>
>
>
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Re: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
status.c update_editor.c util.c wc.h
Posted by Hyrum K Wright <hy...@wandisco.com>.
On Wed, Nov 23, 2011 at 2:36 AM, Bert Huijben <be...@qqmail.nl> wrote:
>
>
>> -----Original Message-----
>> From: hwright@apache.org [mailto:hwright@apache.org]
>> Sent: woensdag 23 november 2011 5:54
>> To: commits@subversion.apache.org
>> Subject: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
>> status.c update_editor.c util.c wc.h
>>
>> Author: hwright
>> Date: Wed Nov 23 04:53:47 2011
>> New Revision: 1205287
>>
>> URL: http://svn.apache.org/viewvc?rev=1205287&view=rev
>> Log:
>> Generalize the prop fetching shim handler in libsvn_wc, and use it with the
>> status editor.
>>
>> This doesn't fix any tests, but does handle a few segfaults.
>>
>> * subversion/libsvn_wc/util.c
>> (svn_wc__fetch_kind_func, svn_wc__fetch_props_func): New.
>>
>> * subversion/libsvn_wc/wc.h
>> (svn_wc__shim_fetch_baton_t, svn_wc__fetch_kind_func,
>> svn_wc__fetch_props_func): New.
>>
>> * subversion/libsvn_wc/update_editor.c
>> (fetch_baton, fetch_props_func, fetch_kind_func): Remove.
>> (make_editor): Update references.
>>
>> * subversion/libsvn_wc/status.c
>> (svn_wc_get_status_editor5): Create a baton, and use the proper handlers
>> for
>> the shims.
>>
>> Modified:
>> subversion/trunk/subversion/libsvn_wc/status.c
>> subversion/trunk/subversion/libsvn_wc/update_editor.c
>> subversion/trunk/subversion/libsvn_wc/util.c
>> subversion/trunk/subversion/libsvn_wc/wc.h
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/status.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/stat
>> us.c?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/status.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/status.c Wed Nov 23 04:53:47
>> 2011
>> @@ -2455,6 +2455,7 @@ svn_wc_get_status_editor5(const svn_delt
>> struct edit_baton *eb;
>> svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
>> void *inner_baton;
>> + struct svn_wc__shim_fetch_baton_t *sfb;
>> const svn_delta_editor_t *inner_editor;
>> svn_delta_shim_callbacks_t *shim_callbacks =
>> svn_delta_shim_callbacks_default(result_pool);
>> @@ -2545,6 +2546,15 @@ svn_wc_get_status_editor5(const svn_delt
>> if (set_locks_baton)
>> *set_locks_baton = eb;
>>
>> + sfb = apr_palloc(result_pool, sizeof(*sfb));
>> + sfb->db = wc_ctx->db;
>> + sfb->base_abspath = eb->target_abspath;
>> +
>> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
>> + shim_callbacks->fetch_kind_baton = sfb;
>> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
>> + shim_callbacks->fetch_props_baton = sfb;
>> +
>> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
>> *edit_baton,
>> shim_callbacks,
>> result_pool, scratch_pool));
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/upd
>> ate_editor.c?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/update_editor.c Wed Nov 23
>> 04:53:47 2011
>> @@ -4719,55 +4719,6 @@ close_edit(void *edit_baton,
>>
>
>> /*** Returning editors. ***/
>>
>> -struct fetch_baton
>> -{
>> - svn_wc__db_t *db;
>> - const char *target_abspath;
>> -};
>> -
>> -static svn_error_t *
>> -fetch_props_func(apr_hash_t **props,
>> - void *baton,
>> - const char *path,
>> - apr_pool_t *result_pool,
>> - apr_pool_t *scratch_pool)
>> -{
>> - struct fetch_baton *fpb = baton;
>> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
>> - scratch_pool);
>> - svn_error_t *err;
>> -
>> - err = svn_wc__db_read_props(props, fpb->db, local_abspath,
>> - result_pool, scratch_pool);
>> -
>> - /* If the path doesn't exist, just return an empty set of props. */
>> - if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
>> - {
>> - svn_error_clear(err);
>> - *props = apr_hash_make(result_pool);
>> - }
>> - else if (err)
>> - return svn_error_trace(err);
>> -
>> - return SVN_NO_ERROR;
>> -}
>> -
>> -static svn_error_t *
>> -fetch_kind_func(svn_kind_t *kind,
>> - void *baton,
>> - const char *path,
>> - apr_pool_t *scratch_pool)
>> -{
>> - struct fetch_baton *fpb = baton;
>> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
>> - scratch_pool);
>> -
>> - SVN_ERR(svn_wc__db_read_kind(kind, fpb->db, local_abspath, FALSE,
>> - scratch_pool));
>> -
>> - return SVN_NO_ERROR;
>> -}
>> -
>> /* Helper for the three public editor-supplying functions. */
>> static svn_error_t *
>> make_editor(svn_revnum_t *target_revision,
>> @@ -4805,7 +4756,7 @@ make_editor(svn_revnum_t *target_revisio
>> svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
>> const svn_delta_editor_t *inner_editor;
>> const char *repos_root, *repos_uuid;
>> - struct fetch_baton *fpb;
>> + struct svn_wc__shim_fetch_baton_t *sfb;
>> svn_delta_shim_callbacks_t *shim_callbacks =
>> svn_delta_shim_callbacks_default(edit_pool);
>>
>> @@ -5035,14 +4986,14 @@ make_editor(svn_revnum_t *target_revisio
>> edit_baton,
>> result_pool));
>>
>> - fpb = apr_palloc(result_pool, sizeof(*fpb));
>> - fpb->db = db;
>> - fpb->target_abspath = eb->target_abspath;
>> -
>> - shim_callbacks->fetch_kind_func = fetch_kind_func;
>> - shim_callbacks->fetch_kind_baton = fpb;
>> - shim_callbacks->fetch_props_func = fetch_props_func;
>> - shim_callbacks->fetch_props_baton = fpb;
>> + sfb = apr_palloc(result_pool, sizeof(*sfb));
>> + sfb->db = db;
>> + sfb->base_abspath = eb->target_abspath;
>> +
>> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
>> + shim_callbacks->fetch_kind_baton = sfb;
>> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
>> + shim_callbacks->fetch_props_baton = sfb;
>>
>> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
>> *edit_baton,
>> shim_callbacks, result_pool, scratch_pool));
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/util.c
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c
>> ?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/util.c (original)
>> +++ subversion/trunk/subversion/libsvn_wc/util.c Wed Nov 23 04:53:47 2011
>> @@ -533,3 +533,48 @@ svn_wc__status2_from_3(svn_wc_status2_t
>>
>> return SVN_NO_ERROR;
>> }
>> +
>> +
>> +svn_error_t *
>> +svn_wc__fetch_kind_func(svn_kind_t *kind,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *scratch_pool)
>> +{
>> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
>> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
>> + scratch_pool);
>> +
>> + SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath, FALSE,
>> + scratch_pool));
>> +
>> + return SVN_NO_ERROR;
>> +}
>> +
>> +
>> +svn_error_t *
>> +svn_wc__fetch_props_func(apr_hash_t **props,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *result_pool,
>> + apr_pool_t *scratch_pool)
>> +{
>> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
>> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
>> + scratch_pool);
>> + svn_error_t *err;
>> +
>> + err = svn_wc__db_read_props(props, sfb->db, local_abspath,
>> + result_pool, scratch_pool);
>
> At least in the update editor you want to fetch the BASE (op_depth 0) properties from here. I think you need the pristine properties in most other cases.
>
> But this code fetches the local properties from ACTUAL.
I think r1208833 should address your concern.
-Hyrum
>> +
>> + /* If the path doesn't exist, just return an empty set of props. */
>> + if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
>> + {
>> + svn_error_clear(err);
>> + *props = apr_hash_make(result_pool);
>> + }
>> + else if (err)
>> + return svn_error_trace(err);
>> +
>> + return SVN_NO_ERROR;
>> +}
>>
>> Modified: subversion/trunk/subversion/libsvn_wc/wc.h
>> URL:
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc.h
>> ?rev=1205287&r1=1205286&r2=1205287&view=diff
>> ==========================================================
>> ====================
>> --- subversion/trunk/subversion/libsvn_wc/wc.h (original)
>> +++ subversion/trunk/subversion/libsvn_wc/wc.h Wed Nov 23 04:53:47 2011
>> @@ -724,6 +724,30 @@ svn_wc__perform_file_merge(svn_skel_t **
>> apr_pool_t *scratch_pool);
>>
>>
>> +/* Couple of random helpers for the Ev2 shims.
>> + ### These will eventually be obsoleted and removed. */
>> +struct svn_wc__shim_fetch_baton_t
>> +{
>> + svn_wc__db_t *db;
>> + const char *base_abspath;
>> +};
>> +
>> +/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
>> +svn_error_t *
>> +svn_wc__fetch_kind_func(svn_kind_t *kind,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *scratch_pool);
>> +
>> +/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
>> +svn_error_t *
>> +svn_wc__fetch_props_func(apr_hash_t **props,
>> + void *baton,
>> + const char *path,
>> + apr_pool_t *result_pool,
>> + apr_pool_t *scratch_pool);
>> +
>> +
>> #ifdef __cplusplus
>> }
>> #endif /* __cplusplus */
>>
>
>
>
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
RE: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc: status.c update_editor.c util.c wc.h
Posted by Bert Huijben <be...@qqmail.nl>.
> -----Original Message-----
> From: hwright@apache.org [mailto:hwright@apache.org]
> Sent: woensdag 23 november 2011 5:54
> To: commits@subversion.apache.org
> Subject: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
> status.c update_editor.c util.c wc.h
>
> Author: hwright
> Date: Wed Nov 23 04:53:47 2011
> New Revision: 1205287
>
> URL: http://svn.apache.org/viewvc?rev=1205287&view=rev
> Log:
> Generalize the prop fetching shim handler in libsvn_wc, and use it with the
> status editor.
>
> This doesn't fix any tests, but does handle a few segfaults.
>
> * subversion/libsvn_wc/util.c
> (svn_wc__fetch_kind_func, svn_wc__fetch_props_func): New.
>
> * subversion/libsvn_wc/wc.h
> (svn_wc__shim_fetch_baton_t, svn_wc__fetch_kind_func,
> svn_wc__fetch_props_func): New.
>
> * subversion/libsvn_wc/update_editor.c
> (fetch_baton, fetch_props_func, fetch_kind_func): Remove.
> (make_editor): Update references.
>
> * subversion/libsvn_wc/status.c
> (svn_wc_get_status_editor5): Create a baton, and use the proper handlers
> for
> the shims.
>
> Modified:
> subversion/trunk/subversion/libsvn_wc/status.c
> subversion/trunk/subversion/libsvn_wc/update_editor.c
> subversion/trunk/subversion/libsvn_wc/util.c
> subversion/trunk/subversion/libsvn_wc/wc.h
>
> Modified: subversion/trunk/subversion/libsvn_wc/status.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/stat
> us.c?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/status.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/status.c Wed Nov 23 04:53:47
> 2011
> @@ -2455,6 +2455,7 @@ svn_wc_get_status_editor5(const svn_delt
> struct edit_baton *eb;
> svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
> void *inner_baton;
> + struct svn_wc__shim_fetch_baton_t *sfb;
> const svn_delta_editor_t *inner_editor;
> svn_delta_shim_callbacks_t *shim_callbacks =
> svn_delta_shim_callbacks_default(result_pool);
> @@ -2545,6 +2546,15 @@ svn_wc_get_status_editor5(const svn_delt
> if (set_locks_baton)
> *set_locks_baton = eb;
>
> + sfb = apr_palloc(result_pool, sizeof(*sfb));
> + sfb->db = wc_ctx->db;
> + sfb->base_abspath = eb->target_abspath;
> +
> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
> + shim_callbacks->fetch_kind_baton = sfb;
> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
> + shim_callbacks->fetch_props_baton = sfb;
> +
> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
> *edit_baton,
> shim_callbacks,
> result_pool, scratch_pool));
>
> Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/upd
> ate_editor.c?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/update_editor.c Wed Nov 23
> 04:53:47 2011
> @@ -4719,55 +4719,6 @@ close_edit(void *edit_baton,
>
> /*** Returning editors. ***/
>
> -struct fetch_baton
> -{
> - svn_wc__db_t *db;
> - const char *target_abspath;
> -};
> -
> -static svn_error_t *
> -fetch_props_func(apr_hash_t **props,
> - void *baton,
> - const char *path,
> - apr_pool_t *result_pool,
> - apr_pool_t *scratch_pool)
> -{
> - struct fetch_baton *fpb = baton;
> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
> - scratch_pool);
> - svn_error_t *err;
> -
> - err = svn_wc__db_read_props(props, fpb->db, local_abspath,
> - result_pool, scratch_pool);
> -
> - /* If the path doesn't exist, just return an empty set of props. */
> - if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
> - {
> - svn_error_clear(err);
> - *props = apr_hash_make(result_pool);
> - }
> - else if (err)
> - return svn_error_trace(err);
> -
> - return SVN_NO_ERROR;
> -}
> -
> -static svn_error_t *
> -fetch_kind_func(svn_kind_t *kind,
> - void *baton,
> - const char *path,
> - apr_pool_t *scratch_pool)
> -{
> - struct fetch_baton *fpb = baton;
> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
> - scratch_pool);
> -
> - SVN_ERR(svn_wc__db_read_kind(kind, fpb->db, local_abspath, FALSE,
> - scratch_pool));
> -
> - return SVN_NO_ERROR;
> -}
> -
> /* Helper for the three public editor-supplying functions. */
> static svn_error_t *
> make_editor(svn_revnum_t *target_revision,
> @@ -4805,7 +4756,7 @@ make_editor(svn_revnum_t *target_revisio
> svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
> const svn_delta_editor_t *inner_editor;
> const char *repos_root, *repos_uuid;
> - struct fetch_baton *fpb;
> + struct svn_wc__shim_fetch_baton_t *sfb;
> svn_delta_shim_callbacks_t *shim_callbacks =
> svn_delta_shim_callbacks_default(edit_pool);
>
> @@ -5035,14 +4986,14 @@ make_editor(svn_revnum_t *target_revisio
> edit_baton,
> result_pool));
>
> - fpb = apr_palloc(result_pool, sizeof(*fpb));
> - fpb->db = db;
> - fpb->target_abspath = eb->target_abspath;
> -
> - shim_callbacks->fetch_kind_func = fetch_kind_func;
> - shim_callbacks->fetch_kind_baton = fpb;
> - shim_callbacks->fetch_props_func = fetch_props_func;
> - shim_callbacks->fetch_props_baton = fpb;
> + sfb = apr_palloc(result_pool, sizeof(*sfb));
> + sfb->db = db;
> + sfb->base_abspath = eb->target_abspath;
> +
> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
> + shim_callbacks->fetch_kind_baton = sfb;
> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
> + shim_callbacks->fetch_props_baton = sfb;
>
> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
> *edit_baton,
> shim_callbacks, result_pool, scratch_pool));
>
> Modified: subversion/trunk/subversion/libsvn_wc/util.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c
> ?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/util.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/util.c Wed Nov 23 04:53:47 2011
> @@ -533,3 +533,48 @@ svn_wc__status2_from_3(svn_wc_status2_t
>
> return SVN_NO_ERROR;
> }
> +
> +
> +svn_error_t *
> +svn_wc__fetch_kind_func(svn_kind_t *kind,
> + void *baton,
> + const char *path,
> + apr_pool_t *scratch_pool)
> +{
> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
> + scratch_pool);
> +
> + SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath, FALSE,
> + scratch_pool));
> +
> + return SVN_NO_ERROR;
> +}
> +
> +
> +svn_error_t *
> +svn_wc__fetch_props_func(apr_hash_t **props,
> + void *baton,
> + const char *path,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
> + scratch_pool);
> + svn_error_t *err;
> +
> + err = svn_wc__db_read_props(props, sfb->db, local_abspath,
> + result_pool, scratch_pool);
At least in the update editor you want to fetch the BASE (op_depth 0) properties from here. I think you need the pristine properties in most other cases.
But this code fetches the local properties from ACTUAL.
> +
> + /* If the path doesn't exist, just return an empty set of props. */
> + if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
> + {
> + svn_error_clear(err);
> + *props = apr_hash_make(result_pool);
> + }
> + else if (err)
> + return svn_error_trace(err);
> +
> + return SVN_NO_ERROR;
> +}
>
> Modified: subversion/trunk/subversion/libsvn_wc/wc.h
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc.h
> ?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/wc.h (original)
> +++ subversion/trunk/subversion/libsvn_wc/wc.h Wed Nov 23 04:53:47 2011
> @@ -724,6 +724,30 @@ svn_wc__perform_file_merge(svn_skel_t **
> apr_pool_t *scratch_pool);
>
>
> +/* Couple of random helpers for the Ev2 shims.
> + ### These will eventually be obsoleted and removed. */
> +struct svn_wc__shim_fetch_baton_t
> +{
> + svn_wc__db_t *db;
> + const char *base_abspath;
> +};
> +
> +/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
> +svn_error_t *
> +svn_wc__fetch_kind_func(svn_kind_t *kind,
> + void *baton,
> + const char *path,
> + apr_pool_t *scratch_pool);
> +
> +/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
> +svn_error_t *
> +svn_wc__fetch_props_func(apr_hash_t **props,
> + void *baton,
> + const char *path,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool);
> +
> +
> #ifdef __cplusplus
> }
> #endif /* __cplusplus */
>
RE: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc: status.c update_editor.c util.c wc.h
Posted by Bert Huijben <be...@qqmail.nl>.
> -----Original Message-----
> From: hwright@apache.org [mailto:hwright@apache.org]
> Sent: woensdag 23 november 2011 5:54
> To: commits@subversion.apache.org
> Subject: svn commit: r1205287 - in /subversion/trunk/subversion/libsvn_wc:
> status.c update_editor.c util.c wc.h
>
> Author: hwright
> Date: Wed Nov 23 04:53:47 2011
> New Revision: 1205287
>
> URL: http://svn.apache.org/viewvc?rev=1205287&view=rev
> Log:
> Generalize the prop fetching shim handler in libsvn_wc, and use it with the
> status editor.
>
> This doesn't fix any tests, but does handle a few segfaults.
>
> * subversion/libsvn_wc/util.c
> (svn_wc__fetch_kind_func, svn_wc__fetch_props_func): New.
>
> * subversion/libsvn_wc/wc.h
> (svn_wc__shim_fetch_baton_t, svn_wc__fetch_kind_func,
> svn_wc__fetch_props_func): New.
>
> * subversion/libsvn_wc/update_editor.c
> (fetch_baton, fetch_props_func, fetch_kind_func): Remove.
> (make_editor): Update references.
>
> * subversion/libsvn_wc/status.c
> (svn_wc_get_status_editor5): Create a baton, and use the proper handlers
> for
> the shims.
>
> Modified:
> subversion/trunk/subversion/libsvn_wc/status.c
> subversion/trunk/subversion/libsvn_wc/update_editor.c
> subversion/trunk/subversion/libsvn_wc/util.c
> subversion/trunk/subversion/libsvn_wc/wc.h
>
> Modified: subversion/trunk/subversion/libsvn_wc/status.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/stat
> us.c?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/status.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/status.c Wed Nov 23 04:53:47
> 2011
> @@ -2455,6 +2455,7 @@ svn_wc_get_status_editor5(const svn_delt
> struct edit_baton *eb;
> svn_delta_editor_t *tree_editor = svn_delta_default_editor(result_pool);
> void *inner_baton;
> + struct svn_wc__shim_fetch_baton_t *sfb;
> const svn_delta_editor_t *inner_editor;
> svn_delta_shim_callbacks_t *shim_callbacks =
> svn_delta_shim_callbacks_default(result_pool);
> @@ -2545,6 +2546,15 @@ svn_wc_get_status_editor5(const svn_delt
> if (set_locks_baton)
> *set_locks_baton = eb;
>
> + sfb = apr_palloc(result_pool, sizeof(*sfb));
> + sfb->db = wc_ctx->db;
> + sfb->base_abspath = eb->target_abspath;
> +
> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
> + shim_callbacks->fetch_kind_baton = sfb;
> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
> + shim_callbacks->fetch_props_baton = sfb;
> +
> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
> *edit_baton,
> shim_callbacks,
> result_pool, scratch_pool));
>
> Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/upd
> ate_editor.c?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/update_editor.c Wed Nov 23
> 04:53:47 2011
> @@ -4719,55 +4719,6 @@ close_edit(void *edit_baton,
>
> /*** Returning editors. ***/
>
> -struct fetch_baton
> -{
> - svn_wc__db_t *db;
> - const char *target_abspath;
> -};
> -
> -static svn_error_t *
> -fetch_props_func(apr_hash_t **props,
> - void *baton,
> - const char *path,
> - apr_pool_t *result_pool,
> - apr_pool_t *scratch_pool)
> -{
> - struct fetch_baton *fpb = baton;
> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
> - scratch_pool);
> - svn_error_t *err;
> -
> - err = svn_wc__db_read_props(props, fpb->db, local_abspath,
> - result_pool, scratch_pool);
> -
> - /* If the path doesn't exist, just return an empty set of props. */
> - if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
> - {
> - svn_error_clear(err);
> - *props = apr_hash_make(result_pool);
> - }
> - else if (err)
> - return svn_error_trace(err);
> -
> - return SVN_NO_ERROR;
> -}
> -
> -static svn_error_t *
> -fetch_kind_func(svn_kind_t *kind,
> - void *baton,
> - const char *path,
> - apr_pool_t *scratch_pool)
> -{
> - struct fetch_baton *fpb = baton;
> - const char *local_abspath = svn_dirent_join(fpb->target_abspath, path,
> - scratch_pool);
> -
> - SVN_ERR(svn_wc__db_read_kind(kind, fpb->db, local_abspath, FALSE,
> - scratch_pool));
> -
> - return SVN_NO_ERROR;
> -}
> -
> /* Helper for the three public editor-supplying functions. */
> static svn_error_t *
> make_editor(svn_revnum_t *target_revision,
> @@ -4805,7 +4756,7 @@ make_editor(svn_revnum_t *target_revisio
> svn_delta_editor_t *tree_editor = svn_delta_default_editor(edit_pool);
> const svn_delta_editor_t *inner_editor;
> const char *repos_root, *repos_uuid;
> - struct fetch_baton *fpb;
> + struct svn_wc__shim_fetch_baton_t *sfb;
> svn_delta_shim_callbacks_t *shim_callbacks =
> svn_delta_shim_callbacks_default(edit_pool);
>
> @@ -5035,14 +4986,14 @@ make_editor(svn_revnum_t *target_revisio
> edit_baton,
> result_pool));
>
> - fpb = apr_palloc(result_pool, sizeof(*fpb));
> - fpb->db = db;
> - fpb->target_abspath = eb->target_abspath;
> -
> - shim_callbacks->fetch_kind_func = fetch_kind_func;
> - shim_callbacks->fetch_kind_baton = fpb;
> - shim_callbacks->fetch_props_func = fetch_props_func;
> - shim_callbacks->fetch_props_baton = fpb;
> + sfb = apr_palloc(result_pool, sizeof(*sfb));
> + sfb->db = db;
> + sfb->base_abspath = eb->target_abspath;
> +
> + shim_callbacks->fetch_kind_func = svn_wc__fetch_kind_func;
> + shim_callbacks->fetch_kind_baton = sfb;
> + shim_callbacks->fetch_props_func = svn_wc__fetch_props_func;
> + shim_callbacks->fetch_props_baton = sfb;
>
> SVN_ERR(svn_editor__insert_shims(editor, edit_baton, *editor,
> *edit_baton,
> shim_callbacks, result_pool, scratch_pool));
>
> Modified: subversion/trunk/subversion/libsvn_wc/util.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c
> ?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/util.c (original)
> +++ subversion/trunk/subversion/libsvn_wc/util.c Wed Nov 23 04:53:47 2011
> @@ -533,3 +533,48 @@ svn_wc__status2_from_3(svn_wc_status2_t
>
> return SVN_NO_ERROR;
> }
> +
> +
> +svn_error_t *
> +svn_wc__fetch_kind_func(svn_kind_t *kind,
> + void *baton,
> + const char *path,
> + apr_pool_t *scratch_pool)
> +{
> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
> + scratch_pool);
> +
> + SVN_ERR(svn_wc__db_read_kind(kind, sfb->db, local_abspath, FALSE,
> + scratch_pool));
> +
> + return SVN_NO_ERROR;
> +}
> +
> +
> +svn_error_t *
> +svn_wc__fetch_props_func(apr_hash_t **props,
> + void *baton,
> + const char *path,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
> + struct svn_wc__shim_fetch_baton_t *sfb = baton;
> + const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
> + scratch_pool);
> + svn_error_t *err;
> +
> + err = svn_wc__db_read_props(props, sfb->db, local_abspath,
> + result_pool, scratch_pool);
At least in the update editor you want to fetch the BASE (op_depth 0) properties from here. I think you need the pristine properties in most other cases.
But this code fetches the local properties from ACTUAL.
> +
> + /* If the path doesn't exist, just return an empty set of props. */
> + if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
> + {
> + svn_error_clear(err);
> + *props = apr_hash_make(result_pool);
> + }
> + else if (err)
> + return svn_error_trace(err);
> +
> + return SVN_NO_ERROR;
> +}
>
> Modified: subversion/trunk/subversion/libsvn_wc/wc.h
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc.h
> ?rev=1205287&r1=1205286&r2=1205287&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_wc/wc.h (original)
> +++ subversion/trunk/subversion/libsvn_wc/wc.h Wed Nov 23 04:53:47 2011
> @@ -724,6 +724,30 @@ svn_wc__perform_file_merge(svn_skel_t **
> apr_pool_t *scratch_pool);
>
>
> +/* Couple of random helpers for the Ev2 shims.
> + ### These will eventually be obsoleted and removed. */
> +struct svn_wc__shim_fetch_baton_t
> +{
> + svn_wc__db_t *db;
> + const char *base_abspath;
> +};
> +
> +/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */
> +svn_error_t *
> +svn_wc__fetch_kind_func(svn_kind_t *kind,
> + void *baton,
> + const char *path,
> + apr_pool_t *scratch_pool);
> +
> +/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */
> +svn_error_t *
> +svn_wc__fetch_props_func(apr_hash_t **props,
> + void *baton,
> + const char *path,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool);
> +
> +
> #ifdef __cplusplus
> }
> #endif /* __cplusplus */
>