Author: rhuijben
Date: Fri May 6 22:17:37 2011
New Revision: 1100405
URL: http://svn.apache.org/viewvc?rev=1100405&view=rev
Log:
When collapsing op-depths on commit, keep the excluded status on nodes
that were excluded before committing.
* subversion/libsvn_wc/wc-queries.sql
(STMT_COMMIT_DESCENDANT_TO_BASE): Keep the excluded status.
* subversion/tests/cmdline/copy_tests.py
(copy_wc_url_with_absent): Extend test to verify the result after the
commit.
Modified:
subversion/trunk/subversion/libsvn_wc/wc-queries.sql
subversion/trunk/subversion/tests/cmdline/copy_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=1100405&r1=1100404&r2=1100405&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Fri May 6 22:17:37
2011
@@ -187,7 +187,9 @@ WHERE wc_id = ?1 AND op_depth = ?3
-- STMT_COMMIT_DESCENDANT_TO_BASE
UPDATE NODES SET op_depth = 0, repos_id = ?4, repos_path = ?5, revision = ?6,
moved_here = NULL, moved_to = NULL, dav_cache = NULL,
- presence = CASE presence WHEN 'normal' THEN 'normal' ELSE 'not-present' END
+ presence = CASE presence WHEN 'normal' THEN 'normal'
+ WHEN 'excluded' THEN 'excluded'
+ ELSE 'not-present' END
WHERE wc_id = ?1 AND local_relpath = ?2 and op_depth = ?3
-- STMT_SELECT_NODE_CHILDREN
Modified: subversion/trunk/subversion/tests/cmdline/copy_tests.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/copy_tests.py?rev=1100405&r1=1100404&r2=1100405&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/copy_tests.py Fri May 6 22:17:37
2011
@@ -4964,6 +4964,7 @@ def move_wc_and_repo_dir_to_itself(sbox)
def copy_wc_url_with_absent(sbox):
"copy wc to url with several absent children"
sbox.build()
+ wc_dir = sbox.wc_dir
# A/B a normal delete
sbox.simple_rm('A/B')
@@ -4981,12 +4982,12 @@ def copy_wc_url_with_absent(sbox):
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude',
os.path.join(sbox.wc_dir, 'A/D'))
- # Test issue #3314 after copy ### Currently fails with out of date
+ # Test issue #3314 after copy
sbox.simple_copy('A', 'A_copied')
svntest.main.run_svn(None, 'ci', os.path.join(sbox.wc_dir, 'A_copied'),
'-m', 'Commit A_copied')
- # This tests issue #2763 ### Currently fails with out of date
+ # This tests issue #2763
svntest.main.run_svn(None, 'cp', os.path.join(sbox.wc_dir, 'A'),
'^/A_tagged', '-m', 'Tag A')
@@ -4994,7 +4995,93 @@ def copy_wc_url_with_absent(sbox):
svntest.main.run_svn(None, 'ci', os.path.join(sbox.wc_dir, 'A'),
'-m', 'Commit A')
- # TODO: Verify that A_copied and A_tagged show up like A without mu.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A_tagged' : Item(status='A '),
+ 'A_tagged/D' : Item(status='A '),
+ 'A_tagged/D/gamma' : Item(status='A '),
+ 'A_tagged/D/H' : Item(status='A '),
+ 'A_tagged/D/H/psi' : Item(status='A '),
+ 'A_tagged/D/H/chi' : Item(status='A '),
+ 'A_tagged/D/H/omega': Item(status='A '),
+ 'A_tagged/D/G' : Item(status='A '),
+ 'A_tagged/D/G/pi' : Item(status='A '),
+ 'A_tagged/D/G/rho' : Item(status='A '),
+ 'A_tagged/D/G/tau' : Item(status='A '),
+ 'A_tagged/C' : Item(status='A '),
+
+ 'A/no' : Item(status='A '),
+ })
+
+ # This should bring in A_tagged and A/no
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ None)
+
+ # And now bring in the excluded nodes from A and A_copied
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/D' : Item(status='A '),
+ 'A/D/G' : Item(status='A '),
+ 'A/D/G/pi' : Item(status='A '),
+ 'A/D/G/tau' : Item(status='A '),
+ 'A/D/G/rho' : Item(status='A '),
+ 'A/D/H' : Item(status='A '),
+ 'A/D/H/psi' : Item(status='A '),
+ 'A/D/H/chi' : Item(status='A '),
+ 'A/D/H/omega' : Item(status='A '),
+ 'A/D/gamma' : Item(status='A '),
+
+ 'A_copied/D' : Item(status='A '),
+ 'A_copied/D/H' : Item(status='A '),
+ 'A_copied/D/H/omega': Item(status='A '),
+ 'A_copied/D/H/psi' : Item(status='A '),
+ 'A_copied/D/H/chi' : Item(status='A '),
+ 'A_copied/D/G' : Item(status='A '),
+ 'A_copied/D/G/tau' : Item(status='A '),
+ 'A_copied/D/G/rho' : Item(status='A '),
+ 'A_copied/D/G/pi' : Item(status='A '),
+ 'A_copied/D/gamma' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ None,
+ None,
+ None, None, None, None, None, False,
+ wc_dir, '--set-depth', 'infinity')
+
+ # Except for A/no, the 3 directories should now have the same children
+
+ items = {
+ '' : Item(status=' ', wc_rev='6'),
+ 'C' : Item(status=' ', wc_rev='6'),
+ 'D' : Item(status=' ', wc_rev='6'),
+ 'D/gamma' : Item(status=' ', wc_rev='6'),
+ 'D/H' : Item(status=' ', wc_rev='6'),
+ 'D/H/psi' : Item(status=' ', wc_rev='6'),
+ 'D/H/chi' : Item(status=' ', wc_rev='6'),
+ 'D/H/omega' : Item(status=' ', wc_rev='6'),
+ 'D/G' : Item(status=' ', wc_rev='6'),
+ 'D/G/pi' : Item(status=' ', wc_rev='6'),
+ 'D/G/tau' : Item(status=' ', wc_rev='6'),
+ 'D/G/rho' : Item(status=' ', wc_rev='6'),
+ }
+
+ expected_status = svntest.wc.State(os.path.join(wc_dir, 'A_copied'), items)
+ svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A_copied'),
+ expected_status)
+
+ expected_status = svntest.wc.State(os.path.join(wc_dir, 'A_tagged'), items)
+ svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A_tagged'),
+ expected_status)
+
+ expected_status.add({
+ 'no' : Item(status=' ', wc_rev='6')
+ })
+
+ expected_status = svntest.wc.State(os.path.join(wc_dir, 'A'), items)
+ svntest.actions.run_and_verify_status(os.path.join(wc_dir, 'A'),
+ expected_status)
+
########################################################################