Author: rhuijben
Date: Tue May 17 23:41:11 2011
New Revision: 1104631

URL: http://svn.apache.org/viewvc?rev=1104631&view=rev
Log:
Make the recursive property retrieval code capable of retrieving the
pristine properties for nodes that have actual nodes and for nodes that
are base-deleted.

* subversion/libsvn_wc/wc-queries.sql
  (STMT_CACHE_NODE_PROPS): Store all properties for undeleted nodes
    within the selection.
  (STMT_CACHE_ACTUAL_PROPS): Update the cached properties for every node
    that has not-null properties stored in actual_node. This avoids two
    joins that we already applied in STMT_CACHE_NODE_PROPS.
  (STMT_CACHE_NODE_PRISTINE_PROPS): New statement, retrieving the pristine
    version of properties for all nodes within the selection, including
    base-deleted nodes.

* subversion/libsvn_wc/wc_db.c
  (cache_props_recursive): Use specific query for pristine properties,
    to handle base-deleted nodes.

* subversion/tests/cmdline/prop_tests.py
  (recursive_base_wc_ops): Add note on a test that doesn't work correctly,
    or we would have caught this problem weeks ago.
  (pristine_props_listed): Remove XFail marking.

Modified:
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.c
    subversion/trunk/subversion/tests/cmdline/prop_tests.py

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1104631&r1=1104630&r2=1104631&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Tue May 17 23:41:11 
2011
@@ -1026,30 +1026,38 @@ INSERT INTO temp__node_props_cache(local
  SELECT local_relpath, kind, properties FROM nodes_current
   WHERE wc_id = ?1
     AND local_relpath IN (SELECT local_relpath FROM targets_list)
-    AND local_relpath NOT IN (
-      SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
 
 -- STMT_CACHE_ACTUAL_PROPS
-INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
-  SELECT A.local_relpath, N.kind, A.properties
-  FROM actual_node AS A JOIN nodes_current AS N
-    ON A.wc_id = N.wc_id AND A.local_relpath = N.local_relpath
-       AND N.presence IN ('normal', 'incomplete')
-  WHERE A.wc_id = ?1
-    AND A.local_relpath IN (SELECT local_relpath FROM targets_list)
-    AND A.local_relpath NOT IN
-      (SELECT local_relpath FROM temp__node_props_cache)
+UPDATE temp__node_props_cache 
+   SET properties=
+        IFNULL((SELECT properties FROM actual_node a
+                 WHERE a.wc_id = ?1
+                   AND a.local_relpath = temp__node_props_cache.local_relpath),
+               properties)
 
 -- STMT_CACHE_NODE_BASE_PROPS
 INSERT INTO temp__node_props_cache (local_relpath, kind, properties)
   SELECT local_relpath, kind, properties FROM nodes_base
   WHERE wc_id = ?1
     AND local_relpath IN (SELECT local_relpath FROM targets_list)
-    AND local_relpath NOT IN (
-      SELECT local_relpath FROM actual_node WHERE wc_id = ?1)
     AND presence IN ('normal', 'incomplete')
 
+-- STMT_CACHE_NODE_PRISTINE_PROPS
+INSERT INTO temp__node_props_cache(local_relpath, kind, properties)
+ SELECT local_relpath, kind, 
+        IFNULL((SELECT properties FROM nodes nn
+                 WHERE n.presence = 'base-deleted'
+                   AND nn.wc_id = n.wc_id
+                   AND nn.local_relpath = n.local_relpath
+                   AND nn.op_depth < n.op_depth
+                 ORDER BY op_depth DESC),
+               properties)
+  FROM nodes_current n
+  WHERE wc_id = ?1
+    AND local_relpath IN (SELECT local_relpath FROM targets_list)
+    AND presence IN ('normal', 'incomplete', 'base-deleted')
+
 -- STMT_SELECT_RELEVANT_PROPS_FROM_CACHE
 SELECT local_relpath, properties FROM temp__node_props_cache
 ORDER BY local_relpath

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1104631&r1=1104630&r2=1104631&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue May 17 23:41:11 2011
@@ -7603,6 +7603,8 @@ cache_props_recursive(void *cb_baton,
 
   if (baton->base_props)
     stmt_idx = STMT_CACHE_NODE_BASE_PROPS;
+  else if (baton->pristine)
+    stmt_idx = STMT_CACHE_NODE_PRISTINE_PROPS;
   else
     stmt_idx = STMT_CACHE_NODE_PROPS;
 

Modified: subversion/trunk/subversion/tests/cmdline/prop_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/prop_tests.py?rev=1104631&r1=1104630&r2=1104631&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/prop_tests.py Tue May 17 23:41:11 
2011
@@ -1081,6 +1081,9 @@ def recursive_base_wc_ops(sbox):
   # Test recursive proplist
   exit_code, output, errput = svntest.main.run_svn(None, 'proplist', '-R',
                                                    '-v', wc_dir, '-rBASE')
+
+  # For some reason this test doesn't fail if the next verification
+  # doesn't see any output.
   verify_output([ 'old-del', 'old-keep', 'p', 'p',
                   'Properties on ', 'Properties on ' ],
                 output, errput)
@@ -2431,7 +2434,6 @@ def file_matching_dir_prop_reject(sbox):
                                         expected_status,
                                         None, None, None, None, None, True)
 
-@XFail()
 def pristine_props_listed(sbox):
   "check if pristine properties are visible"
 


Reply via email to