You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2015/03/04 16:56:21 UTC

svn commit: r1664059 [10/11] - in /subversion/branches/reuse-ra-session: ./ build/generator/ doc/ subversion/bindings/javahl/native/ subversion/bindings/swig/ subversion/bindings/swig/include/ subversion/bindings/swig/python/libsvn_swig_py/ subversion/...

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/update_tests.py?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/update_tests.py Wed Mar  4 15:56:18 2015
@@ -55,50 +55,6 @@ from svntest.main import SVN_PROP_MERGEI
 #   Each test must return on success or raise on failure.
 
 
-#----------------------------------------------------------------------
-
-# Helper for update_binary_file() test -- a custom singleton handler.
-def detect_extra_files(node, extra_files):
-  """NODE has been discovered as an extra file on disk.  Verify that
-  it matches one of the regular expressions in the EXTRA_FILES list of
-  lists, and that its contents matches the second part of the list
-  item.  If it matches, remove the match from the list.  If it doesn't
-  match, raise an exception."""
-
-  # Baton is of the form:
-  #
-  #       [ [wc_dir, pattern, contents],
-  #         [wc_dir, pattern, contents], ... ]
-
-  for fdata in extra_files:
-    wc_dir = fdata[0]
-    pattern = fdata[1]
-    contents = None
-    if len(fdata) > 2:
-      contents = fdata[2]
-    match_obj = re.match(pattern, node.name)
-    if match_obj:
-      if contents is None:
-        return
-      else:
-        # Strip the root_node_name from node path
-        # (svntest.tree.root_node_name, currently `__SVN_ROOT_NODE'),
-        # since it doesn't really exist. Also strip the trailing "slash".
-        real_path = node.path
-        if real_path.startswith(svntest.tree.root_node_name):
-          real_path = real_path[len(svntest.tree.root_node_name) +
-                                len(os.sep) :]
-        real_path = os.path.join(wc_dir, real_path)
-
-        real_contents = open(real_path).read()
-        if real_contents == contents:
-          extra_files.pop(extra_files.index(fdata)) # delete pattern from list
-          return
-
-  logger.warn("Found unexpected object: %s", node.name)
-  raise svntest.tree.SVNTreeUnequal
-
-
 
 def update_binary_file(sbox):
   "update a locally-modified binary file"
@@ -127,7 +83,7 @@ def update_binary_file(sbox):
 
   # Commit the new binary file, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Make a backup copy of the working copy.
   wc_backup = sbox.add_wc_path('backup')
@@ -151,7 +107,7 @@ def update_binary_file(sbox):
 
   # Commit original working copy again, creating revision 3.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Now start working in the backup working copy:
 
@@ -178,13 +134,7 @@ def update_binary_file(sbox):
     'A/theta' : Item(status='C ', wc_rev=3),
     })
 
-  # Extra 'singleton' files we expect to exist after the update.
-  # In the case, the locally-modified binary file should be backed up
-  # to an .orig file.
-  #  This is a list of lists, of the form [ WC_DIR,
-  #                                         [pattern, contents], ...]
-  extra_files = [[wc_backup, 'theta.*\.r2', theta_contents],
-                 [wc_backup, 'theta.*\.r3', theta_contents_r3]]
+  extra_files = ['theta.r2', 'theta.r3']
 
   # Do the update and check the results in three ways.  Pass our
   # custom singleton handler to verify the .orig file; this handler
@@ -194,15 +144,8 @@ def update_binary_file(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        detect_extra_files, extra_files,
-                                        None, None, 1)
-
-  # verify that the extra_files list is now empty.
-  if len(extra_files) != 0:
-    logger.warn("Not all extra reject files have been accounted for:")
-    logger.warn(extra_files)
-    raise svntest.Failure
+                                        [], True,
+                                        extra_files=extra_files)
 
 #----------------------------------------------------------------------
 
@@ -249,7 +192,7 @@ def update_binary_file_2(sbox):
 
   # Commit the new binary filea, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Make some mods to the binary files.
   svntest.main.file_append(theta_path, "foobar")
@@ -272,7 +215,7 @@ def update_binary_file_2(sbox):
 
   # Commit original working copy again, creating revision 3.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Create expected output tree for an update to rev 2.
   expected_output = svntest.wc.State(wc_dir, {
@@ -303,8 +246,7 @@ def update_binary_file_2(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '2', wc_dir)
 
 
@@ -340,7 +282,7 @@ def update_binary_file_3(sbox):
 
   # Commit the new binary file, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Make some mods to the binary files.
   svntest.main.file_append(theta_path, "foobar")
@@ -359,7 +301,7 @@ def update_binary_file_3(sbox):
 
   # Commit modified working copy, creating revision 3.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Now we locally modify the file back to the old version.
   svntest.main.file_write(theta_path, theta_contents, 'wb')
@@ -389,8 +331,7 @@ def update_binary_file_3(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '2', wc_dir)
 
 #----------------------------------------------------------------------
@@ -443,7 +384,7 @@ def update_missing(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         mu_path, rho_path,
                                         E_path, H_path)
 
@@ -531,8 +472,7 @@ def update_to_rev_zero(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None, [], False,
                                         '-r', '0', wc_dir)
 
 #----------------------------------------------------------------------
@@ -581,7 +521,7 @@ def receive_overlapping_same_change(sbox
 
   # Commit the change, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Expected output tree for update of other_wc.
   expected_output = svntest.wc.State(other_wc, {
@@ -644,7 +584,7 @@ def update_to_resolve_text_conflicts(sbo
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Create expected output tree for an update of the wc_backup.
   expected_output = svntest.wc.State(wc_backup, {
@@ -689,15 +629,7 @@ def update_to_resolve_text_conflicts(sbo
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        svntest.tree.detect_conflict_files,
-                                        extra_files)
-
-
-  # verify that the extra_files list is now empty.
-  if len(extra_files) != 0:
-    logger.warn("didn't get expected extra files")
-    raise svntest.Failure
+                                        extra_files=extra_files)
 
   # remove the conflicting files to clear text conflict but not props conflict
   os.remove(mu_path_backup)
@@ -822,7 +754,7 @@ def update_after_add_rm_deleted(sbox):
   expected_status.remove('A/B/F')
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # alpha and F are now in state "deleted", next we add a new ones
   svntest.main.file_append(alpha_path, "new alpha")
@@ -907,7 +839,7 @@ def obstructed_update_alters_wc_props(sb
   })
 
   actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
-    expected_status, None, None, None, None, None, False, wc_dir)
+                                expected_status)
 
 
   # Remove the file which caused the obstruction.
@@ -962,7 +894,7 @@ def update_replace_dir(sbox):
   expected_status.remove('A/B/F')
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Add replacement directory
   svntest.actions.run_and_verify_svn(None, [], 'mkdir', F_path)
@@ -976,7 +908,7 @@ def update_replace_dir(sbox):
   expected_status.tweak('A/B/F', wc_rev=3)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Update to HEAD
   expected_output = svntest.wc.State(wc_dir, {
@@ -1000,7 +932,7 @@ def update_replace_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         '-r', '1', wc_dir)
 
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -1030,7 +962,7 @@ def update_single_file(sbox):
   expected_status.tweak('A/mu', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # At one stage 'svn up file' failed with a parent lock error
   was_cwd = os.getcwd()
@@ -1073,7 +1005,7 @@ def prop_update_on_scheduled_delete(sbox
 
   # Commit the change, creating revision 2.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   svntest.main.run_svn(None, 'rm', other_iota_path)
 
@@ -1186,8 +1118,8 @@ def update_deleted_missing_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        0, "-r", "2", E_path, H_path)
+                                        [], False,
+                                        "-r", "2", E_path, H_path)
 
   # Update back to the old revision again
   svntest.main.run_svn(None,
@@ -1207,8 +1139,8 @@ def update_deleted_missing_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        0, "-r", "2", wc_dir)
+                                        [], False,
+                                        "-r", "2", wc_dir)
 
 #----------------------------------------------------------------------
 
@@ -1233,8 +1165,7 @@ def another_hudson_problem(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Delete directory G from the repository
   svntest.actions.run_and_verify_svn(['Committing transaction...\n',
@@ -1300,8 +1231,7 @@ def update_deleted_targets(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Explicit update must not remove the 'deleted=true' entries
   svntest.actions.run_and_verify_svn(exp_noop_up_out(2), [],
@@ -1324,7 +1254,7 @@ def update_deleted_targets(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         '-r', '1', wc_dir)
 
 
@@ -1388,8 +1318,7 @@ def non_recursive_update(sbox):
   expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status,
-                                        None, wc_dir)
+                                        expected_status)
 
   # Update back to revision 1
   expected_output = svntest.wc.State(wc_dir, {
@@ -1403,7 +1332,7 @@ def non_recursive_update(sbox):
 
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         '-r', '1', wc_dir)
 
   # Non-recursive update of A should change A/mu but not A/D/G/rho
@@ -1419,7 +1348,7 @@ def non_recursive_update(sbox):
 
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         '-N', A_path)
 
 #----------------------------------------------------------------------
@@ -1464,8 +1393,8 @@ def update_to_deletion(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None,
+                                        [], False,
                                         '-r', '0', iota_path)
 
   # Update the wc root, so iota comes back.
@@ -1478,9 +1407,7 @@ def update_to_deletion(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
-                                        wc_dir)
+                                        None)
 
 
 #----------------------------------------------------------------------
@@ -1603,8 +1530,8 @@ def update_to_future_add(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None,
+                                        [], False,
                                         '-r', '0', wc_dir)
 
   # Update iota to the current HEAD.
@@ -1621,8 +1548,8 @@ def update_to_future_add(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None,
+                                        [], False,
                                         iota_path)
 
   # Now try updating the directory into the future
@@ -1655,8 +1582,8 @@ def update_to_future_add(sbox):
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None,
+                                        [], False,
                                         A_path)
 
 #----------------------------------------------------------------------
@@ -1689,7 +1616,7 @@ def update_xml_unsafe_dir(sbox):
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # chdir into the funky path, and update from there.
   os.chdir(test_path)
@@ -1767,7 +1694,7 @@ def conflict_markers_matching_eol(sbox):
 
     # Commit the original change and note the 'base' revision number
     svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                          expected_status, None, wc_dir)
+                                          expected_status)
     cur_rev = cur_rev + 1
     base_rev = cur_rev
 
@@ -1833,10 +1760,7 @@ def conflict_markers_matching_eol(sbox):
     svntest.actions.run_and_verify_update(wc_backup,
                                           expected_backup_output,
                                           expected_backup_disk,
-                                          expected_backup_status,
-                                          None,
-                                          None,
-                                          None)
+                                          expected_backup_status)
 
     # cleanup for next run
     svntest.main.run_svn(None, 'revert', '-R', wc_backup)
@@ -1893,8 +1817,7 @@ def update_eolstyle_handling(sbox):
   svntest.actions.run_and_verify_update(wc_backup,
                                         expected_backup_output,
                                         expected_backup_disk,
-                                        expected_backup_status,
-                                        None, None, None)
+                                        expected_backup_status)
 
   # Test 2: now change the eol-style property to another value and commit,
   # update the still changed mu in the second working copy; there should be
@@ -1919,8 +1842,7 @@ def update_eolstyle_handling(sbox):
   svntest.actions.run_and_verify_update(wc_backup,
                                         expected_backup_output,
                                         expected_backup_disk,
-                                        expected_backup_status,
-                                        None, None, None)
+                                        expected_backup_status)
 
   # Test 3: now delete the eol-style property and commit, update the still
   # changed mu in the second working copy; there should be no conflict!
@@ -1944,8 +1866,7 @@ def update_eolstyle_handling(sbox):
   svntest.actions.run_and_verify_update(wc_backup,
                                         expected_backup_output,
                                         expected_backup_disk,
-                                        expected_backup_status,
-                                        None, None, None)
+                                        expected_backup_status)
 
 # Bug in which "update" put a bogus revision number on a schedule-add file,
 # causing the wrong version of it to be committed.
@@ -2051,7 +1972,7 @@ def forced_update(sbox):
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Make a local mod to mu that will merge cleanly.
   backup_mu_path = os.path.join(wc_backup, 'A', 'mu')
@@ -2127,7 +2048,7 @@ def forced_update(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None, None, None, 0,
+                                        [], False,
                                         wc_backup, '--force')
 
 #----------------------------------------------------------------------
@@ -2166,7 +2087,7 @@ def forced_update_failures(sbox):
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Create an unversioned dir A/B/F/nu that will obstruct the file of the
   # same name coming from the repository.  Create an unversioned file A/C/I
@@ -2202,8 +2123,9 @@ def forced_update_failures(sbox):
   expected_status.tweak('A/B/F', wc_rev='2')
 
   actions.run_and_verify_update(wc_backup, expected_output,
-    expected_disk, expected_status, None, None, None, None, None, False,
-    '--force', backup_A_B_F)
+                                expected_disk, expected_status,
+                                [], False,
+                                '--force', backup_A_B_F)
 
 
   # A forced update that tries to add a directory when an unversioned file
@@ -2245,8 +2167,9 @@ def forced_update_failures(sbox):
   expected_status.tweak('A/C', 'A/B/F', wc_rev='2')
 
   actions.run_and_verify_update(wc_dir_backup, expected_output,
-    expected_disk, expected_status, None, None, None, None, None, False,
-    '--force', backup_A_C)
+                                expected_disk, expected_status,
+                                [], False,
+                                '--force', backup_A_C)
 
   # rm -rf wc_dir_backup/A/C/I wc_dir_backup/A/B/F/nu
   os.remove(backup_A_C_I)
@@ -2265,8 +2188,7 @@ def forced_update_failures(sbox):
   expected_status.tweak('A/C/I', 'A/B/F/nu', treeconflict=None)
 
   actions.run_and_verify_update(wc_dir_backup, expected_output,
-    expected_disk, expected_status, None, None, None, None, None, False,
-    wc_dir_backup)
+                                expected_disk, expected_status)
 
   # svn up -r1 wc_dir_backup/A/C
   expected_output = svntest.wc.State(wc_dir_backup, {
@@ -2279,16 +2201,17 @@ def forced_update_failures(sbox):
   expected_status.tweak('A/C', wc_rev='1')
 
   actions.run_and_verify_update(wc_dir_backup, expected_output,
-    expected_disk, expected_status, None, None, None, None, None, False,
-    '-r1', backup_A_C)
+                                expected_disk, expected_status,
+                                [], False,
+                                '-r1', backup_A_C)
 
   # svn co url/A/C/I wc_dir_backup/A/C/I
   expected_output = svntest.wc.State(wc_dir_backup, {})
 
   expected_disk = svntest.wc.State(wc_dir, {})
 
-  actions.run_and_verify_checkout2(False, url_A_C_I, backup_A_C_I,
-    expected_output, expected_disk, None, None, None, None)
+  actions.run_and_verify_checkout(url_A_C_I, backup_A_C_I,
+                                  expected_output, expected_disk)
 
   # svn up --force wc_dir_backup/A/C
   expected_output = svntest.wc.State(wc_dir_backup, {
@@ -2296,7 +2219,8 @@ def forced_update_failures(sbox):
   })
 
   actions.run_and_verify_update(wc_dir_backup, expected_output, None, None,
-    None, None, None, None, None, False, '--force', backup_A_C)
+                                [], False,
+                                '--force', backup_A_C)
 
 
 #----------------------------------------------------------------------
@@ -2372,7 +2296,7 @@ def update_wc_on_windows_drive(sbox):
     })
 
     svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                          expected_status, None,
+                                          expected_status, [],
                                           wc_dir, zeta_path)
 
     # Non recursive commit
@@ -2394,7 +2318,7 @@ def update_wc_on_windows_drive(sbox):
       })
 
     svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                          expected_status, None,
+                                          expected_status, [],
                                           '-N',
                                           wc_dir,
                                           dir1_path, file1_path)
@@ -2416,7 +2340,7 @@ def update_wc_on_windows_drive(sbox):
                                           expected_output,
                                           expected_disk,
                                           expected_status,
-                                          None, None, None, None, None, 0,
+                                          [], False,
                                           '-r', '1', wc_dir)
 
     os.chdir(was_cwd)
@@ -2445,11 +2369,14 @@ def update_wc_on_windows_drive(sbox):
     expected_disk.tweak('A/mu', contents = expected_disk.desc['A/mu'].contents
                         + '\nAppended text for mu')
 
-    # Use .old_tree() for status to avoid the entries validation
+    # Create expected status with 'H:iota' style paths
+    expected_status_relative = svntest.wc.State('', {})
+    expected_status_relative.add_state(wc_dir, expected_status, strict=True)
+
     svntest.actions.run_and_verify_update(wc_dir,
                                           expected_output,
                                           expected_disk,
-                                          expected_status.old_tree())
+                                          expected_status_relative)
 
   finally:
     os.chdir(was_cwd)
@@ -2500,15 +2427,10 @@ def update_wc_with_replaced_file(sbox):
   expected_disk = svntest.main.greek_state.copy()
   expected_disk.tweak('iota', contents="")
 
-  conflict_files = []
-
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None,
-                                        svntest.tree.detect_conflict_files,
-                                        conflict_files)
+                                        expected_status)
 
   # Make us a working copy with a 'replace-with-history' file.
   svntest.main.run_svn(None, 'revert', iota_path)
@@ -2525,8 +2447,7 @@ def update_wc_with_replaced_file(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        None, None, None, None, 0,
+                                        [], False,
                                         wc_dir, '-r1')
 
   svntest.main.run_svn(None, 'rm', iota_path)
@@ -2551,15 +2472,10 @@ def update_wc_with_replaced_file(sbox):
   expected_disk = svntest.main.greek_state.copy()
   expected_disk.tweak('iota', contents="This is the file 'mu'.\n")
 
-  conflict_files = [ ]
-
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        expected_status,
-                                        None,
-                                        svntest.tree.detect_conflict_files,
-                                        conflict_files)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 def update_with_obstructing_additions(sbox):
@@ -2672,7 +2588,7 @@ def update_with_obstructing_additions(sb
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Create various paths scheduled for addition which will obstruct
   # the adds coming from the repos.
@@ -2796,10 +2712,8 @@ def update_with_obstructing_additions(sb
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        svntest.tree.detect_conflict_files,
-                                        extra_files, None, None, 1,
-                                        wc_backup)
+                                        [], True,
+                                        extra_files=extra_files)
 
   # Some obstructions are still not permitted:
   #
@@ -2908,7 +2822,7 @@ def update_with_obstructing_additions(sb
 
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         A_path)
 
   # Resolve the tree conflict.
@@ -2927,7 +2841,7 @@ def update_with_obstructing_additions(sb
 
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         wc_dir, '-N')
 
   # Resolve the tree conflict.
@@ -2940,7 +2854,7 @@ def update_with_obstructing_additions(sb
   # Again, --force shouldn't matter.
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         omicron_path, '-N', '--force')
 
 # Test for issue #2022: Update shouldn't touch conflicted files.
@@ -2976,7 +2890,7 @@ def update_conflicted(sbox):
   expected_status.tweak('iota', 'A/mu', 'A/B/lambda', 'A/D', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Do another change to each path that we will need later.
   # Also, change a file below A/D in the path.
@@ -2995,7 +2909,7 @@ def update_conflicted(sbox):
     'A/D/G/pi': Item(verb='Sending')})
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Go back to revision 1.
   expected_output = svntest.wc.State(wc_dir, {
@@ -3014,9 +2928,7 @@ def update_conflicted(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r1', wc_dir)
 
   # Create modifications conflicting with rev 2.
@@ -3060,19 +2972,18 @@ def update_conflicted(sbox):
   expected_status.tweak('A/B/lambda', 'A/D', status=' C')
   expected_status.tweak('A/mu', status='CC')
 
-  extra_files = [ [wc_dir, 'iota.*\.(r1|r2|mine)'],
-                  [wc_dir, 'mu.*\.(r1|r2|mine|prej)'],
-                  [wc_dir, 'lambda.*\.prej'],
-                  [wc_dir, 'dir_conflicts.prej']]
+  extra_files = [ 'iota.r1', 'iota.r2', 'iota.mine',
+                  'mu.r1', 'mu.r2', 'mu.mine', 'mu.prej',
+                  'lambda.prej',
+                  'dir_conflicts.prej']
 
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        detect_extra_files, extra_files,
-                                        None, None, 1,
-                                        '-r2', wc_dir)
+                                        [], True,
+                                        '-r2', wc_dir,
+                                        extra_files=extra_files+[])
 
   # Now, update to HEAD, which should skip all the conflicted files, but
   # still update the pi file.
@@ -3100,9 +3011,8 @@ def update_conflicted(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        detect_extra_files, extra_files,
-                                        None, None, 1)
+                                        [], True,
+                                        extra_files=extra_files)
 
 #----------------------------------------------------------------------
 @SkipUnless(server_has_mergeinfo)
@@ -3151,9 +3061,7 @@ def mergeinfo_update_elision(sbox):
 
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
-                                        expected_status,
-                                        None,
-                                        wc_dir)
+                                        expected_status)
 
   # Make some changes under A/B
 
@@ -3165,7 +3073,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B/E/beta', wc_rev=3)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # r4 - modify and commit A/B/lambda
   svntest.main.file_write(lambda_path, "New content")
@@ -3175,7 +3083,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B/lambda', wc_rev=4)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # r5 - modify and commit A/B/E/alpha
   svntest.main.file_write(alpha_path, "New content")
@@ -3185,7 +3093,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B/E/alpha', wc_rev=5)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Merge r2:5 into A/B_COPY
   expected_output = wc.State(B_COPY_path, {
@@ -3229,8 +3137,7 @@ def mergeinfo_update_elision(sbox):
                                        expected_merge_disk,
                                        expected_merge_status,
                                        expected_skip,
-                                       None, None, None, None,
-                                       None, 1)
+                                       check_props=True)
 
   # r6 - Commit the merge
   expected_output = wc.State(wc_dir,
@@ -3245,7 +3152,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B_COPY/lambda',  wc_rev=6)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Update WC back to r5, A/COPY_B is at it's pre-merge state again
   expected_output = wc.State(wc_dir,
@@ -3273,8 +3180,7 @@ def mergeinfo_update_elision(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '5', wc_dir)
 
   # Merge r2:5 to A/B_COPY/E/alpha
@@ -3327,8 +3233,7 @@ def mergeinfo_update_elision(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        [], True)
 
   # Now test that an updated target's mergeinfo can itself elide.
   # r7 - modify and commit A/B/E/alpha
@@ -3339,7 +3244,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B/E/alpha', 'A/B_COPY/E/alpha', status='  ',
                         wc_rev=7)
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Update A to get all paths to the same working revision.
   svntest.actions.run_and_verify_svn(exp_noop_up_out(7), [],
@@ -3381,8 +3286,7 @@ def mergeinfo_update_elision(sbox):
                                        expected_merge_disk,
                                        expected_merge_status,
                                        expected_skip,
-                                       None, None, None, None,
-                                       None, 1)
+                                       check_props=True)
 
   # r8 - Commit the merge
   svntest.actions.run_and_verify_svn(exp_noop_up_out(7),
@@ -3396,7 +3300,7 @@ def mergeinfo_update_elision(sbox):
   expected_status.tweak('A/B_COPY/E', 'A/B_COPY/E/alpha', wc_rev=8)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Update A/COPY_B/E back to r7
   expected_output = wc.State(wc_dir, {
@@ -3415,8 +3319,7 @@ def mergeinfo_update_elision(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '7', E_COPY_path)
 
   # Merge r6:7 to A/B_COPY
@@ -3461,8 +3364,7 @@ def mergeinfo_update_elision(sbox):
                                        expected_merge_disk,
                                        expected_merge_status,
                                        expected_skip,
-                                       None, None, None, None,
-                                       None, 1,alpha_COPY_path)
+                                       [], True, True)
 
   # Update just A/B_COPY/E.  The mergeinfo (r3-5,7) reset on
   # A/B_COPY/E by the udpate is identical to the local info on
@@ -3488,8 +3390,8 @@ def mergeinfo_update_elision(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1, E_COPY_path)
+                                        [], True,
+                                        E_COPY_path)
 
 
 #----------------------------------------------------------------------
@@ -3545,7 +3447,7 @@ def update_copied_from_replaced_and_chan
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Modify fn2.
   fn2_final_contents = "I have new contents for the middle file."
@@ -3564,7 +3466,7 @@ def update_copied_from_replaced_and_chan
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Go back to r1.
   expected_output = svntest.wc.State(wc_dir, {
@@ -3580,8 +3482,8 @@ def update_copied_from_replaced_and_chan
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        None, None,
-                                        None, None, None, None, 0,
+                                        None,
+                                        [], False,
                                         '-r', '1', wc_dir)
 
   # And back up to 3 again.
@@ -3605,9 +3507,7 @@ def update_copied_from_replaced_and_chan
   svntest.actions.run_and_verify_update(wc_dir,
                                         expected_output,
                                         expected_disk,
-                                        expected_status, None,
-                                        None, None, None, None, 0,
-                                        wc_dir)
+                                        expected_status)
 
 #----------------------------------------------------------------------
 # Regression test: ra_neon assumes that you never delete a property on
@@ -3632,7 +3532,7 @@ def update_copied_and_deleted_prop(sbox)
   expected_status_mixed.tweak('iota', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status_mixed, None, wc_dir)
+                                        expected_status_mixed)
 
   # Copy iota to iota2 and delete the property on it.
   svntest.actions.run_and_verify_svn(None, [],
@@ -3650,7 +3550,7 @@ def update_copied_and_deleted_prop(sbox)
     })
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status_mixed, None, wc_dir)
+                                        expected_status_mixed)
 
   # Update the whole wc, verifying disk as well.
   expected_output = svntest.wc.State(wc_dir, { })
@@ -3684,8 +3584,7 @@ def update_copied_and_deleted_prop(sbox)
                                         expected_output,
                                         expected_disk_r2,
                                         expected_status_r2,
-                                        None, None, None, None, None,
-                                        True,
+                                        [], True,
                                         "-r2", wc_dir)
 
   # And finally, back to r3, getting an add-with-history-and-property-deleted
@@ -3800,7 +3699,7 @@ def update_accept_conflicts(sbox):
 
   # Commit.
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Now we'll update each of our 5 files in wc_backup; each one will get
   # conflicts, and we'll handle each with a different --accept option.
@@ -3933,9 +3832,7 @@ def update_accept_conflicts(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None,
-                                        svntest.tree.detect_conflict_files,
-                                        extra_files)
+                                        extra_files=extra_files)
 
 
 #----------------------------------------------------------------------
@@ -3993,7 +3890,7 @@ def restarted_update_should_delete_dir_p
   expected_status.tweak('A', wc_rev=2)
 
   svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
+                                        expected_status)
 
   # Create a second working copy.
   ### Does this hack still work with wc-ng?
@@ -4020,7 +3917,7 @@ def restarted_update_should_delete_dir_p
     })
 
   svntest.actions.run_and_verify_commit(other_wc, expected_output,
-                                        expected_status, None, other_wc)
+                                        expected_status)
 
   # Back in the first working copy, create an obstructing path and
   # update. The update will flag a tree conflict.
@@ -4045,7 +3942,7 @@ def restarted_update_should_delete_dir_p
   })
 
   actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
-    expected_status, None, None, None, None, None, False, wc_dir)
+                                expected_status)
 
   # Now, delete the obstructing path and rerun the update.
   os.unlink(zeta_path)
@@ -4749,7 +4646,7 @@ def tree_conflict_uc1_update_deleted_tre
       })
 
   run_and_verify_commit(wc_dir, expected_output, expected_status,
-                        None, wc_dir, '-m', 'commit resolved tree')
+                        [], wc_dir, '-m', 'commit resolved tree')
 
 
 # Issue #3334: a delete-onto-modified tree conflict should leave the node
@@ -4918,8 +4815,7 @@ def set_deep_depth_on_target_with_shallo
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '--set-depth', 'empty',
                                         B_path)
 
@@ -4950,8 +4846,7 @@ def set_deep_depth_on_target_with_shallo
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '--set-depth', 'immediates',
                                         D_path)
 
@@ -4979,8 +4874,7 @@ def set_deep_depth_on_target_with_shallo
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '--set-depth', 'infinity',
                                         A_path)
 
@@ -5024,8 +4918,7 @@ def update_empty_hides_entries(sbox):
                                         None,
                                         expected_disk_empty,
                                         expected_status_empty,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '0',
                                         wc_dir)
 
@@ -5034,8 +4927,7 @@ def update_empty_hides_entries(sbox):
                                         None,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         wc_dir)
 
   # Update to revision 0 - Removes all files from WC
@@ -5043,8 +4935,7 @@ def update_empty_hides_entries(sbox):
                                         None,
                                         expected_disk_empty,
                                         expected_status_empty,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '0',
                                         wc_dir)
 
@@ -5053,8 +4944,7 @@ def update_empty_hides_entries(sbox):
                                         None,
                                         expected_disk_empty,
                                         expected_status_empty,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '--depth', 'empty',
                                         wc_dir)
 
@@ -5067,9 +4957,7 @@ def update_empty_hides_entries(sbox):
                                         None,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
-                                        wc_dir)
+                                        check_props=True)
 
 #----------------------------------------------------------------------
 # Test for issue #3573 'local non-inheritable mergeinfo changes not
@@ -5149,7 +5037,7 @@ def update_with_excluded_subdir(sbox):
   expected_status.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, False,
+                                        [], False,
                                         '--set-depth=exclude', G)
 
   # Commit a new revision so there is something to update to.
@@ -5209,7 +5097,7 @@ def update_nonexistent_child_of_copy(sbo
     'nonexistent'             : Item(verb='Skipped'),
   })
   svntest.actions.run_and_verify_update(os.path.join('A2', 'nonexistent'),
-                                        expected_output, None, None, None)
+                                        expected_output, None, None)
 
   # Try updating a deleted path in the copied dir.
   svntest.main.run_svn(None, 'delete', os.path.join('A2', 'mu'))
@@ -5218,7 +5106,7 @@ def update_nonexistent_child_of_copy(sbo
     'mu'             : Item(verb='Skipped'),
   })
   svntest.actions.run_and_verify_update(os.path.join('A2', 'mu'),
-                                        expected_output, None, None, None)
+                                        expected_output, None, None)
   if os.path.exists('A2/mu'):
     raise svntest.Failure("A2/mu improperly revived")
 
@@ -5285,9 +5173,8 @@ def skip_access_denied(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None,
-                                        None, None,
-                                        None, None, None, wc_dir, '-r', '1')
+                                        [], False,
+                                        wc_dir, '-r', '1')
 
   f.close()
 
@@ -5302,9 +5189,9 @@ def update_to_HEAD_plus_1(sbox):
   # revision".)
   svntest.actions.run_and_verify_update(wc_dir,
                                         None, None, None,
-                                        "E160006.*No such.*revision",
-                                        None, None,
-                                        None, None, None, wc_dir, '-r', '2')
+                                        ".*E160006.*No such.*revision.*",
+                                        False,
+                                        wc_dir, '-r', '2')
 
   other_wc = sbox.add_wc_path('other')
   other_url = sbox.repo_url + '/A'
@@ -5312,9 +5199,9 @@ def update_to_HEAD_plus_1(sbox):
                                      'co', other_url, other_wc)
   svntest.actions.run_and_verify_update(other_wc,
                                         None, None, None,
-                                        "E160006.*No such.*revision",
-                                        None, None,
-                                        None, None, None, other_wc, '-r', '2')
+                                        ".*E160006.*No such.*revision.*",
+                                        False,
+                                        other_wc, '-r', '2')
 
 def update_moved_dir_leaf_del(sbox):
   "update locally moved dir with leaf del"
@@ -5354,8 +5241,7 @@ def update_moved_dir_leaf_del(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # Now resolve the conflict, using --accept=mine-conflict applying
   # the update to A/B/E2
@@ -5409,8 +5295,7 @@ def update_moved_dir_edited_leaf_del(sbo
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # Now resolve the conflict, using --accept=mine-conflict.
   # This should apply the update to A/B/E2, and flag a tree
@@ -5468,8 +5353,7 @@ def update_moved_dir_file_add(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # Now resolve the conflict, using --accept=mine-conflict.
   # This should apply the update to A/B/E2, adding A/B/E2/foo.
@@ -5529,8 +5413,7 @@ def update_moved_dir_dir_add(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
   svntest.actions.run_and_verify_svn(None, [],
                                      'resolve',
                                      '--recursive',
@@ -5586,8 +5469,7 @@ def update_moved_dir_file_move(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # The incoming change is a delete as we don't yet track server-side
   # moves.  Resolving the tree-conflict as "mine-conflict" applies the
@@ -5653,8 +5535,7 @@ def update_move_text_mod(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   svntest.actions.run_and_verify_svn(None, [],
                                      'resolve',
@@ -5719,8 +5600,7 @@ def update_nested_move_text_mod(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   svntest.actions.run_and_verify_svn(None, [],
                                      'resolve',
@@ -5755,8 +5635,7 @@ def update_with_parents_and_exclude(sbox
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, False,
+                                        [], False,
                                         '--set-depth', 'exclude',
                                         sbox.ospath('A'))
 
@@ -5786,8 +5665,7 @@ def update_with_parents_and_exclude(sbox
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, False,
+                                        [], False,
                                         '--parents',
                                         sbox.ospath('A/B'))
 
@@ -5871,8 +5749,7 @@ def update_edit_delete_obstruction(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '2', wc_dir)
 
   # Cleanup obstructions
@@ -5935,8 +5812,7 @@ def update_edit_delete_obstruction(sbox)
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '3', wc_dir)
 
 def update_deleted(sbox):
@@ -5958,8 +5834,7 @@ def update_deleted(sbox):
                                         expected_output,
                                         None,
                                         None,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         sbox.ospath('A/B'))
 
 @Issue(3144,3630)
@@ -6004,8 +5879,7 @@ def break_moved_dir_edited_leaf_del(sbox
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # Now resolve the conflict, using --accept=working
   # This should break the move of A/B/E to A/B/E2, leaving A/B/E2
@@ -6067,8 +5941,7 @@ def break_moved_replaced_dir(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
   # Now resolve the conflict, using --accept=working
   # This should break the move of A/B/E to A/B/E2, leaving A/B/E2
@@ -6247,8 +6120,7 @@ def incomplete_overcomplete(sbox):
                                         expected_output,
                                         r5_disk,
                                         expected_status,
-                                        None, None, None, None, None,
-                                        True)
+                                        check_props=True)
 
   # And now we mark the directory incomplete, as if the update had failed
   # half-way through an update to r3
@@ -6278,8 +6150,7 @@ def incomplete_overcomplete(sbox):
                                         expected_output,
                                         r3_disk,
                                         r3_status,
-                                        None, None, None, None, None,
-                                        True,
+                                        [], True,
                                         wc_dir, '-r', 3)
 
 @Issue(4300)
@@ -6345,8 +6216,7 @@ def update_swapped_depth_dirs(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1)
+                                        check_props=True)
 
 def move_update_props(sbox):
   "move-update with property mods"
@@ -6405,8 +6275,7 @@ def move_update_props(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '2', wc_dir)
 
   # Resolve conflict moving changes to destination without conflict
@@ -6432,8 +6301,7 @@ def move_update_props(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, 1,
+                                        [], True,
                                         '-r', '3', wc_dir)
 
   # Resolve conflict moving changes and raising property conflicts
@@ -6452,7 +6320,7 @@ def move_update_props(sbox):
                                                       'propertyB' : 'value3'})
   extra_files = ['dir_conflicts.prej', 'beta.prej']
   svntest.actions.verify_disk(wc_dir, expected_disk, True,
-                              svntest.tree.detect_conflict_files, extra_files)
+                              extra_files=extra_files)
 
 @Issues(3288)
 @SkipUnless(svntest.main.is_os_windows)
@@ -6579,8 +6447,7 @@ def update_moved_away(sbox):
                                         expected_output,
                                         expected_disk,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         sbox.ospath('A/B/E'))
 
 @Issues(4323)
@@ -6621,8 +6488,7 @@ def bump_below_tree_conflict(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         '-r', '2', wc_dir)
 
   # A is tree conflicted, so an update of A/D should be a skip/no-op.
@@ -6633,8 +6499,7 @@ def bump_below_tree_conflict(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         sbox.ospath('A/D'))
 
   # A is tree conflicted, so an update of A/D/G should be a skip/no-op.
@@ -6645,8 +6510,7 @@ def bump_below_tree_conflict(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         sbox.ospath('A/D/G'))
 
 @Issues(4111)
@@ -6689,8 +6553,7 @@ def update_child_below_add(sbox):
                                         expected_output,
                                         None,
                                         expected_status,
-                                        None, None, None,
-                                        None, None, None,
+                                        [], False,
                                         sbox.ospath('A/B/E'))
 
 def update_conflict_details(sbox):

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/wc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/wc_tests.py?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/wc_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/wc_tests.py Wed Mar  4 15:56:18 2015
@@ -222,8 +222,7 @@ def update_through_unversioned_symlink(s
   # Subversion 1.8.0 crashes when updating a working copy through a symlink
   svntest.actions.run_and_verify_update(wc_dir, expected_output,
                                         expected_disk, expected_status,
-                                        None, None, None, None, None, 1,
-                                        symlink)
+                                        [], True, symlink)
 
 @Issue(3549)
 def cleanup_unversioned_items(sbox):

Modified: subversion/branches/reuse-ra-session/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/libsvn_fs/fs-test.c?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/libsvn_fs/fs-test.c Wed Mar  4 15:56:18 2015
@@ -5100,15 +5100,11 @@ filename_trailing_newline(const svn_test
   svn_fs_root_t *txn_root, *root;
   svn_revnum_t youngest_rev = 0;
   svn_error_t *err;
-  svn_boolean_t legacy_backend;
-  static const char contents[] = "foo\003bar";
-
-  /* The FS API wants \n to be permitted, but FSFS never implemented that,
-   * so for FSFS we expect errors rather than successes in some of the commits.
-   * Use a blacklist approach so that new FSes default to implementing the API
-   * as originally defined. */
-  legacy_backend = (!strcmp(opts->fs_type, SVN_FS_TYPE_FSFS));
 
+  /* The FS API wants \n to be permitted, but FSFS never implemented that.
+   * Moreover, formats like svn:mergeinfo and svn:externals don't support
+   * it either.  So, we can't have newlines in file names in any FS.
+   */
   SVN_ERR(svn_test__create_fs(&fs, "test-repo-filename-trailing-newline",
                               opts, pool));
 
@@ -5120,64 +5116,20 @@ filename_trailing_newline(const svn_test
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
   svn_pool_clear(subpool);
 
-  /* Attempt to copy /foo to "/bar\n". This should fail on FSFS. */
+  /* Attempt to copy /foo to "/bar\n". This should fail. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_fs_revision_root(&root, fs, youngest_rev, subpool));
   err = svn_fs_copy(root, "/foo", txn_root, "/bar\n", subpool);
-  if (!legacy_backend)
-    SVN_TEST_ASSERT(err == SVN_NO_ERROR);
-  else
-    SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
 
-  /* Attempt to create a file /foo/baz\n. This should fail on FSFS. */
+  /* Attempt to create a file /foo/baz\n. This should fail. */
   err = svn_fs_make_file(txn_root, "/foo/baz\n", subpool);
-  if (!legacy_backend)
-    SVN_TEST_ASSERT(err == SVN_NO_ERROR);
-  else
-    SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
 
-
-  /* Create another file, with contents. */
-  if (!legacy_backend)
-    {
-      SVN_ERR(svn_fs_make_file(txn_root, "/bar\n/baz\n", subpool));
-      SVN_ERR(svn_test__set_file_contents(txn_root, "bar\n/baz\n",
-                                          contents, pool));
-    }
-
-  if (!legacy_backend)
-    {
-      svn_revnum_t after_rev;
-      static svn_test__tree_entry_t expected_entries[] = {
-        { "foo", NULL },
-        { "bar\n", NULL },
-        { "foo/baz\n", "" },
-        { "bar\n/baz\n", contents },
-        { NULL, NULL }
-      };
-      const char *expected_changed_paths[] = {
-        "/bar\n",
-        "/foo/baz\n",
-        "/bar\n/baz\n",
-        NULL
-      };
-      apr_hash_t *expected_changes = apr_hash_make(pool);
-      int i;
-
-      SVN_ERR(svn_fs_commit_txn(NULL, &after_rev, txn, subpool));
-      SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
-
-      /* Validate the DAG. */
-      SVN_ERR(svn_fs_revision_root(&root, fs, after_rev, pool));
-      SVN_ERR(svn_test__validate_tree(root, expected_entries, 4, pool));
-
-      /* Validate changed-paths, where the problem originally occurred. */
-      for (i = 0; expected_changed_paths[i]; i++)
-        svn_hash_sets(expected_changes, expected_changed_paths[i],
-                      "undefined value");
-      SVN_ERR(svn_test__validate_changes(root, expected_changes, pool));
-    }
+  /* Attempt to create a directory /foo/bang\n. This should fail. */
+  err = svn_fs_make_dir(txn_root, "/foo/bang\n", subpool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
 
   return SVN_NO_ERROR;
 }
@@ -5215,6 +5167,17 @@ test_fs_info_format(const svn_test_opts_
   return SVN_NO_ERROR;
 }
 
+/* Sleeps until apr_time_now() value changes. */
+static void sleep_for_timestamps(void)
+{
+  apr_time_t start = apr_time_now();
+
+  while (start == apr_time_now())
+    {
+      apr_sleep(APR_USEC_PER_SEC / 1000);
+    }
+}
+
 static svn_error_t *
 commit_timestamp(const svn_test_opts_t *opts,
                  apr_pool_t *pool)
@@ -5226,6 +5189,7 @@ commit_timestamp(const svn_test_opts_t *
   svn_revnum_t rev = 0;
   apr_hash_t *proplist;
   svn_string_t *svn_date;
+  svn_string_t *txn_svn_date;
 
   SVN_ERR(svn_test__create_fs(&fs, "test-fs-commit-timestamp",
                               opts, pool));
@@ -5244,29 +5208,6 @@ commit_timestamp(const svn_test_opts_t *
 
   /* Commit that overwrites the specified svn:date. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, rev, pool));
-  {
-    /* Setting the internal property doesn't enable svn:date behaviour. */
-    apr_array_header_t *props = apr_array_make(pool, 3, sizeof(svn_prop_t));
-    svn_prop_t prop, other_prop1, other_prop2;
-    svn_string_t *val;
-
-    prop.name = SVN_FS__PROP_TXN_CLIENT_DATE;
-    prop.value = svn_string_create("1", pool);
-    other_prop1.name = "foo";
-    other_prop1.value = svn_string_create("fooval", pool);
-    other_prop2.name = "bar";
-    other_prop2.value = svn_string_create("barval", pool);
-    APR_ARRAY_PUSH(props, svn_prop_t) = other_prop1;
-    APR_ARRAY_PUSH(props, svn_prop_t) = prop;
-    APR_ARRAY_PUSH(props, svn_prop_t) = other_prop2;
-    SVN_ERR(svn_fs_change_txn_props(txn, props, pool));
-    SVN_ERR(svn_fs_txn_prop(&val, txn, other_prop1.name, pool));
-    SVN_TEST_ASSERT(val && !strcmp(val->data, other_prop1.value->data));
-    SVN_ERR(svn_fs_txn_prop(&val, txn, other_prop2.name, pool));
-    SVN_TEST_ASSERT(val && !strcmp(val->data, other_prop2.value->data));
-
-    SVN_ERR(svn_fs_change_txn_prop(txn, prop.name, prop.value, pool));
-  }
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
   SVN_ERR(svn_fs_make_dir(txn_root, "/bar", pool));
   SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_DATE, date, pool));
@@ -5305,6 +5246,37 @@ commit_timestamp(const svn_test_opts_t *
                           APR_HASH_KEY_STRING);
   SVN_TEST_ASSERT(svn_date);
 
+  /* Commit that doesn't do anything special about svn:date. */
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, rev, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "/zig/foo", pool));
+  SVN_ERR(svn_fs_txn_prop(&txn_svn_date, txn, SVN_PROP_REVISION_DATE, pool));
+  SVN_TEST_ASSERT(txn_svn_date);
+  sleep_for_timestamps();
+  SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
+
+  SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
+  svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
+                          APR_HASH_KEY_STRING);
+  SVN_TEST_ASSERT(svn_date);
+  SVN_TEST_ASSERT(!svn_string_compare(svn_date, txn_svn_date));
+
+  /* Commit that instructs the backend to use a specific svn:date, but
+   * doesn't provide one.  This used to fail with BDB prior to r1663697. */
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, rev, SVN_FS_TXN_CLIENT_DATE, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "/zig/bar", pool));
+  SVN_ERR(svn_fs_txn_prop(&txn_svn_date, txn, SVN_PROP_REVISION_DATE, pool));
+  SVN_TEST_ASSERT(txn_svn_date);
+  sleep_for_timestamps();
+  SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
+
+  SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
+  svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
+                          APR_HASH_KEY_STRING);
+  SVN_TEST_ASSERT(svn_date);
+  SVN_TEST_ASSERT(!svn_string_compare(svn_date, txn_svn_date));
+
   return SVN_NO_ERROR;
 }
 
@@ -6746,6 +6718,70 @@ test_prop_and_text_rep_sharing_collision
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_internal_txn_props(const svn_test_opts_t *opts,
+                        apr_pool_t *pool)
+{
+  svn_fs_t *fs;
+  svn_fs_txn_t *txn;
+  svn_string_t *val;
+  svn_prop_t prop;
+  svn_prop_t internal_prop;
+  apr_array_header_t *props;
+  apr_hash_t *proplist;
+  svn_error_t *err;
+
+  SVN_ERR(svn_test__create_fs(&fs, "test-repo-internal-txn-props",
+                              opts, pool));
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0,
+                            SVN_FS_TXN_CHECK_LOCKS |
+                            SVN_FS_TXN_CHECK_OOD |
+                            SVN_FS_TXN_CLIENT_DATE, pool));
+
+  /* Ensure that we cannot read internal transaction properties. */
+  SVN_ERR(svn_fs_txn_prop(&val, txn, SVN_FS__PROP_TXN_CHECK_LOCKS, pool));
+  SVN_TEST_ASSERT(!val);
+  SVN_ERR(svn_fs_txn_prop(&val, txn, SVN_FS__PROP_TXN_CHECK_OOD, pool));
+  SVN_TEST_ASSERT(!val);
+  SVN_ERR(svn_fs_txn_prop(&val, txn, SVN_FS__PROP_TXN_CLIENT_DATE, pool));
+  SVN_TEST_ASSERT(!val);
+
+  SVN_ERR(svn_fs_txn_proplist(&proplist, txn, pool));
+  SVN_TEST_ASSERT(apr_hash_count(proplist) == 1);
+  val = svn_hash_gets(proplist, SVN_PROP_REVISION_DATE);
+  SVN_TEST_ASSERT(val);
+
+  /* We also cannot change or discard them. */
+  val = svn_string_create("Ooops!", pool);
+
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CHECK_LOCKS, val, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CHECK_LOCKS, NULL, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CHECK_OOD, val, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CHECK_OOD, NULL, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CLIENT_DATE, val, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+  err = svn_fs_change_txn_prop(txn, SVN_FS__PROP_TXN_CLIENT_DATE, NULL, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+
+  prop.name = "foo";
+  prop.value = svn_string_create("bar", pool);
+  internal_prop.name = SVN_FS__PROP_TXN_CHECK_LOCKS;
+  internal_prop.value = svn_string_create("Ooops!", pool);
+
+  props = apr_array_make(pool, 2, sizeof(svn_prop_t));
+  APR_ARRAY_PUSH(props, svn_prop_t) = prop;
+  APR_ARRAY_PUSH(props, svn_prop_t) = internal_prop;
+
+  err = svn_fs_change_txn_props(txn, props, pool);
+  SVN_TEST_ASSERT_ERROR(err, SVN_ERR_INCORRECT_PARAMS);
+
+  return SVN_NO_ERROR;
+}
+
 /* ------------------------------------------------------------------------ */
 
 /* The test table.  */
@@ -6877,6 +6913,8 @@ static struct svn_test_descriptor_t test
                        "test modify txn being written in FSFS"),
     SVN_TEST_OPTS_PASS(test_prop_and_text_rep_sharing_collision,
                        "test property and text rep-sharing collision"),
+    SVN_TEST_OPTS_PASS(test_internal_txn_props,
+                       "test setting and getting internal txn props"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/reuse-ra-session/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/libsvn_subr/string-test.c?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/libsvn_subr/string-test.c Wed Mar  4 15:56:18 2015
@@ -686,10 +686,11 @@ test_string_similarity(apr_pool_t *pool)
     unsigned int score;
   } tests[] =
       {
-#define SCORE(lcs, len) ((2000 * (lcs) + (len)/2) / (len))
+#define SCORE(lcs, len) \
+   ((2 * SVN_STRING__SIM_RANGE_MAX * (lcs) + (len)/2) / (len))
 
         /* Equality */
-        {"",       "",          0, 1000},
+        {"",       "",          0, SVN_STRING__SIM_RANGE_MAX},
         {"quoth",  "quoth",     5, SCORE(5, 5+5)},
 
         /* Deletion at start */
@@ -743,17 +744,20 @@ test_string_similarity(apr_pool_t *pool)
   for (t = tests; t->stra; ++t)
     {
       apr_size_t lcs;
-      const unsigned int score =
+      const apr_size_t score =
         svn_cstring__similarity(t->stra, t->strb, &buffer, &lcs);
       /*
       fprintf(stderr,
-              "lcs %s ~ %s score %.3f (%"APR_SIZE_T_FMT
-              ") expected %.3f (%"APR_SIZE_T_FMT"))\n",
-              t->stra, t->strb, score/1000.0, lcs, t->score/1000.0, t->lcs);
+              "lcs %s ~ %s score %.6f (%"APR_SIZE_T_FMT
+              ") expected %.6f (%"APR_SIZE_T_FMT"))\n",
+              t->stra, t->strb, score/1.0/SVN_STRING__SIM_RANGE_MAX,
+              lcs, t->score/1.0/SVN_STRING__SIM_RANGE_MAX, t->lcs);
       */
       if (score != t->score)
-        return fail(pool, "%s ~ %s score %.3f <> expected %.3f",
-                    t->stra, t->strb, score/1000.0, t->score/1000.0);
+        return fail(pool, "%s ~ %s score %.6f <> expected %.6f",
+                    t->stra, t->strb,
+                    score/1.0/SVN_STRING__SIM_RANGE_MAX,
+                    t->score/1.0/SVN_STRING__SIM_RANGE_MAX);
 
       if (lcs != t->lcs)
         return fail(pool,
@@ -766,7 +770,8 @@ test_string_similarity(apr_pool_t *pool)
   {
     const svn_string_t foo = {"svn:foo", 4};
     const svn_string_t bar = {"svn:bar", 4};
-    if (1000 != svn_string__similarity(&foo, &bar, &buffer, NULL))
+    if (SVN_STRING__SIM_RANGE_MAX
+        != svn_string__similarity(&foo, &bar, &buffer, NULL))
       return fail(pool, "'%s'[:4] ~ '%s'[:4] found different",
                   foo.data, bar.data);
   }

Modified: subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/conflict-data-test.c Wed Mar  4 15:56:18 2015
@@ -809,6 +809,108 @@ test_prop_conflicts(const svn_test_opts_
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_prop_conflict_resolving(const svn_test_opts_t *opts,
+                             apr_pool_t *pool)
+{
+  svn_test__sandbox_t b;
+  svn_skel_t *conflict;
+  const char *A_abspath;
+  const char *marker_abspath;
+  apr_hash_t *conflicted_props;
+  apr_hash_t *props;
+  const char *value;
+
+  SVN_ERR(svn_test__sandbox_create(&b, "test_prop_resolving", opts, pool));
+  SVN_ERR(sbox_wc_mkdir(&b, "A"));
+
+  SVN_ERR(sbox_wc_propset(&b, "prop-1", "r1", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-2", "r1", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-3", "r1", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-4", "r1", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-5", "r1", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-6", "r1", "A"));
+
+  SVN_ERR(sbox_wc_commit(&b, ""));
+  SVN_ERR(sbox_wc_propset(&b, "prop-1", "r2", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-2", "r2", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-3", "r2", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-4", NULL, "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-5", NULL, "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-7", "r2", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-8", "r2", "A"));
+  SVN_ERR(sbox_wc_commit(&b, ""));
+
+  SVN_ERR(sbox_wc_propset(&b, "prop-1", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-2", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-3", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-4", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-5", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-6", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-7", "mod", "A"));
+  SVN_ERR(sbox_wc_propset(&b, "prop-8", "mod", "A"));
+
+  SVN_ERR(sbox_wc_update(&b, "", 1));
+
+  A_abspath = sbox_wc_path(&b, "A");
+  SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL,
+                                   b.wc_ctx->db, A_abspath,
+                                   pool, pool));
+
+  /* We have tree conflicts... */
+  SVN_TEST_ASSERT(conflict != NULL);
+
+  SVN_ERR(svn_wc__conflict_read_prop_conflict(&marker_abspath,
+                                              NULL, NULL, NULL,
+                                              &conflicted_props,
+                                              b.wc_ctx->db, A_abspath,
+                                              conflict,
+                                              pool, pool));
+
+  SVN_TEST_ASSERT(conflicted_props != NULL);
+  /* All properties but r6 are conflicted */
+  SVN_TEST_ASSERT(apr_hash_count(conflicted_props) == 7);
+  SVN_TEST_ASSERT(! svn_hash_gets(conflicted_props, "prop-6"));
+
+  /* Let's resolve a few conflicts */
+  SVN_ERR(sbox_wc_resolve_prop(&b, "A", "prop-1",
+                               svn_wc_conflict_choose_mine_conflict));
+  SVN_ERR(sbox_wc_resolve_prop(&b, "A", "prop-2",
+                               svn_wc_conflict_choose_theirs_conflict));
+  SVN_ERR(sbox_wc_resolve_prop(&b, "A", "prop-3",
+                               svn_wc_conflict_choose_merged));
+
+  SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL,
+                                   b.wc_ctx->db, A_abspath,
+                                   pool, pool));
+
+  /* We have tree conflicts... */
+  SVN_TEST_ASSERT(conflict != NULL);
+
+  SVN_ERR(svn_wc__conflict_read_prop_conflict(&marker_abspath,
+                                              NULL, NULL, NULL,
+                                              &conflicted_props,
+                                              b.wc_ctx->db, A_abspath,
+                                              conflict,
+                                              pool, pool));
+
+  SVN_TEST_ASSERT(conflicted_props != NULL);
+  SVN_TEST_ASSERT(apr_hash_count(conflicted_props) == 4);
+
+  SVN_ERR(svn_wc__db_read_props(&props, b.wc_ctx->db, A_abspath,
+                                pool, pool));
+
+  value = svn_prop_get_value(props, "prop-1");
+  SVN_TEST_STRING_ASSERT(value, "mod");
+  value = svn_prop_get_value(props, "prop-2");
+  SVN_TEST_STRING_ASSERT(value, "r1");
+  value = svn_prop_get_value(props, "prop-3");
+  SVN_TEST_STRING_ASSERT(value, "mod");
+  
+  return SVN_NO_ERROR;
+}
+
+
 /* The test table.  */
 
 static int max_threads = 1;
@@ -830,6 +932,8 @@ static struct svn_test_descriptor_t test
                        "read and write a tree conflict"),
     SVN_TEST_OPTS_PASS(test_prop_conflicts,
                        "test prop conflicts"),
+    SVN_TEST_OPTS_PASS(test_prop_conflict_resolving,
+                       "test property conflict resolving"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/entries-compat.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/entries-compat.c?rev=1664059&r1=1664058&r2=1664059&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/entries-compat.c (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/entries-compat.c Wed Mar  4 15:56:18 2015
@@ -417,6 +417,8 @@ test_stubs(apr_pool_t *pool)
      subdir baton with ADM_ACCESS.  */
   SVN_ERR(svn_wc_entry(&stub_entry, local_relpath, adm_access, TRUE, pool));
   SVN_TEST_STRING_ASSERT(stub_entry->name, "M");
+  /* Schedule add in parent-wc. Schedule normal in obstructing working copy */
+  SVN_TEST_ASSERT(stub_entry->schedule == svn_wc_schedule_add);
 
   SVN_ERR(svn_wc_adm_open3(&subdir_access,
                            adm_access,
@@ -430,6 +432,7 @@ test_stubs(apr_pool_t *pool)
   /* Ensure we get the real entry.  */
   SVN_ERR(svn_wc_entry(&entry, local_relpath, subdir_access, TRUE, pool));
   SVN_TEST_STRING_ASSERT(entry->name, "");
+  SVN_TEST_ASSERT(entry->schedule == svn_wc_schedule_normal);
 
   /* Ensure that we get the SAME entry, even using the parent baton.  */
   SVN_ERR(svn_wc_entry(&test_entry, local_relpath, adm_access, TRUE, pool));