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)
+
 
 
 ########################################################################


Reply via email to