Author: hwright
Date: Sun May 22 02:05:06 2011
New Revision: 1125859
URL: http://svn.apache.org/viewvc?rev=1125859&view=rev
Log:
Partially re-apply r1104400: move propname filtering out of the wc_db API.
* subversion/libsvn_wc/props.c
(propname_filter_baton_t, propname_filter_receiver): New.
(svn_wc__proplist_recursive): Conditionally add the filtering reciever
if given a propname.
* subversion/libsvn_wc/wc_db.c
(svn_wc__db_read_props_streamily): Don't bother filtering via propname.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_read_props_streamily): Remove propname arg, and an obsolete doc.
Modified:
subversion/trunk/subversion/libsvn_wc/props.c
subversion/trunk/subversion/libsvn_wc/wc_db.c
subversion/trunk/subversion/libsvn_wc/wc_db.h
Modified: subversion/trunk/subversion/libsvn_wc/props.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/props.c?rev=1125859&r1=1125858&r2=1125859&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/props.c (original)
+++ subversion/trunk/subversion/libsvn_wc/props.c Sun May 22 02:05:06 2011
@@ -1665,6 +1665,34 @@ svn_wc_prop_list2(apr_hash_t **props,
scratch_pool));
}
+struct propname_filter_baton_t {
+ svn_wc__proplist_receiver_t receiver_func;
+ void *receiver_baton;
+ const char *propname;
+};
+
+static svn_error_t *
+propname_filter_receiver(void *baton,
+ const char *local_abspath,
+ apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ struct propname_filter_baton_t *pfb = baton;
+ const svn_string_t *propval = apr_hash_get(props, pfb->propname,
+ APR_HASH_KEY_STRING);
+
+ if (propval)
+ {
+ props = apr_hash_make(scratch_pool);
+ apr_hash_set(props, pfb->propname, APR_HASH_KEY_STRING, propval);
+
+ SVN_ERR(pfb->receiver_func(pfb->receiver_baton, local_abspath, props,
+ scratch_pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
const char *local_abspath,
@@ -1700,12 +1728,25 @@ svn_wc__prop_list_recursive(svn_wc_conte
case svn_depth_files:
case svn_depth_immediates:
case svn_depth_infinity:
- SVN_ERR(svn_wc__db_read_props_streamily(wc_ctx->db, local_abspath,
- propname, depth,
- base_props, pristine,
- receiver_func, receiver_baton,
- cancel_func, cancel_baton,
- scratch_pool));
+ {
+ svn_wc__proplist_receiver_t receiver = receiver_func;
+ void *baton = receiver_baton;
+
+ struct propname_filter_baton_t pfb = { receiver_func, receiver_baton,
+ propname };
+
+ if (propname)
+ {
+ baton = &pfb;
+ receiver = propname_filter_receiver;
+ }
+
+ SVN_ERR(svn_wc__db_read_props_streamily(wc_ctx->db, local_abspath,
+ depth, base_props, pristine,
+ receiver, baton,
+ cancel_func, cancel_baton,
+ scratch_pool));
+ }
break;
default:
SVN_ERR_MALFUNCTION();
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1125859&r1=1125858&r2=1125859&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Sun May 22 02:05:06 2011
@@ -7457,7 +7457,6 @@ cache_props_recursive(void *cb_baton,
svn_error_t *
svn_wc__db_read_props_streamily(svn_wc__db_t *db,
const char *local_abspath,
- const char *propname,
svn_depth_t depth,
svn_boolean_t base_props,
svn_boolean_t pristine,
@@ -7524,25 +7523,8 @@ svn_wc__db_read_props_streamily(svn_wc__
child_abspath = svn_dirent_join(wcroot->abspath,
child_relpath, iterpool);
- /* Filter on the propname, if given one. */
- if (propname)
- {
- svn_string_t *propval = apr_hash_get(props, propname,
- APR_HASH_KEY_STRING);
-
- if (propval)
- {
- props = apr_hash_make(iterpool);
- apr_hash_set(props, propname, APR_HASH_KEY_STRING,
- propval);
- }
- else
- props = NULL;
- }
-
- if (props)
- SVN_ERR(receiver_func(receiver_baton, child_abspath, props,
- iterpool));
+ SVN_ERR(receiver_func(receiver_baton, child_abspath, props,
+ iterpool));
}
SVN_ERR(svn_sqlite__step(&have_row, stmt));
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1125859&r1=1125858&r2=1125859&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Sun May 22 02:05:06 2011
@@ -1944,14 +1944,10 @@ svn_wc__db_read_props(apr_hash_t **props
*
* If BASE_PROPS is FALSE and, PRISTINE is TRUE, the local modifications will
* be suppressed. If PRISTINE is FALSE, local modifications will be visible.
- *
- * NOTE: The only valid values for DEPTH are svn_depth_files,
- * svn_depth_immediates, and svn_depth_infinity.
*/
svn_error_t *
svn_wc__db_read_props_streamily(svn_wc__db_t *db,
const char *local_abspath,
- const char *propname,
svn_depth_t depth,
svn_boolean_t base_props,
svn_boolean_t pristine,