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"