Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py Sun 
Jun 14 20:58:10 2015
@@ -495,8 +495,7 @@ def delete_missing(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 # Regression test for issue #854:
@@ -721,8 +720,7 @@ def replace_dir_delete_child(sbox):
 
   svntest.actions.run_and_verify_commit(sbox.wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None, sbox.wc_dir)
+                                        expected_status)
 
 
 ########################################################################

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py Sun 
Jun 14 20:58:10 2015
@@ -86,8 +86,7 @@ def general_symlink(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None,
-                                        wc_dir)
+                                        expected_status)
 
   ## Now we should update to the previous version, verify that no
   ## symlink is present, then update back to HEAD and see if the symlink
@@ -133,7 +132,7 @@ def general_symlink(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
 
 @SkipUnless(svntest.main.is_posix_os)
@@ -250,7 +249,7 @@ def copy_tree_with_symlink(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
   # Copy H to H2
   H_path = os.path.join(wc_dir, 'A', 'D', 'H')
   H2_path = os.path.join(wc_dir, 'A', 'D', 'H2')
@@ -297,7 +296,7 @@ def replace_symlink_with_file(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
 
   # Now replace the symlink with a normal file and try to commit, we
@@ -350,7 +349,7 @@ def remove_symlink(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Now remove it
   svntest.actions.run_and_verify_svn(None, [], 'rm', newfile_path)
@@ -366,7 +365,7 @@ def remove_symlink(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 @SkipUnless(server_has_mergeinfo)
@@ -395,8 +394,7 @@ def merge_symlink_into_file(sbox):
     'A/Dprime/gamma' : Item(verb='Deleting'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
   # Commit a symlink in its place
   linktarget_path = os.path.join(wc_dir, 'linktarget')
@@ -407,8 +405,7 @@ def merge_symlink_into_file(sbox):
     'A/Dprime/gamma' : Item(verb='Adding'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
   # merge the creation of the symlink into the original directory
   svntest.main.run_svn(None,
@@ -430,8 +427,7 @@ def merge_symlink_into_file(sbox):
     'A/D/gamma' : Item(verb='Replacing'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
 
 
@@ -460,8 +456,7 @@ def merge_file_into_symlink(sbox):
     'A/Dprime/gamma' : Item(verb='Deleting'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
   # Commit a symlink in its place
   linktarget_path = os.path.join(wc_dir, 'linktarget')
@@ -472,8 +467,7 @@ def merge_file_into_symlink(sbox):
     'A/Dprime/gamma' : Item(verb='Adding'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
   svntest.main.file_write(gamma_path, 'changed file', 'w+')
 
@@ -481,8 +475,7 @@ def merge_file_into_symlink(sbox):
     'A/D/gamma' : Item(verb='Sending'),
     })
 
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None,
-                                        wc_dir)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output, None)
 
   # ok, now merge the change to the file into the symlink we created, this
   # gives us a weird error
@@ -498,7 +491,8 @@ def checkout_repo_with_symlinks(sbox):
 
   svntest.actions.load_repo(sbox, os.path.join(os.path.dirname(sys.argv[0]),
                                                'special_tests_data',
-                                               'symlink.dump'))
+                                               'symlink.dump'),
+                            create_wc=False)
 
   expected_output = svntest.wc.State(sbox.wc_dir, {
     'from': Item(status='A '),
@@ -564,7 +558,8 @@ def checkout_repo_with_unknown_special_t
 
   svntest.actions.load_repo(sbox, os.path.join(os.path.dirname(sys.argv[0]),
                                                'special_tests_data',
-                                               'bad-special-type.dump'))
+                                               'bad-special-type.dump'),
+                            create_wc=False)
 
   expected_output = svntest.wc.State(sbox.wc_dir, {
     'special': Item(status='A '),
@@ -604,39 +599,78 @@ def replace_symlink_with_dir(sbox):
   expected_output = svntest.wc.State(wc_dir, {
   })
 
-  error_re_string = 'E145001: (Entry|Node).*has.*changed (special|kind)'
+  error_re_string = '.*E145001: (Entry|Node).*has.*changed (special|kind).*'
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        None, error_re_string, wc_dir)
+                                        None, error_re_string)
 
 # test for issue #1808: svn up deletes local symlink that obstructs
 # versioned file
 @Issue(1808)
-@SkipUnless(svntest.main.is_posix_os)
 def update_obstructing_symlink(sbox):
   "symlink obstructs incoming delete"
 
   sbox.build()
   wc_dir = sbox.wc_dir
-  mu_path = os.path.join(wc_dir, 'A', 'mu')
-  mu_url = sbox.repo_url + '/A/mu'
-  iota_path = os.path.join(wc_dir, 'iota')
+  mu_path = sbox.ospath('A/mu')
 
-  # delete A/mu and replace it with a symlink
-  svntest.main.run_svn(None, 'rm', mu_path)
-  os.symlink(iota_path, mu_path)
+  iota_abspath = os.path.abspath(sbox.ospath('iota'))
 
-  svntest.main.run_svn(None, 'rm', mu_url,
-                       '-m', 'log msg')
+  # delete mu and replace it with an (not-added) symlink
+  sbox.simple_rm('A/mu')
+  sbox.simple_symlink(iota_abspath, 'A/mu')
 
-  svntest.main.run_svn(None,
-                       'up', wc_dir)
+  # delete pi and replace it with an added symlink
+  sbox.simple_rm('A/D/G/pi')
+  sbox.simple_add_symlink(iota_abspath, 'A/D/G/pi')
 
-  # check that the symlink is still there
-  target = os.readlink(mu_path)
-  if target != iota_path:
-    raise svntest.Failure
+  if not os.path.exists(mu_path):
+      raise svntest.Failure("mu should be there")
+
+  # Now remove mu and pi in the repository
+  svntest.main.run_svn(None, 'rm', '-m', 'log msg',
+                       sbox.repo_url + '/A/mu',
+                       sbox.repo_url + '/A/D/G/pi')
+
+  # We expect tree conflicts
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/mu':         Item(status='  ', treeconflict='C'),
+    'A/D/G/pi':     Item(status='  ', treeconflict='C')
+  })
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+  expected_status.tweak('A/mu', status='? ', treeconflict='C',
+                        wc_rev=None)
+
+  expected_status.tweak('A/D/G/pi', status='A ',treeconflict='C',
+                        wc_rev='-')
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output, None,
+                                        expected_status)
+
+  expected_info = [
+    {
+      'Path': re.escape(sbox.ospath('A/D/G/pi')),
+      'Tree conflict': 'local file replace, incoming file delete or move.*'
+    },
+    {
+      'Path': re.escape(sbox.ospath('A/mu')),
+      'Tree conflict': 'local file delete, incoming file delete or move.*'
+    }
+  ]
 
+  svntest.actions.run_and_verify_info(expected_info,
+                                      sbox.ospath('A/D/G/pi'),
+                                      sbox.ospath('A/mu'))
+
+  # check that the symlink is still there
+  if not os.path.exists(mu_path):
+      raise svntest.Failure("mu should be there")
+  if svntest.main.is_posix_os():
+    target = os.readlink(mu_path)
+    if target != iota_abspath:
+      raise svntest.Failure("mu no longer points to the same location")
 
 def warn_on_reserved_name(sbox):
   "warn when attempt operation on a reserved name"
@@ -666,7 +700,7 @@ def propvalue_normalized(sbox):
   # Property value should be SVN_PROP_BOOLEAN_TRUE
   expected_propval = ['*']
   svntest.actions.run_and_verify_svn(expected_propval, [],
-                                     'propget', '--strict', 'svn:special',
+                                     'propget', '--no-newline', 'svn:special',
                                      iota2_path)
 
   # Commit and check again.
@@ -678,12 +712,11 @@ def propvalue_normalized(sbox):
     'iota2' : Item(status='  ', wc_rev=2),
     })
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None,
-                                        wc_dir)
+                                        expected_status)
 
   svntest.main.run_svn(None, 'update', wc_dir)
   svntest.actions.run_and_verify_svn(expected_propval, [],
-                                     'propget', '--strict', 'svn:special',
+                                     'propget', '--no-newline', 'svn:special',
                                      iota2_path)
 
 
@@ -727,7 +760,7 @@ def symlink_destination_change(sbox):
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Modify the symlink to point somewhere else
   os.remove(newfile_path)
@@ -899,8 +932,7 @@ def update_symlink(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
 #----------------------------------------------------------------------
 @Issue(4091)
@@ -1142,8 +1174,7 @@ def incoming_symlink_changes(sbox):
     's-in-place'        : Item(verb='Sending'),
   })
   svntest.actions.run_and_verify_commit(wc_dir,
-                                        expected_output, None, None,
-                                        wc_dir)
+                                        expected_output, None)
 
   # r4
   svntest.main.run_svnmucc('propdel', 'svn:special',
@@ -1174,7 +1205,6 @@ def incoming_symlink_changes(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None, None, None,
                                         check_props=True)
 
   # Update back to r2, to prepare some local changes
@@ -1191,8 +1221,7 @@ def incoming_symlink_changes(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        True,
+                                        [], True,
                                         wc_dir, '-r', '2')
 
   # Ok, now add a property on all of them to make future symlinkness changes
@@ -1216,8 +1245,7 @@ def incoming_symlink_changes(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        True)
+                                        check_props=True)
 
 #----------------------------------------------------------------------
 @Issue(4479)

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py Sun Jun 
14 20:58:10 2015
@@ -107,7 +107,7 @@ def status_update_with_nested_adds(sbox)
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Now we go to the backup working copy, still at revision 1.
   # We will run 'svn st -u', and make sure that newdir/newfile is reported
@@ -735,7 +735,7 @@ use-commit-times = yes
   expected_status = svntest.actions.get_virginal_state(other_wc, 1)
   svntest.actions.run_and_verify_update(other_wc, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         other_wc, '--config-dir', config_dir)
   iota_text_timestamp = get_text_timestamp(other_iota_path)
   if (iota_text_timestamp[17] != ':' or
@@ -1111,7 +1111,7 @@ def inconsistent_eol(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)
 
   # Make the eol style inconsistent and verify that status says nothing.
   svntest.main.file_write(iota_path, "line 1\nline 2\r\n", "wb")
@@ -1144,8 +1144,7 @@ def status_update_with_incoming_props(sb
 
   # Commit the working copy
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Create expected trees for an update to revision 1.
   expected_output = svntest.wc.State(wc_dir, {
@@ -1160,7 +1159,7 @@ def status_update_with_incoming_props(sb
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 1,
+                                        [], True,
                                         '-r', '1', wc_dir)
 
   # Can't use run_and_verify_status here because the out-of-date
@@ -1248,8 +1247,7 @@ def status_update_verbose_with_incoming_
 
   # Commit the working copy
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Create expected trees for an update to revision 1.
   expected_output = svntest.wc.State(wc_dir, {
@@ -1265,7 +1263,7 @@ def status_update_verbose_with_incoming_
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 1,
+                                        [], True,
                                         '-r', '1', wc_dir)
 
   # Can't use run_and_verify_status here because the out-of-date
@@ -1326,8 +1324,7 @@ def status_nonrecursive_update(sbox):
   expected_status.tweak('A/D/gamma', wc_rev=2, status='  ')
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Create expected trees for an update to revision 1.
   expected_output = svntest.wc.State(wc_dir, {
@@ -1342,7 +1339,7 @@ def status_nonrecursive_update(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         '-r', '1', wc_dir)
 
   # Check the remote status of folder A (non-recursively)
@@ -1382,8 +1379,7 @@ def change_files_and_commit(wc_dir, file
     expected_status.tweak(file, wc_rev=commitrev, status='  ')
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
 def status_depth_local(sbox):
   "run 'status --depth=X' with local changes"
@@ -1602,44 +1598,81 @@ def status_dash_u_deleted_directories(sb
 
   # check status -u of B
   expected = svntest.verify.UnorderedOutput(
-         ["D                1   %s\n" % "B",
-          "D                1   %s\n" % os.path.join("B", "lambda"),
-          "D                1   %s\n" % os.path.join("B", "E"),
-          "D                1   %s\n" % os.path.join("B", "E", "alpha"),
-          "D                1   %s\n" % os.path.join("B", "E", "beta"),
-          "D                1   %s\n" % os.path.join("B", "F"),
+         ["D                1        1 jrandom      %s\n" % \
+                                        "B",
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "lambda"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E", "alpha"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E", "beta"),
+          "D                1        1 jrandom      %s\n" % 
+          os.path.join("B", "F"),
           "Status against revision:      1\n" ])
   svntest.actions.run_and_verify_svn(expected,
                                      [],
+                                     "status", "-u", "-v", "B")
+
+  expected = \
+         ["D                1   %s\n" % "B",
+          "Status against revision:      1\n" ]
+  svntest.actions.run_and_verify_svn(expected,
+                                     [],
                                      "status", "-u", "B")
 
+
   # again, but now from inside B, should give the same output
   if not os.path.exists('B'):
     os.mkdir('B')
   os.chdir("B")
   expected = svntest.verify.UnorderedOutput(
-         ["D                1   %s\n" % ".",
-          "D                1   %s\n" % "lambda",
-          "D                1   %s\n" % "E",
-          "D                1   %s\n" % os.path.join("E", "alpha"),
-          "D                1   %s\n" % os.path.join("E", "beta"),
-          "D                1   %s\n" % "F",
+         ["D                1        1 jrandom      %s\n" % \
+                                        ".",
+          "D                1        1 jrandom      %s\n" % \
+                                        "lambda",
+          "D                1        1 jrandom      %s\n" % \
+                                        "E",
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("E", "alpha"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("E", "beta"),
+          "D                1        1 jrandom      %s\n" % \
+                                        "F",
           "Status against revision:      1\n" ])
   svntest.actions.run_and_verify_svn(expected,
                                      [],
+                                     "status", "-u", "-v", ".")
+
+  expected = \
+         ["D                1   %s\n" % ".",
+          "Status against revision:      1\n" ]
+  svntest.actions.run_and_verify_svn(expected,
+                                     [],
                                      "status", "-u", ".")
 
   # check status -u of B/E
   expected = svntest.verify.UnorderedOutput(
-         ["D                1   %s\n" % os.path.join("B", "E"),
-          "D                1   %s\n" % os.path.join("B", "E", "alpha"),
-          "D                1   %s\n" % os.path.join("B", "E", "beta"),
+         ["D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E", "alpha"),
+          "D                1        1 jrandom      %s\n" % \
+                                        os.path.join("B", "E", "beta"),
           "Status against revision:      1\n" ])
 
   os.chdir(was_cwd)
   os.chdir(A_path)
   svntest.actions.run_and_verify_svn(expected,
                                      [],
+                                     "status", "-u", "-v",
+                                     os.path.join("B", "E"))
+
+
+  expected = [ "Status against revision:      1\n" ]
+  svntest.actions.run_and_verify_svn(expected,
+                                     [],
                                      "status", "-u",
                                      os.path.join("B", "E"))
 
@@ -2093,12 +2126,12 @@ def status_path_handling(sbox):
 
 def status_move_missing_direct(sbox):
   "move information when status is called directly"
-  
+
   sbox.build()
   sbox.simple_copy('A', 'Z')
   sbox.simple_commit('')
   sbox.simple_update('')
-  
+
   sbox.simple_move('Z', 'ZZ')
   sbox.simple_move('A', 'Z')
   sbox.simple_move('Z/B', 'ZB')
@@ -2108,14 +2141,14 @@ def status_move_missing_direct(sbox):
   # Somehow 'svn status' now shows different output for 'ZB/E'
   # when called directly and via an ancestor, as this handles
   # multi-layer in a different way
-  
+
   # Note that the status output may change over different Subversion revisions,
   # but the status on a node should be identical anyway 'svn status' is called
   # on it.
-  
+
   expected_output = [
     'A  +    %s\n' % sbox.ospath('ZB'),
-    '        > moved from %s\n' % os.path.join('..', 'Z', 'B'),    
+    '        > moved from %s\n' % os.path.join('..', 'Z', 'B'),
     'D  +    %s\n' % sbox.ospath('ZB/E'),
     '        > moved to %s\n' % os.path.join('..', 'Z', 'B', 'E'),
   ]
@@ -2133,7 +2166,7 @@ def status_move_missing_direct(sbox):
 
 def status_move_missing_direct_base(sbox):
   "move when status is called directly with base"
-  
+
   sbox.build()
   sbox.simple_copy('A', 'Z')
   sbox.simple_mkdir('Q')
@@ -2141,10 +2174,10 @@ def status_move_missing_direct_base(sbox
   sbox.simple_mkdir('Q/ZB/E')
   sbox.simple_commit('')
   sbox.simple_update('')
-  
+
   sbox.simple_rm('Q')
   sbox.simple_mkdir('Q')
-  
+
   sbox.simple_move('Z', 'ZZ')
   sbox.simple_move('A', 'Z')
   sbox.simple_move('Z/B', 'Q/ZB')
@@ -2154,14 +2187,14 @@ def status_move_missing_direct_base(sbox
   # Somehow 'svn status' now shows different output for 'Q/ZB/E'
   # when called directly and via an ancestor, as this handles
   # multi-layer in a different way
-  
+
   # Note that the status output may change over different Subversion revisions,
   # but the status on a node should be identical anyway 'svn status' is called
   # on it.
-  
+
   # This test had a different result as status_move_missing_direct at the time 
of
   # writing this test.
-  
+
   expected_output = [
     'A  +    %s\n' % sbox.ospath('Q/ZB'),
     '        > moved from %s\n' % os.path.join('..', '..', 'Z', 'B'),
@@ -2180,6 +2213,96 @@ def status_move_missing_direct_base(sbox
   svntest.actions.run_and_verify_svn(expected_output, [], 'status',
                                      sbox.ospath('Q/ZB/E'), '--depth', 'empty')
 
+def status_missing_conflicts(sbox):
+  "status missing certain conflicts"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+  sbox.simple_propset('q', 'r', 'A/B/E/alpha', 'A/B/E/beta')
+  sbox.simple_commit()
+
+  sbox.simple_move('A/B/E/alpha', 'alpha')
+  sbox.simple_move('A/B/E/beta', 'beta')
+
+  sbox.simple_rm('A/B/E')
+
+  sbox.simple_update('A/B/E', revision=1)
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/B/E', status='D ', treeconflict='C', wc_rev=1)
+  expected_status.tweak('A/B/E/alpha', status='D ', treeconflict='C', wc_rev=1,
+                        moved_to='alpha')
+  expected_status.tweak('A/B/E/beta', status='D ', treeconflict='C', wc_rev=1,
+                        moved_to='beta')
+  expected_status.add({
+    'alpha' : Item(status='A ', copied='+', moved_from='A/B/E/alpha', 
wc_rev='-'),
+    'beta'  : Item(status='A ', copied='+', moved_from='A/B/E/beta', 
wc_rev='-')
+  })
+
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  expected_info = [
+    {
+        'Tree conflict': 'local file moved away, incoming file edit upon 
update.*'
+    },
+    {
+        'Tree conflict': 'local file moved away, incoming file edit upon 
update.*'
+    }
+  ]
+  svntest.actions.run_and_verify_info(expected_info,
+                                      sbox.ospath('A/B/E/alpha'),
+                                      sbox.ospath('A/B/E/beta'))
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'resolve', '--accept=mine-conflict',
+                                     '--depth=empty', sbox.ospath('A/B/E'))
+  expected_status.tweak('A/B/E', treeconflict=None)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  # Now replace with directory
+  sbox.simple_mkdir('A/B/E')
+  expected_status.tweak('A/B/E', status='R ')
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_info(expected_info,
+                                      sbox.ospath('A/B/E/alpha'),
+                                      sbox.ospath('A/B/E/beta'))
+
+  #Recreate scenario for file
+  sbox.simple_rm('A/B/E', 'alpha', 'beta')
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'revert', '-R', sbox.ospath('A/B/E'))
+
+  sbox.simple_update('A/B/E', revision=2)
+
+  sbox.simple_move('A/B/E/alpha', 'alpha')
+  sbox.simple_move('A/B/E/beta', 'beta')
+
+  sbox.simple_rm('A/B/E')
+  sbox.simple_update('A/B/E', revision=1)
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'resolve', '--accept=mine-conflict',
+                                     '--depth=empty', sbox.ospath('A/B/E'))
+
+  sbox.simple_append('A/B/E', 'something')
+  expected_status.tweak('A/B/E', status='D ')
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  sbox.simple_add('A/B/E')
+
+  # In the entries world A/B/E doesn't have children..
+  expected_status.tweak('A/B/E', status='R ', entry_kind='file')
+
+  # Tree conflicts still in db
+  svntest.actions.run_and_verify_info(expected_info,
+                                      sbox.ospath('A/B/E/alpha'),
+                                      sbox.ospath('A/B/E/beta'))
+
+  # But not in status!
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
+
+
 ########################################################################
 # Run the tests
 
@@ -2230,6 +2353,7 @@ test_list = [ None,
               status_path_handling,
               status_move_missing_direct,
               status_move_missing_direct_base,
+              status_missing_conflicts,
              ]
 
 if __name__ == '__main__':

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py Sun 
Jun 14 20:58:10 2015
@@ -82,6 +82,10 @@ def check_hotcopy_fsfs_fsx(src, dst):
         if dst_dirent == 'write-lock':
           continue
 
+        # Ignore auto-created rep-cache.db-journal file
+        if dst_dirent == 'rep-cache.db-journal':
+          continue
+
         src_dirent = os.path.join(src_dirpath, dst_dirent)
         if not os.path.exists(src_dirent):
           raise svntest.Failure("%s does not exist in hotcopy "
@@ -96,6 +100,10 @@ def check_hotcopy_fsfs_fsx(src, dst):
         if src_file == 'write-lock':
           continue
 
+        # Ignore auto-created rep-cache.db-journal file
+        if src_file == 'rep-cache.db-journal':
+          continue
+
         src_path = os.path.join(src_dirpath, src_file)
         dst_path = os.path.join(dst_dirpath, src_file)
         if not os.path.isfile(dst_path):
@@ -179,7 +187,7 @@ def check_hotcopy_fsfs(src, dst):
 def check_hotcopy_fsx(src, dst):
     "Verify that the SRC FSX repository has been correctly copied to DST."
     check_hotcopy_fsfs_fsx(src, dst)
-        
+
 #----------------------------------------------------------------------
 
 # How we currently test 'svnadmin' --
@@ -784,7 +792,7 @@ def verify_incremental_fsfs(sbox):
   # the listing itself is valid.
   r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
   if r2.endswith('pack'):
-    raise svntest.Skip
+    raise svntest.Skip('Test doesn\'t handle packed revisions')
 
   fp = open(r2, 'wb')
   fp.write("""id: 0-2.0.r2/0
@@ -2051,7 +2059,7 @@ def verify_keep_going(sbox):
   svntest.actions.run_and_verify_svn(None, [],
                                      'mkdir', '-m', 'log_msg',
                                      C_url)
-  
+
   r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
   fp = open(r2, 'r+b')
   fp.write("""inserting junk to corrupt the rev""")
@@ -2070,12 +2078,12 @@ def verify_keep_going(sbox):
                                             ".*r2: E160004:.*",
                                             ".*r3: E160004:.*",
                                             ".*r3: E160004:.*"])
-  exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*",
-                                            "svnadmin: E165011:.*"], False)
 
   if (svntest.main.fs_has_rep_sharing()):
     exp_out.insert(0, ".*Verifying.*metadata.*")
 
+  exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*",
+                                            "svnadmin: E165011:.*"], False)
   if svntest.verify.verify_outputs("Unexpected error while running 'svnadmin 
verify'.",
                                    output, errput, exp_out, exp_err):
     raise svntest.Failure
@@ -2092,6 +2100,7 @@ def verify_keep_going(sbox):
     if (svntest.main.fs_has_rep_sharing()):
       exp_out.insert(0, ".*Verifying repository metadata.*")
 
+  exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*"], False)
   if svntest.verify.verify_outputs("Unexpected error while running 'svnadmin 
verify'.",
                                    output, errput, exp_out, exp_err):
     raise svntest.Failure
@@ -2102,12 +2111,62 @@ def verify_keep_going(sbox):
                                                         sbox.repo_dir)
 
   if svntest.verify.verify_outputs("Output of 'svnadmin verify' is 
unexpected.",
-                                   None, errput, None, "svnadmin: E165011:.*"):
+                                   None, errput, None, "svnadmin: E160004:.*"):
     raise svntest.Failure
 
   # Don't leave a corrupt repository
   svntest.main.safe_rmtree(sbox.repo_dir, True)
 
+
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+def verify_keep_going_quiet(sbox):
+  "svnadmin verify --keep-going --quiet test"
+
+  sbox.build(create_wc = False)
+  repo_url = sbox.repo_url
+  B_url = sbox.repo_url + '/B'
+  C_url = sbox.repo_url + '/C'
+
+  # Create A/B/E/bravo in r2.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'mkdir', '-m', 'log_msg',
+                                     B_url)
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'mkdir', '-m', 'log_msg',
+                                     C_url)
+
+  r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
+  fp = open(r2, 'r+b')
+  fp.write("""inserting junk to corrupt the rev""")
+  fp.close()
+
+  exit_code, output, errput = svntest.main.run_svnadmin("verify",
+                                                        "--keep-going",
+                                                        "--quiet",
+                                                        sbox.repo_dir)
+
+  exp_err = svntest.verify.RegexListOutput([".*Error verifying revision 2.",
+                                            "svnadmin: E160004:.*",
+                                            "svnadmin: E160004:.*",
+                                            ".*Error verifying revision 3.",
+                                            "svnadmin: E160004:.*",
+                                            "svnadmin: E160004:.*",
+                                            "svnadmin: E165011:.*"], False)
+
+  # Insert another expected error from checksum verification
+  if (svntest.main.is_fs_log_addressing()):
+    exp_err.insert(0, "svnadmin: E160004:.*")
+
+  if svntest.verify.verify_outputs(
+          "Unexpected error while running 'svnadmin verify'.",
+          output, errput, None, exp_err):
+    raise svntest.Failure
+
+  # Don't leave a corrupt repository
+  svntest.main.safe_rmtree(sbox.repo_dir, True)
+
+
 @SkipUnless(svntest.main.is_fs_type_fsfs)
 def verify_invalid_path_changes(sbox):
   "detect invalid changed path list entries"
@@ -2227,8 +2286,7 @@ def verify_invalid_path_changes(sbox):
   exp_out = svntest.verify.RegexListOutput([".*Verified revision 0.",
                                             ".*Verified revision 1.",
                                             ".*Error verifying revision 2."])
-  exp_err = svntest.verify.RegexListOutput(["svnadmin: E160020:.*",
-                                            "svnadmin: E165011:.*"], False)
+  exp_err = svntest.verify.RegexListOutput(["svnadmin: E160020:.*"], False)
 
   if (svntest.main.fs_has_rep_sharing()):
     exp_out.insert(0, ".*Verifying.*metadata.*")
@@ -2244,7 +2302,7 @@ def verify_invalid_path_changes(sbox):
                                                         sbox.repo_dir)
 
   if svntest.verify.verify_outputs("Output of 'svnadmin verify' is 
unexpected.",
-                                   None, errput, None, "svnadmin: E165011:.*"):
+                                   None, errput, None, "svnadmin: E160020:.*"):
     raise svntest.Failure
 
   # Don't leave a corrupt repository
@@ -2616,8 +2674,7 @@ def verify_quickly(sbox):
   # resulting in different progress output
   if svntest.main.is_fs_log_addressing():
     exp_out = svntest.verify.RegexListOutput([])
-    exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*",
-                                              "svnadmin: E165011:.*"], False)
+    exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*"], False)
   else:
     exp_out = svntest.verify.RegexListOutput([])
     exp_err = svntest.verify.RegexListOutput([])
@@ -2641,7 +2698,7 @@ def fsfs_hotcopy_progress(sbox):
   # and incremental scenarios.  The progress output can be affected by
   # the --fsfs-packing option, so skip the test if that is the case.
   if svntest.main.options.fsfs_packing:
-    raise svntest.Skip
+    raise svntest.Skip('fsfs packing set')
 
   # Create an empty repository, configure three files per shard.
   sbox.build(create_wc=False, empty=True)
@@ -2755,7 +2812,7 @@ def fsfs_hotcopy_progress_with_revprop_c
   # The progress output can be affected by the --fsfs-packing
   # option, so skip the test if that is the case.
   if svntest.main.options.fsfs_packing:
-    raise svntest.Skip
+    raise svntest.Skip('fsfs packing set')
 
   # Create an empty repository, commit several revisions and hotcopy it.
   sbox.build(create_wc=False, empty=True)
@@ -2925,6 +2982,30 @@ def load_txdelta(sbox):
     ".*Verified revision *"):
     raise svntest.Failure
 
+@Issues(4563)
+def load_no_svndate_r0(sbox):
+  "load without svn:date on r0"
+
+  sbox.build(create_wc=False, empty=True)
+
+  # svn:date exits
+  svntest.actions.run_and_verify_svnlook(['  svn:date\n'], [],
+                                         'proplist', '--revprop', '-r0',
+                                         sbox.repo_dir)
+
+  dump_old = ["SVN-fs-dump-format-version: 2\n", "\n",
+              "UUID: bf52886d-358d-4493-a414-944a6e5ad4f5\n", "\n",
+              "Revision-number: 0\n",
+              "Prop-content-length: 10\n",
+              "Content-length: 10\n", "\n",
+              "PROPS-END\n", "\n"]
+  svntest.actions.run_and_verify_load(sbox.repo_dir, dump_old)
+  
+  # svn:date should have been removed
+  svntest.actions.run_and_verify_svnlook([], [],
+                                         'proplist', '--revprop', '-r0',
+                                         sbox.repo_dir)
+
 ########################################################################
 # Run the tests
 
@@ -2963,6 +3044,7 @@ test_list = [ None,
               mergeinfo_race,
               recover_old_empty,
               verify_keep_going,
+              verify_keep_going_quiet,
               verify_invalid_path_changes,
               verify_denormalized_names,
               fsfs_recover_old_non_empty,
@@ -2979,6 +3061,7 @@ test_list = [ None,
               freeze_same_uuid,
               upgrade,
               load_txdelta,
+              load_no_svndate_r0,
              ]
 
 if __name__ == '__main__':

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py Sun 
Jun 14 20:58:10 2015
@@ -128,9 +128,8 @@ def svnauthz_validate_repo_test(sbox):
   expected_status.add({
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
 
   # Valid authz url (file stored in repo)
   authz_url = repo_url + '/A/authz'
@@ -174,9 +173,8 @@ def svnauthz_validate_txn_test(sbox):
   expected_status.add({
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = ['Exit 0\n']
   verify_logfile(logfilepath, expected_data)
 
@@ -184,9 +182,8 @@ def svnauthz_validate_txn_test(sbox):
   svntest.main.file_append(authz_path, 'x')
   expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
   expected_status.tweak('A/authz', status='  ', wc_rev=3)
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = svntest.verify.RegexOutput(".*?Error parsing authz file: 
'.*?'",
                                              match_all=False)
   verify_logfile(logfilepath, expected_data, delete_log=False)
@@ -201,7 +198,7 @@ def svnauthz_validate_txn_test(sbox):
   svntest.main.file_append(authz_path, 'x')
   expected_status.tweak('A/authz', status='  ', wc_rev=4)
   if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
+                                           expected_status):
     raise svntest.Failure
   expected_data = svntest.verify.ExpectedOutput("Exit 2\n", match_all=False)
   verify_logfile(logfilepath, expected_data)
@@ -279,7 +276,7 @@ def svnauthz_accessof_repo_test(sbox):
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
   if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
+                                           expected_status):
     raise svntest.Failure
 
   # Anonymous access with no path, and no repository should be rw
@@ -412,9 +409,8 @@ def svnauthz_accessof_groups_repo_test(s
     'A/groups'           :  Item(status='  ', wc_rev=2),
   })
 
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
 
   # Anonymous access with no path, and no repository should be no
   # since it returns the highest level of access granted anywhere.
@@ -628,9 +624,8 @@ def svnauthz_accessof_is_repo_test(sbox)
   expected_status.add({
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
 
   # Test an invalid --is option, should get an error message and exit code
   # of 2.
@@ -753,9 +748,8 @@ def svnauthz_accessof_is_repo_test(sbox)
   svntest.main.file_append(authz_path, "x\n")
   expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
   expected_status.tweak('A/authz', wc_rev=3)
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
 
   # Check that --is returns 1 when the syntax is invalid with a url.
   expected_out = svntest.verify.RegexOutput(
@@ -797,9 +791,8 @@ def svnauthz_accessof_txn_test(sbox):
   expected_status.add({
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = ['Exit 0\n']
   verify_logfile(logfilepath, expected_data)
 
@@ -812,18 +805,16 @@ def svnauthz_accessof_txn_test(sbox):
   expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
   expected_status.tweak('A/authz', status='  ', wc_rev=3)
   svntest.main.file_append(authz_path, "groucho = r\n")
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = svntest.verify.ExpectedOutput('Exit 3\n', match_all=False)
   verify_logfile(logfilepath, expected_data)
 
   # break the authz file with a non-existent group and check for an exit 1.
   expected_status.tweak('A/authz', status='  ', wc_rev=4)
   svntest.main.file_append(authz_path, "@friends = rw\n")
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = svntest.verify.ExpectedOutput('Exit 1\n', match_all=False)
   verify_logfile(logfilepath, expected_data)
 
@@ -831,9 +822,8 @@ def svnauthz_accessof_txn_test(sbox):
   expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Deleting')})
   expected_status.remove('A/authz')
   svntest.main.run_svn(None, 'rm', authz_path)
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   expected_data = svntest.verify.ExpectedOutput('Exit 2\n', match_all=False)
   verify_logfile(logfilepath, expected_data)
 
@@ -887,9 +877,8 @@ def svnauthz_compat_mode_repo_test(sbox)
   expected_status.add({
     'A/authz'            :  Item(status='  ', wc_rev=2),
   })
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   svntest.actions.run_and_verify_svnauthz(None, None, 0, True,
                                           authz_url)
 
@@ -897,9 +886,8 @@ def svnauthz_compat_mode_repo_test(sbox)
   svntest.main.file_append(authz_path, "x\n")
   expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')})
   expected_status.tweak('A/authz', status='  ', wc_rev=3)
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status)
   svntest.actions.run_and_verify_svnauthz(None, None, 1, True,
                                           authz_path)
 

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py Sun 
Jun 14 20:58:10 2015
@@ -95,9 +95,7 @@ def test_misc(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   # give the repo a new UUID
   uuid = "01234567-89ab-cdef-89ab-cdef01234567"
@@ -234,9 +232,7 @@ def delete_file_in_moved_dir(sbox):
   ### in order to get this commit working again.
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   exit_code, output, errput = svntest.main.run_svnlook("dirs-changed",
                                                        repo_dir)
@@ -383,9 +379,7 @@ def changed_copy_info(sbox):
     })
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   exit_code, output, errput = svntest.main.run_svnlook("changed", repo_dir)
   if errput:
@@ -481,9 +475,7 @@ def diff_ignore_whitespace(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   # Check the output of 'svnlook diff -x --ignore-space-change' on mu.
   # It should not print anything.
@@ -536,9 +528,7 @@ def diff_ignore_eolstyle(sbox):
 
     svntest.actions.run_and_verify_commit(wc_dir,
                                           expected_output,
-                                          expected_status,
-                                          None,
-                                          wc_dir)
+                                          expected_status)
 
     # Grab the diff
     exit_code, expected_output, err = svntest.actions.run_and_verify_svn(
@@ -705,7 +695,6 @@ fp.close()"""
                     "Properties on '/A':\n",
                     '  bogus_prop\n',
                     '  svn:log\n', '  svn:author\n',
-                    '  svn:check-locks\n', # internal prop, not really expected
                     '  bogus_rev_prop\n',
                     '  svn:date\n',
                     '  svn:txn-client-compat-version\n',

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py Sun 
Jun 14 20:58:10 2015
@@ -345,7 +345,7 @@ def propset_root_internal(sbox, target):
                                          'propset', 'foo', 'bar',
                                          target)
   svntest.actions.run_and_verify_svn('bar', [],
-                                     'propget', '--strict', 'foo',
+                                     'propget', '--no-newline', 'foo',
                                      target)
 
   ## propdel on ^/
@@ -355,7 +355,7 @@ def propset_root_internal(sbox, target):
                                          target)
   svntest.actions.run_and_verify_svn([],
                                      '.*W200017: Property.*not found',
-                                     'propget', '--strict', 'foo',
+                                     'propget', '--no-newline', 'foo',
                                      target)
 
 @Issues(3663)
@@ -453,6 +453,56 @@ rm A/B/C/Y
                                      'log', '-qvr3', repo_url)
 
 
+def prohibited_deletes_and_moves(sbox):
+  "test prohibited delete and move operations"
+
+  # These action sequences were allowed in 1.8.13, but are prohibited in 1.9.x
+  # and later.  Most of them probably indicate an inadvertent user mistake.
+  # See dev@, 2015-05-11, "Re: Issue 4579 / svnmucc fails to process certain
+  # deletes", <http://svn.haxx.se/dev/archive-2015-05/0038.shtml>
+
+  sbox.build()
+  svntest.main.file_write(sbox.ospath('file'), "New contents")
+
+  xtest_svnmucc(sbox.repo_url,
+                ["svnmucc: E200009: Can't delete node at 'iota'",
+                 ], #---------
+                '-m', 'r2: modify and delete /iota',
+                'put', sbox.ospath('file'), 'iota',
+                'rm', 'iota')
+
+  xtest_svnmucc(sbox.repo_url,
+                ["svnmucc: E200009: Can't delete node at 'iota'",
+                 ], #---------
+                '-m', 'r2: propset and delete /iota',
+                'propset', 'prop', 'val', 'iota',
+                'rm', 'iota')
+
+  xtest_svnmucc(sbox.repo_url,
+                ["svnmucc: E160013: Can't delete node at 'iota' as it does "
+                 "not exist",
+                 ], #---------
+                '-m', 'r2: delete and delete /iota',
+                'rm', 'iota',
+                'rm', 'iota')
+
+  # Subversion 1.8.13 used to move /iota without applying the text change.
+  xtest_svnmucc(sbox.repo_url,
+                ["svnmucc: E200009: Can't delete node at 'iota'",
+                 ], #---------
+                '-m', 'r2: modify and move /iota',
+                'put', sbox.ospath('file'), 'iota',
+                'mv', 'iota', 'iota2')
+
+  # Subversion 1.8.13 used to move /A without applying the inner remove.
+  xtest_svnmucc(sbox.repo_url,
+                ["svnmucc: E200009: Can't delete node at 'A'",
+                 ], #---------
+                '-m', 'r2: delete /A/B and move /A',
+                'rm', 'A/B',
+                'mv', 'A', 'A1')
+
+
 ######################################################################
 
 test_list = [ None,
@@ -462,6 +512,7 @@ test_list = [ None,
               too_many_log_messages,
               no_log_msg_non_interactive,
               nested_replaces,
+              prohibited_deletes_and_moves,
             ]
 
 if __name__ == '__main__':

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py Sun 
Jun 14 20:58:10 2015
@@ -571,6 +571,7 @@ def dont_drop_valid_mergeinfo_during_inc
   dump_fp.close()
 
   # Blow away the current repos and create an empty one in its place.
+  svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve
   sbox.build(empty=True)
 
   # Create the revprop-change hook for this test
@@ -606,6 +607,7 @@ def dont_drop_valid_mergeinfo_during_inc
   # PART 3: Load a full dump to an non-empty repository.
   #
   # Reset our sandbox.
+  svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve
   sbox.build(empty=True)
 
   # Create the revprop-change hook for this test
@@ -667,6 +669,7 @@ def dont_drop_valid_mergeinfo_during_inc
   # PART 4: Load a a series of incremental dumps to an non-empty repository.
   #
   # Reset our sandbox.
+  svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve
   sbox.build(empty=True)
 
   # Create the revprop-change hook for this test

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh 
Sun Jun 14 20:58:10 2015
@@ -92,16 +92,19 @@ random_port() {
   fi
 }
 
-if type time > /dev/null; then
-  TIME_CMD=time
-else
-  TIME_CMD=""
-fi
+if type time > /dev/null ; then TIME_CMD() { time "$@"; } ; else TIME_CMD() { 
"$@"; } ; fi
 
 MAKE=${MAKE:-make}
+PATH="$PATH:/usr/sbin/:/usr/local/sbin/"
+
+ss > /dev/null 2>&1 || netstat > /dev/null 2>&1 || fail "unable to find ss or 
netstat required to find a free port"
 
 SVNSERVE_PORT=$(random_port)
-while netstat -an | grep $SVNSERVE_PORT | grep 'LISTEN'; do
+while \
+  (ss -ltn sport = :$SVNSERVE_PORT 2>&1 | grep :$SVNSERVE_PORT > /dev/null ) \
+  || \
+  (netstat -an 2>&1 | grep $SVNSERVE_PORT | grep 'LISTEN' > /dev/null ) \
+  do
   SVNSERVE_PORT=$(random_port)
 done
 
@@ -121,13 +124,13 @@ fi
 
 BASE_URL=svn://127.0.0.1:$SVNSERVE_PORT
 if [ $# = 0 ]; then
-  $TIME_CMD "$MAKE" check "BASE_URL=$BASE_URL"
+  TIME_CMD "$MAKE" check "BASE_URL=$BASE_URL"
   r=$?
 else
   cd "$ABS_BUILDDIR/subversion/tests/cmdline/"
   TEST="$1"
   shift
-  $TIME_CMD "./${TEST}_tests.py" "--url=$BASE_URL" $*
+  TIME_CMD "./${TEST}_tests.py" "--url=$BASE_URL" $*
   r=$?
   cd - > /dev/null
 fi

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py 
(original)
+++ 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py 
Sun Jun 14 20:58:10 2015
@@ -30,7 +30,7 @@
 import sys, os
 
 # Test suite-specific modules
-import locale, re, urllib
+import locale, re
 
 # Our testing module
 import svntest
@@ -383,7 +383,7 @@ def identity_copy(sbox):
     except:
       pass
   if locale.setlocale(locale.LC_ALL) != other_locale:
-    raise svntest.Skip
+    raise svntest.Skip('Setting test locale failed')
 
   try:
     run_test(sbox, "copy-bad-encoding.expected.dump",
@@ -471,8 +471,7 @@ def copy_delete_unreadable_child(sbox):
                        src_authz + ':/A': '* =',
                        })
 
-  dest_url = svntest.main.file_scheme_prefix \
-                    + urllib.pathname2url(os.path.abspath(dest_sbox.repo_dir))
+  dest_url = dest_sbox.file_protocol_repo_url()
   run_init(dest_url, sbox.repo_url)
   run_sync(dest_url)
 

Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py Sun 
Jun 14 20:58:10 2015
@@ -28,7 +28,7 @@
 import sys, os
 
 # Test suite-specific modules
-import re, urllib
+import re
 
 # Our testing module
 import svntest
@@ -131,16 +131,14 @@ def setup_and_sync(sbox, dump_file_conte
   repo_url = sbox.repo_url
   cwd = os.getcwd()
   if is_src_ra_local:
-    repo_url = svntest.main.file_scheme_prefix + \
-                        urllib.pathname2url(os.path.join(cwd, sbox.repo_dir))
+    repo_url = sbox.file_protocol_repo_url()
 
   if subdir:
     repo_url = repo_url + subdir
 
   dest_repo_url = dest_sbox.repo_url
   if is_dest_ra_local:
-    dest_repo_url = svntest.main.file_scheme_prefix + \
-                    urllib.pathname2url(os.path.join(cwd, dest_sbox.repo_dir))
+    dest_repo_url = dest_sbox.file_protocol_repo_url()
   run_init(dest_repo_url, repo_url, source_prop_encoding)
 
   run_sync(dest_repo_url, repo_url,

Modified: 
subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py?rev=1685464&r1=1685463&r2=1685464&view=diff
==============================================================================
--- subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py 
(original)
+++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py 
Sun Jun 14 20:58:10 2015
@@ -430,7 +430,7 @@ def run_and_verify_svnsync2(expected_std
 
 
 def load_repo(sbox, dumpfile_path = None, dump_str = None,
-              bypass_prop_validation = False):
+              bypass_prop_validation = False,create_wc=True):
   "Loads the dumpfile into sbox"
   if not dump_str:
     dump_str = open(dumpfile_path, "rb").read()
@@ -443,7 +443,8 @@ def load_repo(sbox, dumpfile_path = None
   # Load the mergetracking dumpfile into the repos, and check it out the repo
   run_and_verify_load(sbox.repo_dir, dump_str.splitlines(True),
                       bypass_prop_validation)
-  run_and_verify_svn(None, [], "co", sbox.repo_url, sbox.wc_dir)
+  if create_wc:
+    run_and_verify_svn(None, [], "co", sbox.repo_url, sbox.wc_dir)
 
   return dump_str
 
@@ -480,13 +481,9 @@ def run_and_verify_svnauthz(expected_std
 #
 
 
-def run_and_verify_checkout2(do_remove,
-                             URL, wc_dir_name, output_tree, disk_tree,
-                             singleton_handler_a = None,
-                             a_baton = None,
-                             singleton_handler_b = None,
-                             b_baton = None,
-                             *args):
+def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree,
+                            expected_stderr=[],
+                            *args, **kw):
   """Checkout the URL into a new directory WC_DIR_NAME. *ARGS are any
   extra optional args to the checkout subcommand.
 
@@ -503,17 +500,12 @@ def run_and_verify_checkout2(do_remove,
   if isinstance(output_tree, wc.State):
     output_tree = output_tree.old_tree()
 
-  # Remove dir if it's already there, unless this is a forced checkout.
-  # In that case assume we want to test a forced checkout's toleration
-  # of obstructing paths.
-  if do_remove:
-    main.safe_rmtree(wc_dir_name)
-
   # Checkout and make a tree of the output, using l:foo/p:bar
   ### todo: svn should not be prompting for auth info when using
   ### repositories with no auth/auth requirements
-  exit_code, output, errput = main.run_svn(None, 'co',
-                                           URL, wc_dir_name, *args)
+  exit_code, output, errput = run_and_verify_svn(None, expected_stderr,
+                                                 'co', URL, wc_dir_name,
+                                                 *args)
   actual = tree.build_tree_from_checkout(output)
 
   # Verify actual output against expected output.
@@ -524,32 +516,7 @@ def run_and_verify_checkout2(do_remove,
     raise
 
   if disk_tree:
-    verify_disk(wc_dir_name, disk_tree, False,
-                singleton_handler_a, a_baton,
-                singleton_handler_b, b_baton)
-
-def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree,
-                            singleton_handler_a = None,
-                            a_baton = None,
-                            singleton_handler_b = None,
-                            b_baton = None,
-                            *args):
-  """Same as run_and_verify_checkout2(), but without the DO_REMOVE arg.
-  WC_DIR_NAME is deleted if present unless the '--force' option is passed
-  in *ARGS."""
-
-
-  # Remove dir if it's already there, unless this is a forced checkout.
-  # In that case assume we want to test a forced checkout's toleration
-  # of obstructing paths.
-  return run_and_verify_checkout2(('--force' not in args),
-                                  URL, wc_dir_name, output_tree, disk_tree,
-                                  singleton_handler_a,
-                                  a_baton,
-                                  singleton_handler_b,
-                                  b_baton,
-                                  *args)
-
+    verify_disk(wc_dir_name, disk_tree, False, **kw)
 
 def run_and_verify_export(URL, export_dir_name, output_tree, disk_tree,
                           *args):
@@ -780,11 +747,8 @@ def verify_update(actual_output,
                   elision_output_tree,
                   disk_tree,
                   status_tree,
-                  singleton_handler_a=None,
-                  a_baton=None,
-                  singleton_handler_b=None,
-                  b_baton=None,
-                  check_props=False):
+                  check_props=False,
+                  extra_files=None):
   """Verify update of WC_DIR_NAME.
 
   The subcommand output (found in ACTUAL_OUTPUT, ACTUAL_MERGEINFO_OUTPUT,
@@ -847,8 +811,7 @@ def verify_update(actual_output,
   # Create a tree by scanning the working copy, and verify it
   if disk_tree:
     verify_disk(wc_dir_name, disk_tree, check_props,
-                singleton_handler_a, a_baton,
-                singleton_handler_b, b_baton)
+                extra_files=extra_files)
 
   # Verify via 'status' command too, if possible.
   if status_tree:
@@ -856,12 +819,22 @@ def verify_update(actual_output,
 
 
 def verify_disk(wc_dir_name, disk_tree, check_props=False,
-                singleton_handler_a = None, a_baton = None,
-                singleton_handler_b = None, b_baton = None):
+                extra_files=None):
   """Verify WC_DIR_NAME against DISK_TREE.  If CHECK_PROPS is set,
   the comparison will examin props.  Returns if successful, raises on
   failure."""
 
+  singleton_handler_a = None
+  a_baton = None,
+  singleton_handler_b = None
+  b_baton = None
+  done_a = None
+
+  if extra_files:
+    singleton_handler_a = svntest.tree.detect_conflict_files
+    done_a = svntest.tree.detect_conflict_files_done
+    a_baton = extra_files
+
   if isinstance(disk_tree, wc.State):
     disk_tree = disk_tree.old_tree()
 
@@ -875,18 +848,15 @@ def verify_disk(wc_dir_name, disk_tree,
     _log_tree_state("ACTUAL DISK TREE:", actual_disk)
     raise
 
-
+  if done_a:
+    done_a(a_baton)
 
 
 def run_and_verify_update(wc_dir_name,
                           output_tree, disk_tree, status_tree,
-                          error_re_string = None,
-                          singleton_handler_a = None,
-                          a_baton = None,
-                          singleton_handler_b = None,
-                          b_baton = None,
+                          expected_stderr=[],
                           check_props = False,
-                          *args):
+                          *args, **kw):
 
   """Update WC_DIR_NAME.  *ARGS are any extra optional args to the
   update subcommand.  NOTE: If *ARGS is specified at all, explicit
@@ -904,38 +874,20 @@ def run_and_verify_update(wc_dir_name,
   None, the 'svn status' output will be verified against STATUS_TREE.
   (This is a good way to check that revision numbers were bumped.)
 
-  For the DISK_TREE verification, SINGLETON_HANDLER_A and
-  SINGLETON_HANDLER_B will be passed to tree.compare_trees -- see that
-  function's doc string for more details.
-
   If CHECK_PROPS is set, then disk comparison will examine props.
 
   Return if successful, raise on failure."""
 
   # Update and make a tree of the output.
-  if len(args):
-    exit_code, output, errput = main.run_svn(error_re_string, 'up', *args)
-  else:
-    exit_code, output, errput = main.run_svn(error_re_string,
-                                             'up', wc_dir_name,
-                                             *args)
+  if len(args) == 0:
+    args = (wc_dir_name,)
 
-  if error_re_string:
-    rm = re.compile(error_re_string)
-    match = None
-    for line in errput:
-      match = rm.search(line)
-      if match:
-        break
-    if not match:
-      raise main.SVNUnmatchedError
+  exit_code, output, errput = run_and_verify_svn(None, expected_stderr, 'up', 
*args)
 
   actual = wc.State.from_checkout(output)
   verify_update(actual, None, None, wc_dir_name,
                 output_tree, None, None, disk_tree, status_tree,
-                singleton_handler_a, a_baton,
-                singleton_handler_b, b_baton,
-                check_props)
+                check_props, **kw)
 
 
 def run_and_parse_info(*args):
@@ -1019,19 +971,20 @@ def run_and_verify_info(expected_infos,
 
     for actual, expected in zip(actual_infos, expected_infos):
       # compare dicts
+      path = actual['Path']
       for key, value in expected.items():
         assert ':' not in key # caller passed impossible expectations?
         if value is None and key in actual:
-          raise main.SVNLineUnequal("Found unexpected key '%s' with value '%s'"
-                                    % (key, actual[key]))
+          raise main.SVNLineUnequal("On '%s': Found unexpected key '%s'\n  
Value '%s'"
+                                    % (path, key, actual[key]))
         if value is not None and key not in actual:
-          raise main.SVNLineUnequal("Expected key '%s' (with value '%s') "
-                                    "not found" % (key, value))
+          raise main.SVNLineUnequal("On '%s': Expected key '%s' not found\n 
Expected value '%s'"
+                                    % (path, key, value))
         if value is not None and not re.match(value, actual[key]):
-          raise verify.SVNUnexpectedStdout("Values of key '%s' don't match:\n"
+          raise verify.SVNUnexpectedStdout("On '%s': Values of key '%s' don't 
match:\n"
                                            "  Expected: '%s' (regex)\n"
                                            "  Found:    '%s' (string)\n"
-                                           % (key, value, actual[key]))
+                                           % (path, key, value, actual[key]))
 
   except:
     sys.stderr.write("Bad 'svn info' output:\n"
@@ -1045,25 +998,16 @@ def run_and_verify_merge(dir, rev1, rev2
                          mergeinfo_output_tree,
                          elision_output_tree,
                          disk_tree, status_tree, skip_tree,
-                         error_re_string = None,
-                         singleton_handler_a = None,
-                         a_baton = None,
-                         singleton_handler_b = None,
-                         b_baton = None,
+                         expected_stderr = [],
                          check_props = False,
                          dry_run = True,
-                         *args):
+                         *args, **kw):
   """Run 'svn merge URL1@REV1 URL2@REV2 DIR' if URL2 is not None
   (for a three-way merge between URLs and WC).
 
   If URL2 is None, run 'svn merge -rREV1:REV2 URL1 DIR'.  If both REV1
   and REV2 are None, leave off the '-r' argument.
 
-  If ERROR_RE_STRING, the merge must exit with error, and the error
-  message must match regular expression ERROR_RE_STRING.
-
-  Else if ERROR_RE_STRING is None, then:
-
   The subcommand output will be verified against OUTPUT_TREE.  Output
   related to mergeinfo notifications will be verified against
   MERGEINFO_OUTPUT_TREE if that is not None.  Output related to mergeinfo
@@ -1103,8 +1047,8 @@ def run_and_verify_merge(dir, rev1, rev2
     pre_disk = tree.build_tree_from_wc(dir)
     dry_run_command = merge_command + ('--dry-run',)
     dry_run_command = dry_run_command + args
-    exit_code, out_dry, err_dry = main.run_svn(error_re_string,
-                                               *dry_run_command)
+    exit_code, out_dry, err_dry = run_and_verify_svn(None, expected_stderr,
+                                                     *dry_run_command)
     post_disk = tree.build_tree_from_wc(dir)
     try:
       tree.compare_trees("disk", post_disk, pre_disk)
@@ -1117,16 +1061,7 @@ def run_and_verify_merge(dir, rev1, rev2
 
   # Update and make a tree of the output.
   merge_command = merge_command + args
-  exit_code, out, err = main.run_svn(error_re_string, *merge_command)
-
-  if error_re_string:
-    if not error_re_string.startswith(".*"):
-      error_re_string = ".*(" + error_re_string + ")"
-    expected_err = verify.RegexOutput(error_re_string, match_all=False)
-    verify.verify_outputs(None, None, err, None, expected_err)
-    return
-  elif err:
-    raise verify.SVNUnexpectedStderr(err)
+  exit_code, out, err = run_and_verify_svn(None, expected_stderr, 
*merge_command)
 
   # Split the output into that related to application of the actual diff
   # and that related to the recording of mergeinfo describing the merge.
@@ -1215,9 +1150,7 @@ def run_and_verify_merge(dir, rev1, rev2
   verify_update(actual_diff, actual_mergeinfo, actual_elision, dir,
                 output_tree, mergeinfo_output_tree, elision_output_tree,
                 disk_tree, status_tree,
-                singleton_handler_a, a_baton,
-                singleton_handler_b, b_baton,
-                check_props)
+                check_props, **kw)
 
 
 def run_and_verify_patch(dir, patch_path,
@@ -1225,7 +1158,7 @@ def run_and_verify_patch(dir, patch_path
                          error_re_string=None,
                          check_props=False,
                          dry_run=True,
-                         *args):
+                         *args, **kw):
   """Run 'svn patch patch_path DIR'.
 
   If ERROR_RE_STRING, 'svn patch' must exit with error, and the error
@@ -1317,7 +1250,7 @@ def run_and_verify_patch(dir, patch_path
 
   verify_update(mytree, None, None, dir,
                 output_tree, None, None, disk_tree, status_tree,
-                check_props=check_props)
+                check_props=check_props, **kw)
 
 
 def run_and_verify_mergeinfo(error_re_string = None,
@@ -1360,54 +1293,31 @@ def run_and_verify_switch(wc_dir_name,
                           wc_target,
                           switch_url,
                           output_tree, disk_tree, status_tree,
-                          error_re_string = None,
-                          singleton_handler_a = None,
-                          a_baton = None,
-                          singleton_handler_b = None,
-                          b_baton = None,
+                          expected_stderr = [],
                           check_props = False,
-                          *args):
+                          *args, **kw):
 
   """Switch WC_TARGET (in working copy dir WC_DIR_NAME) to SWITCH_URL.
 
-  If ERROR_RE_STRING, the switch must exit with error, and the error
-  message must match regular expression ERROR_RE_STRING.
-
-  Else if ERROR_RE_STRING is None, then:
-
   The subcommand output will be verified against OUTPUT_TREE, and the
   working copy itself will be verified against DISK_TREE.  If optional
   STATUS_TREE is given, then 'svn status' output will be
   compared.  (This is a good way to check that revision numbers were
   bumped.)
 
-  For the DISK_TREE verification, SINGLETON_HANDLER_A and
-  SINGLETON_HANDLER_B will be passed to tree.compare_trees -- see that
-  function's doc string for more details.
-
   If CHECK_PROPS is set, then disk comparison will examine props.
 
   Return if successful, raise on failure."""
 
   # Update and make a tree of the output.
-  exit_code, output, errput = main.run_svn(error_re_string, 'switch',
-                                           switch_url, wc_target, *args)
-
-  if error_re_string:
-    if not error_re_string.startswith(".*"):
-      error_re_string = ".*(" + error_re_string + ")"
-    expected_err = verify.RegexOutput(error_re_string, match_all=False)
-    verify.verify_outputs(None, None, errput, None, expected_err)
-  elif errput:
-    raise verify.SVNUnexpectedStderr(err)
-
+  exit_code, output, errput = run_and_verify_svn(None, expected_stderr,
+                                                 'switch', switch_url,
+                                                 wc_target, *args)
   actual = wc.State.from_checkout(output)
 
   verify_update(actual, None, None, wc_dir_name,
                 output_tree, None, None, disk_tree, status_tree,
-                singleton_handler_a, a_baton,
-                singleton_handler_b, b_baton,
-                check_props)
+                check_props, **kw)
 
 def process_output_for_commit(output, error_re_string):
   """Helper for run_and_verify_commit(), also used in the factory."""
@@ -1455,7 +1365,7 @@ def process_output_for_commit(output, er
 
 
 def run_and_verify_commit(wc_dir_name, output_tree, status_tree,
-                          error_re_string = None,
+                          expected_stderr=[],
                           *args):
   """Commit and verify results within working copy WC_DIR_NAME,
   sending ARGS to the commit subcommand.
@@ -1465,9 +1375,7 @@ def run_and_verify_commit(wc_dir_name, o
   be compared.  (This is a good way to check that revision numbers
   were bumped.)
 
-  If ERROR_RE_STRING is None, the commit must not exit with error.  If
-  ERROR_RE_STRING is a string, the commit must exit with error, and
-  the error message must match regular expression ERROR_RE_STRING.
+  EXPECTED_STDERR is handled as in run_and_verify_svn()
 
   Return if successful, raise on failure."""
 
@@ -1475,21 +1383,15 @@ def run_and_verify_commit(wc_dir_name, o
     output_tree = output_tree.old_tree()
 
   # Commit.
+  if len(args) == 0:
+    args = (wc_dir_name,)
   if '-m' not in args and '-F' not in args:
     args = list(args) + ['-m', 'log msg']
-  exit_code, output, errput = main.run_svn(error_re_string, 'ci',
-                                           *args)
-
-  if error_re_string:
-    if not error_re_string.startswith(".*"):
-      error_re_string = ".*(" + error_re_string + ")"
-    expected_err = verify.RegexOutput(error_re_string, match_all=False)
-    verify.verify_outputs(None, None, errput, None, expected_err)
-
-  # Else not expecting error:
+  exit_code, output, errput = run_and_verify_svn(None, expected_stderr,
+                                                 'ci', *args)
 
   # Convert the output into a tree.
-  output = process_output_for_commit(output, error_re_string)
+  output = process_output_for_commit(output, expected_stderr)
   actual = tree.build_tree_from_commit(output)
 
   # Verify actual output against expected output.
@@ -1509,53 +1411,43 @@ def run_and_verify_commit(wc_dir_name, o
 
 # This function always passes '-q' to the status command, which
 # suppresses the printing of any unversioned or nonexistent items.
-def run_and_verify_status(wc_dir_name, status_tree,
-                          singleton_handler_a = None,
-                          a_baton = None,
-                          singleton_handler_b = None,
-                          b_baton = None):
+def run_and_verify_status(wc_dir_name, status_tree, no_entries=False):
   """Run 'status' on WC_DIR_NAME and compare it with the
-  expected STATUS_TREE.  SINGLETON_HANDLER_A and SINGLETON_HANDLER_B will
-  be passed to tree.compare_trees - see that function's doc string for
-  more details.
+  expected STATUS_TREE.
   Returns on success, raises on failure."""
 
+  if not isinstance(status_tree, wc.State):
+    raise TypeError('wc.State tree expected')
+
   exit_code, output, errput = main.run_svn(None, 'status', '-v', '-u', '-q',
                                            wc_dir_name)
 
-  actual_status = svntest.wc.State.from_status(output)
+  actual_status = svntest.wc.State.from_status(output, wc_dir=wc_dir_name)
 
   # Verify actual output against expected output.
-  if isinstance(status_tree, wc.State):
-    try:
-      status_tree.compare_and_display('status', actual_status)
-    except tree.SVNTreeError:
-      _log_tree_state("ACTUAL STATUS TREE:", actual_status.old_tree(),
-                                             wc_dir_name)
-      raise
-  else:
-    actual_status = actual_status.old_tree()
-    try:
-      tree.compare_trees("status", actual_status, status_tree,
-                         singleton_handler_a, a_baton,
-                         singleton_handler_b, b_baton)
-    except tree.SVNTreeError:
-      verify.display_trees(None, 'STATUS OUTPUT TREE', status_tree, 
actual_status)
-      _log_tree_state("ACTUAL STATUS TREE:", actual_status, wc_dir_name)
-      raise
+  try:
+    status_tree.compare_and_display('status', actual_status)
+  except tree.SVNTreeError:
+    _log_tree_state("ACTUAL STATUS TREE:", actual_status.old_tree(),
+                                           wc_dir_name)
+    raise
+
+  if no_entries:
+    return
 
   # if we have an output State, and we can/are-allowed to create an
   # entries-based State, then compare the two.
-  if isinstance(status_tree, wc.State):
-    actual_entries = wc.State.from_entries(wc_dir_name)
-    if actual_entries:
-      tweaked = status_tree.copy()
-      tweaked.tweak_for_entries_compare()
-      try:
-        tweaked.compare_and_display('entries', actual_entries)
-      except tree.SVNTreeUnequal:
-        ### do something more
-        raise
+  actual_entries = wc.State.from_entries(wc_dir_name)
+  if actual_entries:
+    tweaked = status_tree.copy()
+    tweaked.tweak_for_entries_compare()
+    try:
+      tweaked.compare_and_display('entries', actual_entries)
+    except tree.SVNTreeUnequal:
+      ### do something more
+      _log_tree_state("ACTUAL ENTRY TREE:", actual_entries.old_tree(),
+                                           wc_dir_name)
+      raise
 
 
 # A variant of previous func, but doesn't pass '-q'.  This allows us
@@ -1565,27 +1457,21 @@ def run_and_verify_unquiet_status(wc_dir
   expected STATUS_TREE.
   Returns on success, raises on failure."""
 
+  if not isinstance(status_tree, wc.State):
+    raise TypeError('wc.State tree expected')
+
   exit_code, output, errput = main.run_svn(None, 'status', '-v',
                                            '-u', wc_dir_name)
 
-  actual_status = svntest.wc.State.from_status(output)
+  actual_status = svntest.wc.State.from_status(output, wc_dir=wc_dir_name)
 
   # Verify actual output against expected output.
-  if isinstance(status_tree, wc.State):
-    try:
-      status_tree.compare_and_display('unquiet status', actual_status)
-    except tree.SVNTreeError:
-      _log_tree_state("ACTUAL STATUS TREE:",
-                      actual_status.normalize().old_tree(), wc_dir_name)
-      raise
-  else:
-    actual_status = actual_status.old_tree()
-    try:
-      tree.compare_trees("UNQUIET STATUS", actual_status, status_tree)
-    except tree.SVNTreeError:
-      _log_tree_state("ACTUAL UNQUIET STATUS TREE:", actual_status,
-                                                     wc_dir_name)
-      raise
+  try:
+    status_tree.compare_and_display('unquiet status', actual_status)
+  except tree.SVNTreeError:
+    _log_tree_state("ACTUAL STATUS TREE:",
+                    actual_status.normalize().old_tree(), wc_dir_name)
+    raise
 
 def run_and_verify_status_xml(expected_entries = [],
                               *args):
@@ -2165,7 +2051,7 @@ def inject_conflict_into_wc(sbox, state_
   if expected_status:
     expected_status.tweak(state_path, wc_rev=merged_rev)
   run_and_verify_commit(wc_dir, expected_output, expected_status,
-                        None, file_path)
+                        [], file_path)
 
   # Backdate the file.
   exit_code, output, errput = main.run_svn(None, "up", "-r", str(prev_rev),
@@ -2209,13 +2095,15 @@ def inject_conflict_into_expected_state(
   if expected_status:
     expected_status.tweak(state_path, status='C ')
 
-def make_conflict_marker_text(wc_text, merged_text, prev_rev, merged_rev):
+def make_conflict_marker_text(wc_text, merged_text, prev_rev, merged_rev,
+                              old_text=''):
   """Return the conflict marker text described by WC_TEXT (the current
   text in the working copy, MERGED_TEXT (the conflicting text merged
   in), and MERGED_REV (the revision from whence the conflicting text
   came)."""
   return "<<<<<<< .working\n" + wc_text + \
-         "||||||| .merge-left.r" + str(prev_rev) +  "\n=======\n" + \
+         "||||||| .merge-left.r" + str(prev_rev) + '\n' + \
+         old_text + "=======\n" + \
          merged_text + ">>>>>>> .merge-right.r" + str(merged_rev) + "\n"
 
 
@@ -2267,7 +2155,7 @@ def build_greek_tree_conflicts(sbox):
   expected_status = get_virginal_state(wc_dir, 1)
   expected_status.tweak('A/D/G/pi', wc_rev='2')
   expected_status.remove('A/D/G/rho', 'A/D/G/tau')
-  run_and_verify_commit(wc_dir, expected_output, expected_status, None,
+  run_and_verify_commit(wc_dir, expected_output, expected_status, [],
                         '-m', 'Incoming changes.', wc_dir )
 
   # Update back to the pristine state ("time-warp").
@@ -2279,7 +2167,7 @@ def build_greek_tree_conflicts(sbox):
   expected_disk = main.greek_state
   expected_status = get_virginal_state(wc_dir, 1)
   run_and_verify_update(wc_dir, expected_output, expected_disk,
-                        expected_status, None, None, None, None, None, False,
+                        expected_status, [], False,
                         '-r', '1', wc_dir)
 
   # Make local changes


Reply via email to