Index: subversion/libsvn_client/merge.c
===================================================================
--- subversion/libsvn_client/merge.c	(revision 1437777)
+++ subversion/libsvn_client/merge.c	(working copy)
@@ -4935,7 +4935,7 @@ drive_merge_report_editor(const char *target_abspa
   SVN_ERR(svn_client__get_diff_editor(&diff_editor, &diff_edit_baton,
                                       depth,
                                       merge_b->ra_session2, source->loc1->rev,
-                                      FALSE /* walk_deleted_dirs */,
+                                      TRUE /* walk_deleted_dirs */,
                                       TRUE /* text_deltas */,
                                       &merge_callbacks, merge_b,
                                       merge_b->ctx->cancel_func,
Index: subversion/tests/cmdline/merge_tests.py
===================================================================
--- subversion/tests/cmdline/merge_tests.py	(revision 1437777)
+++ subversion/tests/cmdline/merge_tests.py	(working copy)
@@ -1595,8 +1595,11 @@ def merge_skips_obstructions(sbox):
   # No-op merge still sets mergeinfo
   expected_status.tweak('', status=' M')
   expected_skip = wc.State(wc_dir, {
-    'iota'  : Item(verb='Skipped'),
-    'A/D/G' : Item(verb='Skipped'),
+    'iota'      : Item(verb='Skipped'),
+    'A/D/G'     : Item(verb='Skipped'),
+    'A/D/G/tau' : Item(verb='Skipped'),
+    'A/D/G/rho' : Item(verb='Skipped'),
+    'A/D/G/pi'  : Item(verb='Skipped'),
     })
   svntest.actions.run_and_verify_merge(wc_dir, '2', '3',
                                        sbox.repo_url, None,
@@ -2520,6 +2523,8 @@ def merge_dir_replace(sbox):
     'foo/file foo'   : Item(status='A '),
     'foo/bar'        : Item(status='A '),
     'foo/bar/new file 3' : Item(status='A '),
+    'foo/new file'      : Item(status='D '),
+    'foo/new file 2'    : Item(status='D '),
     })
   expected_mergeinfo_output = wc.State(C_path, {
     '' : Item(status=' U'),
@@ -2626,8 +2631,9 @@ def merge_dir_and_file_replace(sbox):
                                         None, wc_dir)
   # Merge replacement of foo onto C
   expected_output = wc.State(C_path, {
+    'foo/new file'      : Item(status='D '),
     'foo'                : Item(status='R '),
-    'foo/new file 2'     : Item(status='A '),
+    'foo/new file 2'     : Item(status='A ', prev_status='D '),
     'foo/bar'            : Item(status='A '),
     'foo/bar/new file 3' : Item(status='A '),
     })
Index: subversion/tests/cmdline/revert_tests.py
===================================================================
--- subversion/tests/cmdline/revert_tests.py	(revision 1437777)
+++ subversion/tests/cmdline/revert_tests.py	(working copy)
@@ -846,6 +846,8 @@ def status_of_missing_dir_after_revert_replaced_wi
 
   # now rollback to r1, thereby reinstating the old 'G'
   expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G/beta'        : Item(status='D '),
+    'A/D/G/alpha'       : Item(status='D '),
     'A/D/G': Item(status='R '),
     'A/D/G/rho': Item(status='A '),
     'A/D/G/pi': Item(status='A '),
Index: subversion/tests/cmdline/merge_tree_conflict_tests.py
===================================================================
--- subversion/tests/cmdline/merge_tree_conflict_tests.py	(revision 1437777)
+++ subversion/tests/cmdline/merge_tree_conflict_tests.py	(working copy)
@@ -124,6 +124,8 @@ def delete_file_and_dir(sbox):
   expected_output = wc.State(B2_path, {
     ''        : Item(),
     'lambda'  : Item(status='  ', treeconflict='C'),
+    'E/alpha' : Item(status='D '),
+    'E/beta'  : Item(status='D '),
     'E'       : Item(status='  ', treeconflict='C'),
     })
   expected_mergeinfo_output = wc.State(B2_path, {
@@ -134,8 +136,6 @@ def delete_file_and_dir(sbox):
   expected_disk = wc.State('', {
     ''        : Item(props={SVN_PROP_MERGEINFO : '/A/B:3'}),
     'E'       : Item(props={'foo' : 'foo_val'}),
-    'E/alpha' : Item("This is the file 'alpha'.\n"),
-    'E/beta'  : Item("This is the file 'beta'.\n"),
     'F'       : Item(),
     'lambda'  : Item("This is the file 'lambda'.\n",
                      props={'foo' : 'foo_val'}),
@@ -143,8 +143,8 @@ def delete_file_and_dir(sbox):
   expected_status2 = wc.State(B2_path, {
     ''        : Item(status=' M'),
     'E'       : Item(status=' M', treeconflict='C'),
-    'E/alpha' : Item(status='  '),
-    'E/beta'  : Item(status='  '),
+    'E/alpha' : Item(status='D '),
+    'E/beta'  : Item(status='D '),
     'F'       : Item(status='  '),
     'lambda'  : Item(status=' M', treeconflict='C'),
     })
@@ -1126,8 +1126,17 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
   # use case 5, as in notes/tree-conflicts/use-cases.txt
   # 5.1) local leaf edit, incoming tree delete
 
-  expected_output = deep_trees_conflict_output
+  expected_output = deep_trees_conflict_output.copy()
 
+  expected_output.add({
+    'DDF/D1/D2'         : Item(status='  ', treeconflict='C'),
+    'DDF/D1/D2/gamma'   : Item(status='  ', treeconflict='C'),
+    'DD/D1/D2'          : Item(status='  ', treeconflict='C'),
+    'DDD/D1/D2'         : Item(status='  ', treeconflict='C'),
+    'DDD/D1/D2/D3'      : Item(status='  ', treeconflict='C'),
+    'DF/D1/beta'        : Item(status='  ', treeconflict='C'),
+  })
+
   expected_disk = disk_after_leaf_edit
 
   expected_status = svntest.wc.State('', {
@@ -1137,12 +1146,12 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
     'D/D1/delta'        : Item(status='A ', wc_rev='0'),
     'DD'                : Item(status='  ', wc_rev='3'),
     'DD/D1'             : Item(status='  ', treeconflict='C', wc_rev='3'),
-    'DD/D1/D2'          : Item(status=' M', wc_rev='3'),
+    'DD/D1/D2'          : Item(status=' M', wc_rev='3', treeconflict='C'),
     'DD/D1/D2/epsilon'  : Item(status='A ', wc_rev='0'),
     'DDD'               : Item(status='  ', wc_rev='3'),
     'DDD/D1'            : Item(status='  ', treeconflict='C', wc_rev='3'),
-    'DDD/D1/D2'         : Item(status='  ', wc_rev='3'),
-    'DDD/D1/D2/D3'      : Item(status=' M', wc_rev='3'),
+    'DDD/D1/D2'         : Item(status='  ', wc_rev='3', treeconflict='C'),
+    'DDD/D1/D2/D3'      : Item(status=' M', wc_rev='3', treeconflict='C'),
     'DDD/D1/D2/D3/zeta' : Item(status='A ', wc_rev='0'),
     'DDF'               : Item(status='  ', wc_rev='3'),
     'DDF/D1'            : Item(status='  ', treeconflict='C', wc_rev='3'),
@@ -1150,9 +1159,12 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
     'DDF/D1/D2/gamma'   : Item(status='MM', wc_rev='3'),
     'DF'                : Item(status='  ', wc_rev='3'),
     'DF/D1'             : Item(status='  ', treeconflict='C', wc_rev='3'),
-    'DF/D1/beta'        : Item(status='MM', wc_rev='3'),
+    'DF/D1/beta'        : Item(status='MM', wc_rev='3', treeconflict='C'),
     'F'                 : Item(status='  ', wc_rev='3'),
     'F/alpha'           : Item(status='MM', treeconflict='C', wc_rev='3'),
+
+    'DDF/D1/D2'         : Item(status='  ', treeconflict='C', wc_rev='3'),
+    'DDF/D1/D2/gamma'   : Item(status='MM', treeconflict='C', wc_rev='3'),
     })
 
   expected_skip = svntest.wc.State('', {
@@ -1694,12 +1706,17 @@ def merge_replace_causes_tree_conflict(sbox):
   # svn merge $URL/A $URL/branch A
   expected_stdout = expected_merge_output(None, [
     # merge
-    '   C ' + A_B_E + '\n',
-    '   C ' + A_mu + '\n',
-    '   C ' + A_D_G_pi + '\n',
-    '   C ' + A_D_H + '\n',
+    'D    %s\n' % sbox.ospath('A/B/E/alpha'),
+    'D    %s\n' % sbox.ospath('A/B/E/beta'),
+    '   C %s\n' % sbox.ospath('A/B/E'),
+    '   C %s\n' % sbox.ospath('A/mu'),
+    '   C %s\n' % sbox.ospath('A/D\G/pi'),
+    'D    %s\n' % sbox.ospath('A/D/H/chi'),
+    'D    %s\n' % sbox.ospath('A/D/H/omega'),
+    'D    %s\n' % sbox.ospath('A/D/H/psi'),
+    '   C %s\n' % sbox.ospath('A/D/H'),
     # mergeinfo
-    ' U   ' + A + '\n',
+    ' U   %s\n' % A,
   ], target=A, two_url=True, tree_conflicts=4)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'merge',
@@ -1710,6 +1727,8 @@ def merge_replace_causes_tree_conflict(sbox):
   expected_status.tweak('A/D/G/pi', 'A/mu', status='M ', treeconflict='C')
   expected_status.tweak('A/D/H', status=' M', treeconflict='C')
   expected_status.tweak('A/B/E', status=' M', treeconflict='C')
+  expected_status.tweak('A/B/E/alpha', 'A/B/E/beta', 'A/D/H/chi',
+                        'A/D/H/omega', 'A/D/H/psi', status='D ')
 
   actions.run_and_verify_status(wc_dir, expected_status)
 

