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,


Reply via email to