Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/depth_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/depth_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/depth_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/depth_tests.py Sun 
Jun 14 20:58:10 2015
@@ -183,8 +183,7 @@ def depth_empty_update_bypass_single_fil
   expected_status.tweak('iota', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-empty wc, expecting not to receive the change to iota.
   expected_output = svntest.wc.State(wc_empty, { })
@@ -194,8 +193,7 @@ def depth_empty_update_bypass_single_fil
   svntest.actions.run_and_verify_update(wc_empty,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
 
   # And the wc should still be depth-empty.
   verify_depth(None, "empty", wc_empty)
@@ -206,7 +204,7 @@ def depth_empty_update_bypass_single_fil
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         "--depth=infinity", wc_empty)
 
   # And the wc should still be depth-empty.
@@ -235,8 +233,7 @@ def depth_immediates_get_top_file_mod_on
   expected_status.tweak('A/mu', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-immediates wc, expecting to receive only the
   # change to iota.
@@ -255,8 +252,7 @@ def depth_immediates_get_top_file_mod_on
   svntest.actions.run_and_verify_update(wc_immediates,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
   verify_depth(None, "immediates", wc_immediates)
 
 
@@ -286,9 +282,7 @@ def depth_empty_commit(sbox):
     })
   svntest.actions.run_and_verify_commit(wc_empty,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_empty)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 def depth_empty_with_file(sbox):
@@ -320,8 +314,7 @@ def depth_empty_with_file(sbox):
   expected_status.tweak('iota', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Delete iota in the "other" wc.
   other_iota_path = os.path.join(wc, 'iota')
@@ -331,8 +324,7 @@ def depth_empty_with_file(sbox):
   expected_status.remove('iota')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-empty wc just a little, expecting to receive
   # the change in iota.
@@ -347,7 +339,7 @@ def depth_empty_with_file(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '-r2', wc_empty)
 
   # Update the depth-empty wc all the way, expecting to receive the deletion
@@ -360,8 +352,7 @@ def depth_empty_with_file(sbox):
   svntest.actions.run_and_verify_update(wc_empty,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
 
 
 #----------------------------------------------------------------------
@@ -405,8 +396,7 @@ def depth_empty_with_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         A_path)
 
   # Commit a change to A/mu in the "other" wc.
@@ -417,8 +407,7 @@ def depth_empty_with_dir(sbox):
   expected_status.tweak('A/mu', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update "A" by name in wc_empty, expect to receive the change to A/mu.
   expected_output = svntest.wc.State(wc_empty, { 'A/mu' : Item(status='U ') })
@@ -432,8 +421,7 @@ def depth_empty_with_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         A_path)
 
   # Commit the deletion of A/mu from the "other" wc.
@@ -444,8 +432,7 @@ def depth_empty_with_dir(sbox):
   expected_status.remove('A/mu')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
 
   # Update "A" by name in wc_empty, expect to A/mu to disappear.
@@ -461,8 +448,7 @@ def depth_empty_with_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         A_path)
 
 
@@ -495,8 +481,7 @@ def depth_immediates_bring_in_file(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         A_mu_path)
 
   # Run 'svn up A/D/gamma' to test the edge case 'Skipped'.
@@ -539,8 +524,7 @@ def depth_immediates_fill_in_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'infinity',
                                         A_path)
 
@@ -572,8 +556,7 @@ def depth_mixed_bring_in_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files',
                                         A_path)
   # Check that A was added at depth=files.
@@ -600,8 +583,7 @@ def depth_mixed_bring_in_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates',
                                         B_path)
   # Check that A/B was added at depth=immediates.
@@ -625,8 +607,7 @@ def depth_mixed_bring_in_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty',
                                         C_path)
   # Check that A/C was added at depth=empty.
@@ -649,8 +630,7 @@ def depth_empty_unreceive_delete(sbox):
   expected_status.remove('iota')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-empty wc, expecting not to receive the deletion of iota.
   expected_output = svntest.wc.State(wc_empty, { })
@@ -660,8 +640,7 @@ def depth_empty_unreceive_delete(sbox):
   svntest.actions.run_and_verify_update(wc_empty,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
 
 
 #----------------------------------------------------------------------
@@ -683,8 +662,7 @@ def depth_immediates_unreceive_delete(sb
   expected_status.remove('A/mu')
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-immediates wc, expecting not to receive the deletion
   # of A/mu.
@@ -701,8 +679,7 @@ def depth_immediates_unreceive_delete(sb
   svntest.actions.run_and_verify_update(wc_immed,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 def depth_immediates_receive_delete(sbox):
@@ -725,8 +702,7 @@ def depth_immediates_receive_delete(sbox
     })
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-immediates wc, expecting to receive the deletion of A.
   expected_output = svntest.wc.State(wc_immed, {
@@ -742,8 +718,7 @@ def depth_immediates_receive_delete(sbox
   svntest.actions.run_and_verify_update(wc_immed,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 def depth_immediates_subdir_propset_1(sbox):
@@ -774,7 +749,7 @@ def depth_immediates_subdir_propset_1(sb
   svntest.actions.run_and_verify_commit(wc_immediates,
                                         expected_output,
                                         expected_status,
-                                        None,
+                                        [],
                                         A_path)
 
   # Create expected output tree for the update.
@@ -793,7 +768,7 @@ def depth_immediates_subdir_propset_1(sb
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 1)
+                                        check_props=True)
 
 #----------------------------------------------------------------------
 def depth_immediates_subdir_propset_2(sbox):
@@ -843,8 +818,7 @@ def depth_update_to_more_depth(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files')
   verify_depth(None, "files")
 
@@ -865,8 +839,7 @@ def depth_update_to_more_depth(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates')
   verify_depth(None, "immediates")
   verify_depth(None, "empty", "A")
@@ -890,8 +863,7 @@ def depth_update_to_more_depth(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', 'A')
   verify_depth(None, "immediates")
   verify_depth(None, "files", "A")
@@ -922,8 +894,7 @@ def depth_update_to_more_depth(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'infinity')
   verify_depth("Non-infinity depth detected after an upgrade to 
depth-infinity",
                "infinity")
@@ -981,7 +952,7 @@ def commit_propmods_with_depth_empty_hel
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
                                         expected_status,
-                                        None,
+                                        [],
                                         depth_arg,
                                         wc_dir, D_path)
 
@@ -1152,7 +1123,7 @@ def commit_depth_immediates(sbox):
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
                                         expected_status,
-                                        None,
+                                        [],
                                         '--depth', 'immediates',
                                         wc_dir, G_path)
 
@@ -1183,8 +1154,7 @@ def depth_immediates_receive_new_dir(sbo
     })
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
-                                        expected_status,
-                                        None, wc)
+                                        expected_status)
 
   # Update the depth-immediates wc, expecting to receive just the
   # new directory, without the file.
@@ -1205,8 +1175,7 @@ def depth_immediates_receive_new_dir(sbo
   svntest.actions.run_and_verify_update(wc_immed,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None)
+                                        expected_status)
   # Check that the new directory was added at depth=empty.
   verify_depth(None, "empty", other_I_path)
 
@@ -1281,8 +1250,8 @@ def upgrade_from_above(sbox):
                                           expected_output,
                                           expected_disk,
                                           expected_status,
-                                          None, None, None, None, None, None,
-                                          '--set-depth=files')
+                                          [], False,
+                                          '--set-depth=files', '.')
     verify_depth(None, "files")
   finally:
     os.chdir(saved_cwd)
@@ -1303,7 +1272,7 @@ def upgrade_from_above(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, None,
+                                        [], False,
                                         '--set-depth=files', wc)
   verify_depth(None, "files", wc)
 
@@ -1445,8 +1414,7 @@ def depthy_update_above_dir_to_be_delete
                                           expected_output_func(wc_dir),
                                           expected_disk,
                                           expected_status_func(wc_dir),
-                                          None, None, None, None, None,
-                                          False,
+                                          [], False,
                                           "--depth=%s" % depth, wc_dir)
 
 
@@ -1491,8 +1459,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', E_path)
   verify_depth(None, "immediates", E_path)
 
@@ -1502,8 +1469,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', E_path)
   verify_depth(None, "files", E_path)
 
@@ -1519,8 +1485,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', B_path)
   verify_depth(None, "immediates", B_path)
   verify_depth(None, "empty", E_path)
@@ -1539,8 +1504,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty', H_path)
   verify_depth(None, "empty", H_path)
 
@@ -1557,8 +1521,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', D_path)
   verify_depth(None, "immediates", D_path)
   verify_depth(None, "empty", G_path)
@@ -1576,8 +1539,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty', D_path)
   verify_depth(None, "empty", D_path)
 
@@ -1594,8 +1556,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', A_path)
   verify_depth(None, "immediates", A_path)
   verify_depth(None, "empty", C_path)
@@ -1614,8 +1575,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', A_path)
   verify_depth(None, "files", A_path)
 
@@ -1630,8 +1590,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty', A_path)
   verify_depth(None, "empty", A_path)
 
@@ -1646,8 +1605,7 @@ def depth_folding_clean_trees_1(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', wc_dir)
   verify_depth(None, "files", wc_dir)
 
@@ -1718,8 +1676,7 @@ def depth_folding_clean_trees_2(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', D_path)
   verify_depth(None, "immediates", D_path)
   verify_depth(None, "empty", G_path)
@@ -1738,8 +1695,7 @@ def depth_folding_clean_trees_2(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', A_path)
   verify_depth(None, "immediates", A_path)
   verify_depth(None, "empty", D_path)
@@ -1759,8 +1715,7 @@ def depth_folding_clean_trees_2(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', A_path)
   verify_depth(None, "immediates", A_path)
   verify_depth(None, "empty", D_path)
@@ -1778,8 +1733,7 @@ def depth_folding_clean_trees_2(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', A_path)
   verify_depth(None, "immediates", A_path)
   verify_depth(None, "empty", D_path)
@@ -1805,8 +1759,7 @@ def depth_folding_clean_trees_2(sbox):
 #                                        expected_output,
 #                                        expected_disk,
 #                                        expected_status,
-#                                        None, None,
-#                                        None, None, None, None,
+#                                        [], False,
 #                                        '--set-depth', 'empty', A_path)
 
 def depth_fold_expand_clean_trees(sbox):
@@ -1863,8 +1816,7 @@ def depth_fold_expand_clean_trees(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', A_path)
   verify_depth(None, "immediates", A_path)
   verify_depth(None, "empty", B_path)
@@ -1891,8 +1843,7 @@ def depth_fold_expand_clean_trees(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', Other_A_path)
   verify_depth(None, "files", Other_A_path)
 
@@ -1929,7 +1880,7 @@ def pull_in_tree_with_depth_option(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         "--depth=immediates", A_path)
 
   # Check that the A directory was pull ed in at depth=immediates.
@@ -1955,22 +1906,29 @@ def fold_tree_with_unversioned_modified_
   # Fold the A dir to empty, expect the modified & unversioned ones left
   # unversioned rather than removed, along with paths to those items.
 
-  # Even though the directory B and D is not deleted because of local
-  # modificatoin or unversioned items, there will be only one notification at
-  # B and D.
+  # Directories B and D won't be deleted, because that would remove their
+  # local modifications. Their unmodified descendants are deleted though.
   expected_output = svntest.wc.State(wc_dir, {
-    'A/B'            : Item(status='D '),
+    'A/B/E'          : Item(status='D '),
+    'A/B/F'          : Item(status='D '),
+    'A/B/lambda'     : Item(status='D '),
     'A/C'            : Item(status='D '),
-    'A/D'            : Item(status='D '),
-    'A/mu'           : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/gamma'      : Item(status='D '),
     })
   # unversioned items will be ignored in in the status tree, since the
   # run_and_verify_update() function uses a quiet version of svn status
-  # Dir A is still versioned, since the wc root is in depth-infinity
   expected_status = svntest.wc.State(wc_dir, {
     ''               : Item(status='  ', wc_rev=1),
     'iota'           : Item(status='  ', wc_rev=1),
-    'A'              : Item(status='  ', wc_rev=1)
+    'A'              : Item(status='  ', wc_rev=1),
+    'A/D'            : Item(status='  ', wc_rev='1'),
+    'A/D/G'          : Item(status='  ', wc_rev='1'),
+    'A/D/G/pi'       : Item(status='M ', wc_rev='1'),
+    'A/B'            : Item(status='  ', wc_rev='1'),
+    'A/mu'           : Item(status='M ', wc_rev='1'),
     })
   expected_disk = svntest.wc.State('', {
     'iota'           : Item(contents="This is the file 'iota'.\n"),
@@ -1986,8 +1944,7 @@ def fold_tree_with_unversioned_modified_
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty', A_path)
   verify_depth(None, "empty", A_path)
 
@@ -2005,8 +1962,7 @@ def depth_empty_update_on_file(sbox):
   expected_status.tweak('iota', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Update iota with depth=empty.
   expected_output = svntest.wc.State(wc_dir,
@@ -2017,7 +1973,7 @@ def depth_empty_update_on_file(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '--depth=empty', '-r1', iota_path)
 
   # Check the revision and created rev.
@@ -2053,8 +2009,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'exclude', E_path)
   # verify_depth exclude? not implemented yet
 
@@ -2072,8 +2027,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', B_path)
   verify_depth(None, "immediates", B_path)
 
@@ -2091,8 +2045,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'exclude', B_path)
 
   # Explicitly pull in excluded path B.
@@ -2110,8 +2063,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         B_path)
 
   # Test issue #
@@ -2125,8 +2077,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'exclude', iota_path)
 
   # Update the whole WC to depth=infinity.
@@ -2142,8 +2093,7 @@ def excluded_path_update_operation(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'infinity', wc_dir)
 
 def excluded_path_misc_operation(sbox):
@@ -2171,8 +2121,7 @@ def excluded_path_misc_operation(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'exclude', E_path)
 
   # copy A/B to A/L, excluded entry should be copied too
@@ -2215,9 +2164,7 @@ def excluded_path_misc_operation(sbox):
     })
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   # Relocate wc, with excluded items in it.
   repo_dir = sbox.repo_dir
@@ -2262,8 +2209,7 @@ def excluded_receive_remote_removal(sbox
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         "--set-depth", "exclude", B_path)
 
   # Remove path B in the repos.
@@ -2278,9 +2224,7 @@ def excluded_receive_remote_removal(sbox
   svntest.actions.run_and_verify_update(wc,
                                         None,
                                         expected_disk,
-                                        expected_status,
-                                        None, None,
-                                        None, None, None, None)
+                                        expected_status)
 
   # Introduce a new path with the same name B.
   # This should succeed if the exclude entry is gone with the update,
@@ -2380,7 +2324,7 @@ def make_depth_tree_conflicts(sbox):
   svntest.actions.run_and_verify_commit(wc,
                                         expected_output,
                                         expected_status,
-                                        None,
+                                        [],
                                         A)
 
   # Go back to rev 1
@@ -2395,7 +2339,7 @@ def make_depth_tree_conflicts(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '-r1', A)
 
   # Perform node deletions so that items become unversioned and
@@ -2437,7 +2381,7 @@ def make_depth_tree_conflicts(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         wc)
 
 
@@ -2517,8 +2461,7 @@ def update_excluded_path_sticky_depths(s
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'exclude', B_path)
 
   # Update to depth 'empty' for the excluded path A/B
@@ -2535,8 +2478,7 @@ def update_excluded_path_sticky_depths(s
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'empty', B_path)
   verify_depth(None, "empty", B_path)
   expected_info = {
@@ -2568,8 +2510,7 @@ def update_excluded_path_sticky_depths(s
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'files', B_path)
   verify_depth(None, "files", B_path)
   expected_info = {
@@ -2607,8 +2548,7 @@ def update_excluded_path_sticky_depths(s
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'immediates', B_path)
   verify_depth(None, "immediates", B_path)
   expected_info = {
@@ -2638,8 +2578,7 @@ def update_excluded_path_sticky_depths(s
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None,
-                                        None, None, None, None,
+                                        [], False,
                                         '--set-depth', 'infinity', B_path)
   verify_depth(None, "infinity", B_path)
   expected_info = {
@@ -2685,9 +2624,7 @@ def update_depth_empty_root_of_infinite_
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None, None,
-                                        None, None, None, None, wc_dir)
+                                        expected_status)
 
 def sparse_update_with_dash_dash_parents(sbox):
   """update --parents"""
@@ -2727,7 +2664,7 @@ def sparse_update_with_dash_dash_parents
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '--parents', alpha_path)
 
   expected_output = svntest.wc.State(sbox.wc_dir, {
@@ -2749,7 +2686,7 @@ def sparse_update_with_dash_dash_parents
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '--parents', pi_path)
 
   expected_output = svntest.wc.State(sbox.wc_dir, {
@@ -2768,7 +2705,7 @@ def sparse_update_with_dash_dash_parents
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '--parents', omega_path)
 
 def update_below_depth_empty(sbox):
@@ -2785,8 +2722,8 @@ def update_below_depth_empty(sbox):
       'A/D'               : Item(status='D '),
     })
   svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output, None,
-                                        None, None, None, None, None, None,
-                                        False,
+                                        None,
+                                        [], False,
                                         '--set-depth', 'empty', A)
 
   svntest.actions.run_and_verify_svn(None, [],
@@ -2799,7 +2736,7 @@ def update_below_depth_empty(sbox):
 
   # This update should just update the revision of the working copy
   svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output, None,
-                                        None, None)
+                                        None)
 
 # Test for issue #4136.
 @Issue(4136)
@@ -2820,9 +2757,7 @@ def commit_then_immediates_update(sbox):
   expected_status.tweak('A/mu', wc_rev=2, status='  ')
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   # Now, update --depth immediates in the root of the working copy.
   expected_output = svntest.wc.State(wc_dir, { })
@@ -2838,7 +2773,7 @@ def commit_then_immediates_update(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         "--depth=immediates", wc_dir)
 
 def revert_depth_files(sbox):
@@ -2879,13 +2814,88 @@ def spurious_nodes_row(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         "--depth=empty", sbox.wc_dir)
   val2 = svntest.wc.sqlite_stmt(sbox.wc_dir, "select count(*) from nodes")
   if (val1 != val2):
     # ra_neon added a spurious not-present row that does not show up in status
     raise svntest.Failure("count changed from '%s' to '%s'" % (val1, val2))
 
+def commit_excluded(sbox):
+  "commit an excluded node"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G' : Item(status='D '),
+  })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        None,
+                                        expected_status,
+                                        [], False,
+                                        "--set-depth=exclude",
+                                        sbox.ospath('A/D/G'))
+
+  sbox.simple_copy('A/D', 'D')
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'D' : Item(verb='Adding'),
+  })
+  
+  expected_status.add({
+    'D'          : Item(status='  ', wc_rev='2'),
+    'D/H'        : Item(status='  ', wc_rev='2'),
+    'D/H/chi'    : Item(status='  ', wc_rev='2'),
+    'D/H/psi'    : Item(status='  ', wc_rev='2'),
+    'D/H/omega'  : Item(status='  ', wc_rev='2'),
+    'D/gamma'    : Item(status='  ', wc_rev='2')
+  })
+
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        expected_output,
+                                        expected_status)
+
+  expected_output = svntest.wc.State(wc_dir, {
+    '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 '),
+    'D/G'       : Item(status='A '),
+    'D/G/pi'    : Item(status='A '),
+    'D/G/tau'   : Item(status='A '),
+    'D/G/rho'   : Item(status='A ')
+  })
+
+  expected_status.tweak(wc_rev=2)
+
+  expected_status.add({
+    'D'         : Item(status='  ', wc_rev='2'),
+    'D/G'       : Item(status='  ', wc_rev='2'),
+    'D/G/pi'    : Item(status='  ', wc_rev='2'),
+    'D/G/rho'   : Item(status='  ', wc_rev='2'),
+    'D/G/tau'   : Item(status='  ', wc_rev='2'),
+    'D/H'       : Item(status='  ', wc_rev='2'),
+    'D/H/chi'   : Item(status='  ', wc_rev='2'),
+    'D/H/psi'   : Item(status='  ', wc_rev='2'),
+    'D/H/omega' : Item(status='  ', wc_rev='2'),
+    'D/gamma'   : Item(status='  ', wc_rev='2'),
+    'A/D/G'     : Item(status='  ', wc_rev='2'),
+    'A/D/G/rho' : Item(status='  ', wc_rev='2'),
+    'A/D/G/tau' : Item(status='  ', wc_rev='2'),
+    'A/D/G/pi'  : Item(status='  ', wc_rev='2')
+  })
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        None,
+                                        expected_status,
+                                        [], False,
+                                        "--set-depth=infinity", wc_dir)
 
 #----------------------------------------------------------------------
 # list all tests here, starting with None:
@@ -2937,6 +2947,7 @@ test_list = [ None,
               commit_then_immediates_update,
               revert_depth_files,
               spurious_nodes_row,
+              commit_excluded,
               ]
 
 if __name__ == "__main__":

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/diff_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/diff_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/diff_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/diff_tests.py Sun Jun 
14 20:58:10 2015
@@ -709,7 +709,7 @@ def dont_diff_binary_file(sbox):
 
   # Commit the new binary file, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Update the whole working copy to HEAD (rev 2)
   expected_output = svntest.wc.State(wc_dir, {})
@@ -729,8 +729,7 @@ def dont_diff_binary_file(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        1)  # verify props, too.
+                                        check_props=True)
 
   # Make a local mod to the binary file.
   svntest.main.file_append(theta_path, "some extra junk")
@@ -772,7 +771,7 @@ def dont_diff_binary_file(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Third diff use-case: 'svn diff -r2:3 wc' will compare two
   # repository trees.
@@ -869,7 +868,7 @@ def diff_base_to_repos(sbox):
   expected_status.tweak('iota', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   expected_output = svntest.wc.State(wc_dir, {})
   expected_disk = svntest.main.greek_state.copy()
@@ -999,7 +998,7 @@ def diff_base_to_repos(sbox):
     'A/D/newfile' : Item(status='  ', wc_rev=3),
     })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   expected_output = svntest.wc.State(wc_dir, {})
   expected_disk = svntest.main.greek_state.copy()
@@ -1067,7 +1066,7 @@ def diff_deleted_in_head(sbox):
   expected_status.tweak('A/mu', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   expected_output = svntest.wc.State(wc_dir, {})
   expected_disk = svntest.main.greek_state.copy()
@@ -1090,7 +1089,7 @@ def diff_deleted_in_head(sbox):
                          'A/C')
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Doing an 'svn diff -r1:2' on the URL of directory A should work,
   # especially over the DAV layer.
@@ -1753,7 +1752,7 @@ def diff_force(sbox):
 
   # Commit iota, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Add another line, while keeping he file as binary.
   svntest.main.file_append(iota_path, "another line")
@@ -1769,7 +1768,7 @@ def diff_force(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Check that we get diff when the first, the second and both files
   # are marked as binary.  First we'll use --force.  Then we'll use
@@ -2613,7 +2612,7 @@ def diff_weird_author(sbox):
   expected_status.tweak("A/mu", wc_rev=2)
 
   svntest.actions.run_and_verify_commit(sbox.wc_dir, expected_output,
-                                        expected_status, None, sbox.wc_dir)
+                                        expected_status)
 
   svntest.main.run_svn(None,
                        "propset", "--revprop", "-r", "2", "svn:author",
@@ -2652,7 +2651,7 @@ def diff_ignore_whitespace(sbox):
       'iota' : Item(verb='Sending'),
       })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        None, None, wc_dir)
+                                        None,)
 
   # only whitespace changes, should return no changes
   svntest.main.file_write(file_path,
@@ -2698,7 +2697,7 @@ def diff_ignore_eolstyle(sbox):
       'iota' : Item(verb='Sending'),
       })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        None, None, wc_dir)
+                                        None)
 
   # commit only eol changes
   svntest.main.file_write(file_path,
@@ -2746,7 +2745,7 @@ def diff_in_renamed_folder(sbox):
   ### child of the A/D/C copy. thus, it appears in the status output as a
   ### (M)odified child.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        None, None, wc_dir)
+                                        None)
 
   expected_output = svntest.wc.State(wc_dir, {
       'A/D/C/kappa' : Item(verb='Sending'),
@@ -2756,7 +2755,7 @@ def diff_in_renamed_folder(sbox):
   for i in range(3, 5):
     svntest.main.file_append(kappa_path, str(i) + "\n")
     svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                          None, None, wc_dir)
+                                          None)
 
   expected_output = make_diff_header(kappa_path, "revision 3",
                                      "revision 4") + [
@@ -2906,7 +2905,7 @@ def diff_ignore_eolstyle_empty_lines(sbo
       'iota' : Item(verb='Sending'),
       })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        None, None, wc_dir)
+                                        None)
 
   # sleep to guarantee timestamp change
   time.sleep(1.1)
@@ -3013,7 +3012,7 @@ def diff_summarize_xml(sbox):
     [], wc_dir, paths, items, props, kinds, wc_dir)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # 1) Test --xml without --summarize
   svntest.actions.run_and_verify_svn(
@@ -3402,7 +3401,7 @@ def diff_prop_missing_context(sbox):
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak('iota', wc_rev=2)
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   prop_val = "".join([
                "line 3\n",
@@ -3459,7 +3458,7 @@ def diff_prop_multiple_hunks(sbox):
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak('iota', wc_rev=2)
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   prop_val = "".join([
                "line 1\n",
@@ -3523,7 +3522,7 @@ def diff_git_empty_files(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   svntest.main.file_write(new_path, "")
   svntest.main.run_svn(None, 'add', new_path)
@@ -3560,7 +3559,7 @@ def diff_git_with_props(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   svntest.main.file_write(new_path, "")
   svntest.main.run_svn(None, 'add', new_path)
@@ -3602,7 +3601,7 @@ def diff_correct_wc_base_revnum(sbox):
     'iota' : Item(status='  ', wc_rev=2),
     })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Child's base is now 2; parent's is still 1.
   # Make a local mod.
@@ -3641,7 +3640,7 @@ def diff_git_with_props_on_dir(sbox):
 
   sbox.simple_propset('k','v', '', 'A')
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   was_cwd = os.getcwd()
   os.chdir(wc_dir)
@@ -4371,7 +4370,7 @@ def diff_repos_empty_file_addition(sbox)
     'newfile' : Item(status='  ', wc_rev=2),
     })
   svntest.actions.run_and_verify_commit(sbox.wc_dir, expected_output,
-                                        expected_status, None, sbox.wc_dir)
+                                        expected_status)
 
   # Now diff the revision that added the empty file.
   expected_output = [
@@ -4418,8 +4417,8 @@ def diff_missing_tree_conflict_victim(sb
                                        expected_disk,
                                        expected_status,
                                        expected_skip,
-                                       None, None, None, None, None, None,
-                                       False, '--ignore-ancestry', wc_dir)
+                                       [], False, False,
+                                       '--ignore-ancestry', wc_dir)
 
   # 'svn diff' should show no change for the working copy
   # This currently fails because svn errors out with a 'node not found' error
@@ -4827,6 +4826,193 @@ def diff_local_copied_dir(sbox):
     os.chdir(was_cwd)
 
 
+def diff_summarize_ignore_properties(sbox):
+  "diff --summarize --ignore-properties"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Make a property change and a content change to 'iota'
+  sbox.simple_propset('svn:eol-style', 'native', 'iota')
+  svntest.main.file_append(sbox.ospath('iota'), 'new text')
+
+  # Make a property change to 'A/mu'
+  sbox.simple_propset('svn:eol-style', 'native', 'A/mu')
+
+  # Make a content change to 'A/B/lambda'
+  svntest.main.file_append(sbox.ospath('A/B/lambda'), 'new text')
+
+  # Add a file.
+  svntest.main.file_write(sbox.ospath('new'), 'new text')
+  sbox.simple_add('new')
+
+  # Delete a file
+  sbox.simple_rm('A/B/E/alpha')
+
+  expected_diff = svntest.wc.State(wc_dir, {
+    'iota': Item(status='M '),
+    'new': Item(status='A '),
+    'A/B/lambda': Item(status='M '),
+    'A/B/E/alpha': Item(status='D '),
+    })
+  svntest.actions.run_and_verify_diff_summarize(expected_diff,
+                                                '--ignore-properties',
+                                                sbox.wc_dir)
+
+  # test with --xml, too
+  paths = ['iota', 'new', 'A/B/lambda', 'A/B/E/alpha']
+  items = ['modified', 'added', 'modified', 'deleted' ]
+  kinds = ['file','file', 'file', 'file']
+  props = ['none', 'none', 'none', 'none']
+  svntest.actions.run_and_verify_diff_summarize_xml(
+    [], wc_dir, paths, items, props, kinds, wc_dir, '--ignore-properties')
+
+def diff_incomplete(sbox):
+  "diff incomplete directory"
+
+  sbox.build()
+  svntest.actions.run_and_verify_svn(None, [], 'rm', sbox.repo_url + '/A',
+                                     '-m', '')
+
+  # This works ok
+  _, out1a, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                   '-r', 'HEAD',
+                                                   sbox.wc_dir,
+                                                   '--notice-ancestry')
+
+  _, out1b, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                   sbox.wc_dir,
+                                                   '--notice-ancestry')
+
+
+  svntest.main.run_wc_incomplete_tester(sbox.ospath('A'), 1)
+
+  # And this used to miss certain changes
+  _, out2a, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                  '-r', 'HEAD',
+                                                  sbox.wc_dir,
+                                                  '--notice-ancestry')
+
+  _, out2b, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                   sbox.wc_dir,
+                                                   '--notice-ancestry')
+
+  # Ordering may be different, but length should match
+  if len(out1a) != len(out2a):
+    raise svntest.Failure('Different output when incomplete against repos')
+
+  svntest.verify.compare_and_display_lines('local diff', 'local diff', out1b,
+                                           out2b)
+
+  # And add a replacement on top of the incomplete, server side
+  svntest.actions.run_and_verify_svn(None, [], 'cp',
+                                     sbox.repo_url + '/A/D/H@1',
+                                     sbox.repo_url + '/A', '-m', '')
+
+  svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                     '-r', 'HEAD',
+                                     sbox.wc_dir,
+                                     '--notice-ancestry')
+
+  # And client side
+  svntest.actions.run_and_verify_svn(None, [], 'rm', sbox.ospath('A'),
+                                     '--force')
+  sbox.simple_mkdir('A')
+  svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                    '-r', 'HEAD',
+                                    sbox.wc_dir,
+                                    '--notice-ancestry')
+
+  svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                    sbox.wc_dir,
+                                    '--notice-ancestry')
+
+def diff_incomplete_props(sbox):
+  "incomplete set of properties"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_propset('r2-1', 'r2', 'iota', 'A')
+  sbox.simple_propset('r2-2', 'r2', 'iota', 'A')
+  sbox.simple_propset('r', 'r2', 'iota', 'A')
+  sbox.simple_commit() # r2
+
+  svntest.actions.run_and_verify_svnmucc(None, [],
+                                         '-U', sbox.repo_url,
+                                         'propset', 'r3-1', 'r3', 'iota',
+                                         'propset', 'r3-1', 'r3', 'A',
+                                         'propset', 'r3-2', 'r3', 'iota',
+                                         'propset', 'r3-2', 'r3', 'A',
+                                         'propset', 'r', 'r3', 'iota',
+                                         'propset', 'r', 'r3', 'A',
+                                         'propdel', 'r2-1', 'iota',
+                                         'propdel', 'r2-1', 'A',
+                                         'propdel', 'r2-2', 'iota',
+                                         'propdel', 'r2-2', 'A',
+                                         '-m', 'r3')
+
+  _, out1, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                  '-r', 'HEAD', wc_dir,
+                                                  '--notice-ancestry')
+
+  # Now simulate a broken update to r3
+  svntest.actions.set_incomplete(wc_dir, 3)
+  svntest.actions.set_incomplete(sbox.ospath('A'), 3)
+
+  # The properties are still at r2
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.tweak('iota', 'A', props={'r2-1':'r2', 'r2-2':'r2', 'r':'r2'})
+  svntest.actions.verify_disk(wc_dir, expected_disk, True)
+
+  # But the working copy is incomplete at r3
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('iota', wc_rev=2)
+  expected_status.tweak('', 'A', wc_rev=3, status='! ')
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'A'    : Item(status=' U'),
+    'iota' : Item(status=' U'),
+  })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+  expected_disk = svntest.main.greek_state.copy()
+
+  # Expect that iota and A have the expected sets of properties
+  # The r2 set is properly deleted where necessary
+  expected_disk.tweak('iota', 'A', props={'r3-2':'r3', 'r':'r3', 'r3-1':'r3'})
+
+  _, out2, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                  '-r', 'HEAD', wc_dir,
+                                                  '--notice-ancestry')
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output, expected_disk,
+                                        expected_status, [], True)
+
+  # Ok, we tested that the update worked properly, but we also do this
+  # in the update tests... Let's see, what the diffs said
+
+  _, out3, _ = svntest.actions.run_and_verify_svn(None, [], 'diff',
+                                                  '-r', 'BASE:2', wc_dir,
+                                                  '--notice-ancestry')
+
+  # Filter out all headers (which include revisions, etc.)
+  out1 = [i for i in out1 if i[0].isupper()]
+  out1.sort()
+
+  out2 = [i for i in out2 if i[0].isupper()]
+  out2.sort()
+
+  out3 = [i for i in out3 if i[0].isupper()]
+  out3.sort()
+
+  svntest.verify.compare_and_display_lines('base vs incomplete', 'local diff',
+                                           out1, out2)
+
+  svntest.verify.compare_and_display_lines('base vs after', 'local diff',
+                                           out1, out3)
+
 ########################################################################
 #Run the tests
 
@@ -4917,6 +5103,9 @@ test_list = [ None,
               diff_deleted_in_move_against_repos,
               diff_replaced_moved,
               diff_local_copied_dir,
+              diff_summarize_ignore_properties,
+              diff_incomplete,
+              diff_incomplete_props,
               ]
 
 if __name__ == '__main__':

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/entries-dump.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/entries-dump.c?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/entries-dump.c 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/entries-dump.c Sun 
Jun 14 20:58:10 2015
@@ -74,12 +74,20 @@ entries_dump(const char *dir_path, svn_w
   apr_hash_index_t *hi;
   svn_boolean_t locked;
   svn_error_t *err;
+  svn_wc_context_t *wc_ctx = NULL;
+  const char *dir_abspath;
+
+  SVN_ERR(svn_dirent_get_absolute(&dir_abspath, dir_path, pool));
 
   err = svn_wc_adm_open3(&adm_access, related, dir_path, FALSE, 0,
                          NULL, NULL, pool);
   if (!err)
     {
-      SVN_ERR(svn_wc_locked(&locked, dir_path, pool));
+      SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+                                             svn_wc__adm_get_db(adm_access),
+                                             pool));
+
+      SVN_ERR(svn_wc_locked2(NULL, &locked, wc_ctx, dir_abspath, pool));
       SVN_ERR(svn_wc_entries_read(&entries, adm_access, TRUE, pool));
     }
   else if (err && err->apr_err == SVN_ERR_WC_LOCKED
@@ -88,12 +96,17 @@ entries_dump(const char *dir_path, svn_w
     {
       /* Common caller error: Can't open a baton when there is one. */
       svn_error_clear(err);
-      SVN_ERR(svn_wc_locked(&locked, dir_path, pool));
+
+      SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+                                             svn_wc__adm_get_db(related),
+                                             pool));
+
+      SVN_ERR(svn_wc_locked2(NULL, &locked, wc_ctx, dir_abspath, pool));
       SVN_ERR(svn_wc_entries_read(&entries, related, TRUE, pool));
     }
   else
     {
-      const char *dir_abspath, *lockfile_path;
+      const char *lockfile_path;
       svn_node_kind_t kind;
 
       /* ### Should svn_wc_adm_open3 be returning UPGRADE_REQUIRED? */
@@ -101,7 +114,6 @@ entries_dump(const char *dir_path, svn_w
         return err;
       svn_error_clear(err);
       adm_access = NULL;
-      SVN_ERR(svn_dirent_get_absolute(&dir_abspath, dir_path, pool));
       SVN_ERR(svn_wc__read_entries_old(&entries, dir_abspath, pool, pool));
       lockfile_path = svn_dirent_join_many(pool, dir_path,
                                            svn_wc_get_adm_dir(pool),
@@ -161,6 +173,9 @@ entries_dump(const char *dir_path, svn_w
       printf("entries['%s'] = e\n", (const char *)key);
     }
 
+  if (wc_ctx)
+    SVN_ERR(svn_wc_context_destroy(wc_ctx));
+
   if (adm_access)
     SVN_ERR(svn_wc_adm_close2(adm_access, pool));
 
@@ -271,6 +286,16 @@ tree_dump_dir(const char *local_abspath,
   if (kind != svn_node_dir)
     return SVN_NO_ERROR;
 
+  if (strcmp(local_abspath, bt->root_abspath) != 0)
+    {
+      svn_boolean_t is_wcroot;
+      SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, bt->wc_ctx->db,
+                                   local_abspath, scratch_pool));
+
+      if (is_wcroot)
+        return SVN_NO_ERROR; /* Report the stub, but not the data */
+    }
+
   /* If LOCAL_ABSPATH a child of or equal to ROOT_ABSPATH, then display
      a relative path starting with PREFIX_PATH. */
   path = svn_dirent_skip_ancestor(bt->root_abspath, local_abspath);
@@ -288,19 +313,6 @@ tree_dump_dir(const char *local_abspath,
 }
 
 static svn_error_t *
-tree_dump_txn(void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool)
-{
-  struct directory_walk_baton *bt = baton;
-
-  SVN_ERR(svn_wc__internal_walk_children(bt->wc_ctx->db, bt->root_abspath, 
FALSE,
-                                         NULL, tree_dump_dir, bt,
-                                         svn_depth_infinity,
-                                         NULL, NULL, scratch_pool));
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
 tree_dump(const char *path,
           apr_pool_t *scratch_pool)
 {
@@ -325,7 +337,12 @@ tree_dump(const char *path,
   SVN_ERR(svn_wc__db_temp_borrow_sdb(&sdb, bt.wc_ctx->db, bt.root_abspath,
                                      scratch_pool));
 
-  SVN_ERR(svn_sqlite__with_lock(sdb, tree_dump_txn, &bt, scratch_pool));
+  SVN_SQLITE__WITH_LOCK(
+      svn_wc__internal_walk_children(db, bt.root_abspath, FALSE,
+                                     NULL, tree_dump_dir, &bt,
+                                     svn_depth_infinity,
+                                     NULL, NULL, scratch_pool),
+      sdb);
 
   /* And close everything we've opened */
   SVN_ERR(svn_wc_context_destroy(bt.wc_ctx));

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/entries_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/entries_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/entries_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/entries_tests.py Sun 
Jun 14 20:58:10 2015
@@ -102,7 +102,7 @@ def basic_entries(sbox):
   expected_status.tweak('A/B/E/beta', wc_rev=2)
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output, expected_status,
-                                        None,
+                                        [],
                                         alpha_path, beta_path)
 
   # bump 'G' and iota another revision (3) for later testing
@@ -117,7 +117,7 @@ def basic_entries(sbox):
   expected_status.tweak('A/D/G', 'iota', wc_rev=3)
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output, expected_status,
-                                        None,
+                                        [],
                                         G_path, iota_path)
 
   # Add a file over the DELETED 'alpha'. It should be schedule-add.

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/export_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/export_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/export_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/export_tests.py Sun 
Jun 14 20:58:10 2015
@@ -500,8 +500,7 @@ def export_with_state_deleted(sbox):
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.remove('A/B/E/alpha')
   svntest.actions.run_and_verify_commit(wc_dir,
-                                        expected_output, expected_status,
-                                        None, wc_dir)
+                                        expected_output, expected_status)
 
   export_target = sbox.add_wc_path('export')
   expected_output = svntest.wc.State(export_target, {
@@ -1016,18 +1015,18 @@ def export_file_external(sbox):
 @Issue(4427)
 def export_file_externals2(sbox):
   "exporting file externals"
-  
+
   sbox.build()
   sbox.simple_mkdir('DIR', 'DIR2')
-  
+
   sbox.simple_propset('svn:externals', '^/iota file', 'DIR')
   sbox.simple_propset('svn:externals', '^/DIR TheDir', 'DIR2')
   sbox.simple_commit()
   sbox.simple_update()
-  
+
   tmp = sbox.add_wc_path('tmp')
   os.mkdir(tmp)
-  
+
   expected_output = svntest.wc.State(tmp, {
     'file'          : Item(status='A '),
   })
@@ -1040,7 +1039,7 @@ def export_file_externals2(sbox):
                                         tmp,
                                         expected_output,
                                         expected_disk)
-  
+
   expected_output = svntest.wc.State(tmp, {
     'DIR/file'           : Item(status='A '),
   })
@@ -1052,7 +1051,7 @@ def export_file_externals2(sbox):
                                         os.path.join(tmp, 'DIR'),
                                         expected_output,
                                         expected_disk)
-                                        
+
   expected_output = svntest.wc.State(tmp, {
     'DIR2/TheDir/file' : Item(status='A '),
   })


Reply via email to