You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2010/09/21 16:14:14 UTC

svn commit: r999427 [3/3] - in /subversion/branches/atomic-revprop: ./ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/javahl/src/org/tigris/subversion/javahl/ subversion/bindings/java...

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/copy_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/copy_tests.py Tue Sep 21 14:14:12 2010
@@ -3799,106 +3799,6 @@ def allow_unversioned_parent_for_copy_sr
                                      wc2_dir,
                                      copy_to_path)
 
-
-#----------------------------------------------------------------------
-# Issue #2986
-def replaced_local_source_for_incoming_copy(sbox):
-  "update receives copy, but local source is replaced"
-  sbox.build()
-  wc_dir = sbox.wc_dir
-  other_wc_dir = wc_dir + '-other'
-
-  # These paths are for regular content testing.
-  tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
-  rho_url = sbox.repo_url + '/A/D/G/rho'
-  pi_url = sbox.repo_url + '/A/D/G/pi'
-  other_G_path = os.path.join(other_wc_dir, 'A', 'D', 'G')
-  other_rho_path = os.path.join(other_G_path, 'rho')
-
-  # These paths are for properties testing.
-  H_path = os.path.join(wc_dir, 'A', 'D', 'H')
-  chi_path = os.path.join(H_path, 'chi')
-  psi_path = os.path.join(H_path, 'psi')
-  omega_path = os.path.join(H_path, 'omega')
-  psi_url = sbox.repo_url + '/A/D/H/psi'
-  chi_url = sbox.repo_url + '/A/D/H/chi'
-  other_H_path = os.path.join(other_wc_dir, 'A', 'D', 'H')
-  other_psi_path = os.path.join(other_H_path, 'psi')
-  other_omega_path = os.path.join(other_H_path, 'omega')
-
-  # Prepare for properties testing.  If the regular content bug
-  # reappears, we still want to be able to test for the property bug
-  # independently.  That means making two files have the same content,
-  # to avoid encountering the checksum error that might reappear in a
-  # regression.  So here we do that, as well as set the marker
-  # property that we'll check for later.  The reason to set the marker
-  # property in this commit, rather than later, is so that we pass the
-  # conditional in update_editor.c:locate_copyfrom() that compares the
-  # revisions.
-  svntest.main.file_write(chi_path, "Same contents for two files.\n")
-  svntest.main.file_write(psi_path, "Same contents for two files.\n")
-  svntest.actions.run_and_verify_svn(None, None, [], 'propset',
-                                     'chi-prop', 'chi-val', chi_path)
-  svntest.actions.run_and_verify_svn(None, None, [], 'ci',
-                                     '-m', 'identicalize contents', wc_dir);
-  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
-
-  # Make the duplicate working copy.
-  svntest.main.safe_rmtree(other_wc_dir)
-  shutil.copytree(wc_dir, other_wc_dir)
-
-  try:
-    ## Test properties. ##
-
-    # Commit a replacement from the first working copy.
-    svntest.actions.run_and_verify_svn(None, None, [], 'rm',
-                                       omega_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'cp',
-                                       psi_url, omega_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'ci',
-                                       '-m', 'a propset and a copy', wc_dir);
-
-    # Now schedule a replacement in the second working copy, then update
-    # to receive the replacement from the first working copy, with the
-    # source being the now-scheduled-replace file.
-    svntest.actions.run_and_verify_svn(None, None, [], 'rm',
-                                       other_psi_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'cp',
-                                       chi_url, other_psi_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'up',
-                                       other_wc_dir)
-    exit_code, output, errput = svntest.main.run_svn(None, 'proplist',
-                                                     '-v', other_omega_path)
-    if len(errput):
-      raise svntest.Failure("unexpected error output: %s" % errput)
-    if len(output):
-      raise svntest.Failure("unexpected properties found on '%s': %s"
-                            % (other_omega_path, output))
-
-    ## Test regular content. ##
-
-    # Commit a replacement from the first working copy.
-    svntest.actions.run_and_verify_svn(None, None, [], 'rm',
-                                       tau_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'cp',
-                                       rho_url, tau_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'ci',
-                                       '-m', 'copy rho to tau', wc_dir);
-
-    # Now schedule a replacement in the second working copy, then update
-    # to receive the replacement from the first working copy, with the
-    # source being the now-scheduled-replace file.
-    svntest.actions.run_and_verify_svn(None, None, [], 'rm',
-                                       other_rho_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'cp',
-                                       pi_url, other_rho_path);
-    svntest.actions.run_and_verify_svn(None, None, [], 'up',
-                                       other_wc_dir)
-
-  finally:
-    svntest.main.safe_rmtree(other_wc_dir)
-
-
 def unneeded_parents(sbox):
   "svn cp --parents FILE_URL DIR_URL"
 
@@ -4771,60 +4671,6 @@ def move_added_nodes(sbox):
   expected_status.add({'X/Z' : Item(status='A ', wc_rev='0')})
   svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
 
-def locate_wrong_origin(sbox):
-  "update editor locates invalid file source"
-
-  sbox.build()
-
-  iota = os.path.join(sbox.wc_dir, 'iota')
-  gamma = os.path.join(sbox.wc_dir, 'A/D/gamma')
-
-  D1 = os.path.join(sbox.wc_dir, 'D1')
-  D2 = os.path.join(sbox.wc_dir, 'D2')
-
-  main.run_svn(None, 'mkdir', D1, D2)
-  main.run_svn(None, 'cp', iota, os.path.join(D1, 'iota'))
-  main.run_svn(None, 'cp', gamma, os.path.join(D2, 'iota'))
-
-  main.run_svn(None, 'ci', sbox.wc_dir, '-m', 'Add 2*iotas in r2')
-  main.run_svn(None, 'rm', D1)
-
-  main.run_svn(None, 'ci', sbox.wc_dir, '-m', 'Why?')
-
-  main.run_svn(None, 'cp', D2, D1)
-  main.run_svn(None, 'ci', sbox.wc_dir, '-m', 'Replace one iota')
-
-  # <= 1.6 needs a new checkout here to reproduce, but not since r961831.
-  # so we just perform an update
-  main.run_svn(None, 'up', sbox.wc_dir)
-
-  main.run_svn(None, 'cp', sbox.repo_url + '/D1/iota@2',
-               sbox.repo_url + '/iobeta', '-m', 'Copy iota')
-
-
-  expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 4)
-  expected_status.add({
-    'D1'                : Item(status='  ', wc_rev='4'),
-    'D1/iota'           : Item(status='  ', wc_rev='4'),
-    'D2'                : Item(status='  ', wc_rev='4'),
-    'D2/iota'           : Item(status='  ', wc_rev='4'),
-  })
-  svntest.actions.run_and_verify_status(sbox.wc_dir, expected_status)
-
-  # The next update receives an add_file('/D1/iota', 2), which it then tries
-  # to locate in the local working copy. It finds a '/D1/iota' in the expected
-  # place, with a last-changed revision of 2 and a local revision of HEAD-1
-  #
-  # locate_copyfrom identifies this file as correct because 
-  #     * last-mod <= 2 and
-  #     * 2 <= REV
-  #
-  # Luckily close_file() receives an expected_checksum which makes us fail, or
-  # we would have a completely broken working copy
-
-  # So this gives a Checksum mismatch error.
-  main.run_svn(None, 'up', sbox.wc_dir)
-
 # This test currently fails, but should work ok once we move to single DB
 def copy_over_deleted_dir(sbox):
   "copy a directory over a deleted directory"
@@ -4910,7 +4756,6 @@ test_list = [ None,
               copy_make_parents_repo_repo,
               URI_encoded_repos_to_wc,
               allow_unversioned_parent_for_copy_src,
-              replaced_local_source_for_incoming_copy,
               unneeded_parents,
               double_parents_with_url,
               copy_into_absent_dir,
@@ -4929,9 +4774,6 @@ test_list = [ None,
               changed_data_should_match_checkout,
               XFail(changed_dir_data_should_match_checkout),
               move_added_nodes,
-              # Serf needs a different testcase for this issue
-              XFail(Skip(locate_wrong_origin,
-                         svntest.main.is_ra_type_dav_serf)),
               copy_over_deleted_dir,
              ]
 

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/input_validation_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/input_validation_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/input_validation_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/input_validation_tests.py Tue Sep 21 14:14:12 2010
@@ -166,6 +166,13 @@ def invalid_merge_args(sbox):
   run_and_verify_svn_in_wc(sbox, "svn: Path '.*' does not exist",
                            'merge', '-c42', '^/mu', 'nonexistent')
 
+def invalid_wcpath_upgrade(sbox):
+  "non-working copy paths for 'upgrade'"
+  sbox.build(read_only=True)
+  for target in _invalid_wc_path_targets:
+    run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'upgrade',
+                             target, target)
+
 
 ########################################################################
 # Run the tests
@@ -184,6 +191,7 @@ test_list = [ None,
               invalid_import_args,
               invalid_log_targets,
               invalid_merge_args,
+              invalid_wcpath_upgrade,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/patch_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/patch_tests.py Tue Sep 21 14:14:12 2010
@@ -2436,7 +2436,14 @@ def patch_same_twice(sbox):
     'G         %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
     '>         hunk @@ -1,1 +1,1 @@ already applied\n',
     'G         %s\n' % os.path.join(wc_dir, 'iota'),
-    '>         hunk @@ -1,1 +1,2 @@ already applied\n',
+    # The iota patch inserts a line after the first line in the file,
+    # with no trailing context. Currently, Subversion applies this patch
+    # multiple times, which matches the behaviour of Larry Wall's patch
+    # implementation. A more complicated hunk matching algorithm is needed
+    # to detect the duplicate application in this case. GNU patch does detect
+    # the duplicate application. Should Subversion be taught to detect it,
+    # we need this line here:
+    # '>         hunk @@ -1,1 +1,2 @@ already applied\n',
     'G         %s\n' % os.path.join(wc_dir, 'new'),
     '>         hunk @@ -0,0 +1,1 @@ already applied\n',
     'G         %s\n' % os.path.join(wc_dir, 'A', 'mu'),
@@ -2449,6 +2456,10 @@ def patch_same_twice(sbox):
 
   expected_skip = wc.State('', {beta_path : Item()})
 
+  # See above comment about the iota patch being applied twice.
+  iota_contents += "Some more bytes\n"
+  expected_disk.tweak('iota', contents=iota_contents)
+
   svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
                                        expected_output,
                                        expected_disk,
@@ -3141,6 +3152,205 @@ def patch_old_target_names(sbox):
                                        1, # dry-run
                                        "--old-patch-target-names")
 
+def patch_reverse_revert(sbox):
+  "revert a patch by reverse patching"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  patch_file_path = make_patch_path(sbox)
+  mu_path = os.path.join(wc_dir, 'A', 'mu')
+
+  mu_contents_pre_patch = [
+    "Dear internet user,\n",
+    "\n",
+    "We wish to congratulate you over your email success in our computer\n",
+    "Balloting. This is a Millennium Scientific Electronic Computer Draw\n",
+    "in which email addresses were used. All participants were selected\n",
+    "through a computer ballot system drawn from over 100,000 company\n",
+    "and 50,000,000 individual email addresses from all over the world.\n",
+    "\n",
+    "Your email address drew and have won the sum of  750,000 Euros\n",
+    "( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+    "file with\n",
+    "    REFERENCE NUMBER: ESP/WIN/008/05/10/MA;\n",
+    "    WINNING NUMBER : 14-17-24-34-37-45-16\n",
+    "    BATCH NUMBERS :\n",
+    "    EULO/1007/444/606/08;\n",
+    "    SERIAL NUMBER: 45327\n",
+    "and PROMOTION DATE: 13th June. 2009\n",
+    "\n",
+    "To claim your winning prize, you are to contact the appointed\n",
+    "agent below as soon as possible for the immediate release of your\n",
+    "winnings with the below details.\n",
+    "\n",
+    "Again, we wish to congratulate you over your email success in our\n"
+    "computer Balloting.\n"
+  ]
+
+  # Set mu contents
+  svntest.main.file_write(mu_path, ''.join(mu_contents_pre_patch), 'wb')
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/mu'       : Item(verb='Sending'),
+    })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/mu', wc_rev=2)
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None, wc_dir)
+
+  # Apply patch
+
+  unidiff_patch = [
+    "Index: A/D/gamma\n",
+    "===================================================================\n",
+    "--- A/D/gamma\t(revision 1)\n",
+    "+++ A/D/gamma\t(working copy)\n",
+    "@@ -1 +1 @@\n",
+    "-This is the file 'gamma'.\n",
+    "+It is the file 'gamma'.\n",
+    "Index: iota\n",
+    "===================================================================\n",
+    "--- iota\t(revision 1)\n",
+    "+++ iota\t(working copy)\n",
+    "@@ -1 +1,2 @@\n",
+    " This is the file 'iota'.\n",
+    "+Some more bytes\n",
+    "\n",
+    "Index: new\n",
+    "===================================================================\n",
+    "--- new	(revision 0)\n",
+    "+++ new	(revision 0)\n",
+    "@@ -0,0 +1 @@\n",
+    "+new\n",
+    "\n",
+    "--- A/mu.orig	2009-06-24 15:23:55.000000000 +0100\n",
+    "+++ A/mu	2009-06-24 15:21:23.000000000 +0100\n",
+    "@@ -6,6 +6,9 @@\n",
+    " through a computer ballot system drawn from over 100,000 company\n",
+    " and 50,000,000 individual email addresses from all over the world.\n",
+    " \n",
+    "+It is a promotional program aimed at encouraging internet users;\n",
+    "+therefore you do not need to buy ticket to enter for it.\n",
+    "+\n",
+    " Your email address drew and have won the sum of  750,000 Euros\n",
+    " ( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+    " file with\n",
+    "@@ -14,11 +17,8 @@\n",
+    "     BATCH NUMBERS :\n",
+    "     EULO/1007/444/606/08;\n",
+    "     SERIAL NUMBER: 45327\n",
+    "-and PROMOTION DATE: 13th June. 2009\n",
+    "+and PROMOTION DATE: 14th June. 2009\n",
+    " \n",
+    " To claim your winning prize, you are to contact the appointed\n",
+    " agent below as soon as possible for the immediate release of your\n",
+    " winnings with the below details.\n",
+    "-\n",
+    "-Again, we wish to congratulate you over your email success in our\n",
+    "-computer Balloting.\n",
+    "Index: A/B/E/beta\n",
+    "===================================================================\n",
+    "--- A/B/E/beta	(revision 1)\n",
+    "+++ A/B/E/beta	(working copy)\n",
+    "@@ -1 +0,0 @@\n",
+    "-This is the file 'beta'.\n",
+  ]
+
+  svntest.main.file_write(patch_file_path, ''.join(unidiff_patch), 'wb')
+
+  gamma_contents = "It is the file 'gamma'.\n"
+  iota_contents = "This is the file 'iota'.\nSome more bytes\n"
+  new_contents = "new\n"
+  mu_contents_post_patch = [
+    "Dear internet user,\n",
+    "\n",
+    "We wish to congratulate you over your email success in our computer\n",
+    "Balloting. This is a Millennium Scientific Electronic Computer Draw\n",
+    "in which email addresses were used. All participants were selected\n",
+    "through a computer ballot system drawn from over 100,000 company\n",
+    "and 50,000,000 individual email addresses from all over the world.\n",
+    "\n",
+    "It is a promotional program aimed at encouraging internet users;\n",
+    "therefore you do not need to buy ticket to enter for it.\n",
+    "\n",
+    "Your email address drew and have won the sum of  750,000 Euros\n",
+    "( Seven Hundred and Fifty Thousand Euros) in cash credited to\n",
+    "file with\n",
+    "    REFERENCE NUMBER: ESP/WIN/008/05/10/MA;\n",
+    "    WINNING NUMBER : 14-17-24-34-37-45-16\n",
+    "    BATCH NUMBERS :\n",
+    "    EULO/1007/444/606/08;\n",
+    "    SERIAL NUMBER: 45327\n",
+    "and PROMOTION DATE: 14th June. 2009\n",
+    "\n",
+    "To claim your winning prize, you are to contact the appointed\n",
+    "agent below as soon as possible for the immediate release of your\n",
+    "winnings with the below details.\n",
+  ]
+
+  expected_output = [
+    'U         %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
+    'U         %s\n' % os.path.join(wc_dir, 'iota'),
+    'A         %s\n' % os.path.join(wc_dir, 'new'),
+    'U         %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+    'D         %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+  ]
+
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.tweak('A/D/gamma', contents=gamma_contents)
+  expected_disk.tweak('iota', contents=iota_contents)
+  expected_disk.add({'new' : Item(contents=new_contents)})
+  expected_disk.tweak('A/mu', contents=''.join(mu_contents_post_patch))
+  expected_disk.remove('A/B/E/beta')
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/D/gamma', status='M ')
+  expected_status.tweak('iota', status='M ')
+  expected_status.add({'new' : Item(status='A ', wc_rev=0)})
+  expected_status.tweak('A/mu', status='M ', wc_rev=2)
+  expected_status.tweak('A/B/E/beta', status='D ')
+
+  expected_skip = wc.State('', { })
+
+  svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+                                       expected_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, # expected err
+                                       1, # check-props
+                                       1) # dry-run
+
+  # Applying the same patch in reverse should undo local mods
+  expected_output = [
+    'G         %s\n' % os.path.join(wc_dir, 'A', 'D', 'gamma'),
+    'G         %s\n' % os.path.join(wc_dir, 'iota'),
+    'D         %s\n' % os.path.join(wc_dir, 'new'),
+    'G         %s\n' % os.path.join(wc_dir, 'A', 'mu'),
+    'A         %s\n' % os.path.join(wc_dir, 'A', 'B', 'E', 'beta'),
+  ]
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.tweak('A/mu', contents=''.join(mu_contents_pre_patch))
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.tweak('A/mu', wc_rev=2)
+
+  ### svn patch should check whether the deleted file has the same
+  ### content as the file added by the patch and revert the deletion
+  ### instead of causing a replacement.
+  expected_status.tweak('A/B/E/beta', status='R ')
+
+  svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+                                       expected_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, # expected err
+                                       1, # check-props
+                                       1, # dry-run
+                                       '--reverse-diff',
+                                       '--old-patch-target-names')
+
 ########################################################################
 #Run the tests
 
@@ -3172,6 +3382,7 @@ test_list = [ None,
               patch_prop_with_fuzz,
               patch_git_add_file,
               patch_old_target_names,
+              patch_reverse_revert,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/resolve_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/resolve_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/resolve_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/resolve_tests.py Tue Sep 21 14:14:12 2010
@@ -110,23 +110,32 @@ def prop_conflict_resolution(sbox):
   wc_dir = sbox.wc_dir
 
   # Some paths we'll care about
-  iota_path = os.path.join(wc_dir, "iota")
-  mu_path   = os.path.join(wc_dir, "A", "mu")
+  iota_path  = os.path.join(wc_dir, "iota")
+  mu_path    = os.path.join(wc_dir, "A", "mu")
+  gamma_path = os.path.join(wc_dir, "A", "D", "gamma")
+  psi_path   = os.path.join(wc_dir, "A", "D", "H", "psi")
   
-  # r2 - Set property 'propname:propval' on iota and A/mu.
+  # r2 - Set property 'propname:propval' on iota, A/mu, and A/D/gamma.
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'ps', 'propname', 'propval',
-                                     iota_path, mu_path)
+                                     iota_path, mu_path, gamma_path)
   svntest.actions.run_and_verify_svn(None, None, [], 'commit',
                                      '-m', 'create some new properties',
                                      wc_dir)
 
-  # r3 - Delete property 'propname' from iota and change the property value
-  # of 'propname' on A/mu to 'incoming'.
+  # r3 - Make some changes to the props from r2:
+  #
+  #   iota      : Delete property 'propname'
+  #   A/mu      : Change property 'propname' to 'incoming-conflict'
+  #   A/D/gamma : Change property 'propname' to 'incoming-no-conflict'
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'pd', 'propname', iota_path)
   svntest.actions.run_and_verify_svn(None, None, [],
-                                     'ps', 'propname', 'incoming', mu_path)
+                                     'ps', 'propname', 'incoming-conflict',
+                                     mu_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ps', 'propname', 'incoming-no-conflict',
+                                     gamma_path)
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'commit', '-m', 'delete a property',
                                      wc_dir)
@@ -135,22 +144,54 @@ def prop_conflict_resolution(sbox):
                                          resolved_deleted_prop_val_output,
                                          resolved_edited_prop_val_output):
 
-    """Revert the WC, update it to r2, set the property 'propname:local_edit'
-    on iota and A/mu.  Update the WC, postponing conflicts, then run svn
-    resolve -R --accept=RESOLVE_ACCEPT and check that the property on iota
-    (using svn pg), is RESOLVED_PROP_VAL_OUTPUT and property on A/mu is
-    RESOLVED_EDITED_PROP_VAL_OUTPUT.  Both output arguments follow the rules
-    for the expected_stdout arg to run_and_verify_svn2()"""
+    """Revert the WC, update it to r2, and set the following properties:
+
+    itoa      : 'propname' = 'local_edit'
+                'newprop'  = 'new-val-no-incoming' 
+    A/mu      : 'propname' = 'local_edit'
+    A/D/gamma : 'propname' = 'incoming-no-conflict'
+    A/D/H/psi : 'newprop'  = 'new-val-no-incoming'
+
+    Update the WC, postponing conflicts, then run svn resolve -R
+    --accept=RESOLVE_ACCEPT.
+
+    Using svn propget, check that the resolution results in the following
+    properties:
+
+    itoa      : 'propname' = RESOLVED_EDITED_PROP_VAL_OUTPUT
+                'newprop'  = 'new-val-no-incoming' 
+    A/mu      : 'propname' = RESOLVED_DELETED_PROP_VAL_OUTPUT
+    A/D/gamma : 'propname' = 'incoming-no-conflict'
+    A/D/H/psi : 'newprop'  = 'new-val-no-incoming'
+
+    RESOLVED_DELETED_PROP_VAL_OUTPUT and RESOLVED_EDITED_PROP_VAL_OUTPUT
+    both follow the rules for the expected_stdout arg to
+    run_and_verify_svn2()"""
 
     svntest.actions.run_and_verify_svn(None, None, [],
                                        'revert', '--recursive', wc_dir)
     svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r2', wc_dir)
+
+    # Set some properties that will conflict when we update.
     svntest.actions.run_and_verify_svn(None, None, [], 'ps',
                                        'propname', 'local_edit',
                                        iota_path, mu_path)
+
+    # Set a property that should always merge cleanly with the update.
+    svntest.actions.run_and_verify_svn(None, None, [], 'ps',
+                                       'propname', 'incoming-no-conflict',
+                                       gamma_path)
+
+    # Set a property that has no update coming.
+    svntest.actions.run_and_verify_svn(None, None, [], 'ps',
+                                       'newprop', 'new-val-no-incoming',
+                                       psi_path,
+                                       iota_path)
+
+    # Update, postponing all conflict resolution. 
     svntest.actions.run_and_verify_svn(None, None, [], 'up',
                                        '--accept=postpone', wc_dir)
-    svntest.actions.run_and_verify_resolve([iota_path, mu_path], '-R',
+    svntest.actions.run_and_verify_resolve([iota_path, mu_path, gamma_path], '-R',
                                            '--accept', resolve_accept, wc_dir)
     svntest.actions.run_and_verify_svn(
       'svn revolve -R --accept=' + resolve_accept + ' of prop conflict '
@@ -159,25 +200,45 @@ def prop_conflict_resolution(sbox):
     svntest.actions.run_and_verify_svn(
       'svn revolve -R --accept=' + resolve_accept + ' of prop conflict '
       'not resolved as expected;',
+      ['new-val-no-incoming\n'], [], 'pg', 'newprop', iota_path)
+    svntest.actions.run_and_verify_svn(
+      'svn revolve -R --accept=' + resolve_accept + ' of prop conflict '
+      'not resolved as expected;',
       resolved_edited_prop_val_output, [], 'pg', 'propname', mu_path)
+    svntest.actions.run_and_verify_svn(
+      'svn revolve -R --accept=' + resolve_accept + ' modified a '
+      'non-conflicted property',
+      ['incoming-no-conflict\n'], [], 'pg', 'propname', gamma_path)
+    svntest.actions.run_and_verify_svn(
+      'svn revolve -R --accept=' + resolve_accept + ' modified a '
+      'non-conflicted property',
+      ['new-val-no-incoming\n'], [], 'pg', 'newprop', psi_path)
 
-  # Test how svn resolve deals with prop conflicts resulting from:
+  # Test how svn resolve deals with prop conflicts and other local
+  # prop changes:
   #
   #   1) 'iota' - An incoming prop delete on a local prop modification.
   #   2) 'A/mu' - An incoming prop edit on a local prop modification.
+  #   3) 'A/D/gamma' - An local, non-conflicted prop edit
   #
   # This currently fails because svn resolve --accept=[theirs-conflict |
-  # theirs-full] does not delete the locally modified property.
+  # theirs-full] removes the conflicts, but doesn't install 'their' version
+  # of the conflicted properties.
   do_prop_conflicting_up_and_resolve('mine-full',
-                                     ['local_edit\n'], ['local_edit\n'])
+                                     ['local_edit\n'],
+                                     ['local_edit\n'])
   do_prop_conflicting_up_and_resolve('mine-conflict',
-                                     ['local_edit\n'], ['local_edit\n'])
+                                     ['local_edit\n'],
+                                     ['local_edit\n'])
   do_prop_conflicting_up_and_resolve('working',
-                                     ['local_edit\n'], ['local_edit\n'])
+                                    ['local_edit\n'],
+                                     ['local_edit\n'])
   do_prop_conflicting_up_and_resolve('theirs-conflict',
-                                     [], ['incoming\n'])
+                                     [], # Prop deleted
+                                     ['incoming-conflict\n'])
   do_prop_conflicting_up_and_resolve('theirs-full',
-                                     [], ['incoming\n'])
+                                     [], # Prop deleted
+                                     ['incoming-conflict\n'])
 
 ########################################################################
 # Run the tests

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/resolved_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/resolved_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/resolved_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/resolved_tests.py Tue Sep 21 14:14:12 2010
@@ -37,8 +37,7 @@ SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
-from svntest.main import SVN_PROP_MERGEINFO, server_sends_copyfrom_on_update, \
-  server_has_mergeinfo
+from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
 
 ######################################################################
 # Tests

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/svnrdump_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/svnrdump_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/svnrdump_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/svnrdump_tests.py Tue Sep 21 14:14:12 2010
@@ -41,6 +41,18 @@ XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 Wimp = svntest.testcase.Wimp
 
+## Mismatched headers during dumping operation
+# Text-copy-source-* and *-sha1 headers are not provided by the RA
+# layer. `svnadmin dump` is able to provide them because it works on
+# the FS layer. Also, svnrdump attaches "Prop-delta: true" with
+# everything whether it's really a delta or a new prop (delta from
+# /dev/null). This is really harmless, but `svnadmin dump` contains
+# the logic for differentiating between these two cases.
+
+mismatched_headers_re = \
+    "Prop-delta: |Text-content-sha1: |Text-copy-source-md5: |" \
+    "Text-copy-source-sha1: |Text-delta-base-sha1: .*"
+
 ######################################################################
 # Helper routines
 
@@ -80,7 +92,8 @@ def run_dump_test(sbox, dumpfile_name):
 
   # Compare the output from stdout
   svntest.verify.compare_and_display_lines(
-    "Dump files", "DUMP", svnadmin_dumpfile, svnrdump_dumpfile)
+    "Dump files", "DUMP", svnadmin_dumpfile, svnrdump_dumpfile,
+    None, mismatched_headers_re)
 
 def run_load_test(sbox, dumpfile_name):
   """Load a dumpfile using 'svnrdump load', dump it with 'svnadmin
@@ -125,7 +138,7 @@ def run_load_test(sbox, dumpfile_name):
 # Tests
 
 def basic_dump(sbox):
-  "dump the standard sbox repos"
+  "dump: standard sbox repos"
   sbox.build(read_only = True, create_wc = False)
 
   out = \
@@ -137,11 +150,11 @@ def basic_dump(sbox):
     raise svntest.Failure('No valid output')
 
 def revision_0_dump(sbox):
-  "dump revision zero"
+  "dump: revision zero"
   run_dump_test(sbox, "revision-0.dump")
 
 def revision_0_load(sbox):
-  "load revision zero"
+  "load: revision zero"
   run_load_test(sbox, "revision-0.dump")
 
 # skeleton.dump repository layout
@@ -155,17 +168,89 @@ def revision_0_load(sbox):
 #       README      (Added r6)
 
 def skeleton_load(sbox):
-  "skeleton repository"
+  "load: skeleton repository"
   run_load_test(sbox, "skeleton.dump")
 
 def copy_and_modify_dump(sbox):
-  "copy and modify dump"
+  "dump: copy and modify"
   run_dump_test(sbox, "copy-and-modify.dump")
 
 def copy_and_modify_load(sbox):
-  "copy and modify load"
+  "load: copy and modify"
   run_load_test(sbox, "copy-and-modify.dump")
   
+def no_author_dump(sbox):
+  "dump: copy revs with no svn:author revprops"
+  run_dump_test(sbox, "no-author.dump")
+
+def no_author_load(sbox):
+  "load: copy revs with no svn:author revprops"
+  run_load_test(sbox, "no-author.dump")
+
+def copy_from_previous_version_and_modify_dump(sbox):
+  "dump: copy from previous version and modify"
+  run_dump_test(sbox, "copy-from-previous-version-and-modify.dump")
+  
+def copy_from_previous_version_and_modify_load(sbox):
+  "load: copy from previous version and modify"
+  run_load_test(sbox, "copy-from-previous-version-and-modify.dump")
+
+def modified_in_place_dump(sbox):
+  "dump: modified in place"
+  run_dump_test(sbox, "modified-in-place.dump")
+
+def modified_in_place_load(sbox):
+  "load: modified in place"
+  run_load_test(sbox, "modified-in-place.dump")
+
+def move_and_modify_in_the_same_revision_dump(sbox):
+  "dump: move parent & modify child file in same rev"
+  run_dump_test(sbox, "move-and-modify.dump")
+
+def move_and_modify_in_the_same_revision_load(sbox):
+  "load: move parent & modify child file in same rev"
+  run_load_test(sbox, "move-and-modify.dump")
+
+def tag_empty_trunk_dump(sbox):
+  "dump: tag empty trunk"
+  run_dump_test(sbox, "tag-empty-trunk.dump")
+
+def tag_empty_trunk_load(sbox):
+  "load: tag empty trunk"
+  run_load_test(sbox, "tag-empty-trunk.dump")
+
+def dir_prop_change_dump(sbox):
+  "dump: directory property changes"
+  run_dump_test(sbox, "dir-prop-change.dump")
+  
+def dir_prop_change_load(sbox):
+  "load: directory property changes"
+  run_load_test(sbox, "dir-prop-change.dump")
+
+def copy_parent_modify_prop_dump(sbox):
+  "dump: copy parent and modify prop"
+  run_dump_test(sbox, "copy-parent-modify-prop.dump")
+
+def copy_parent_modify_prop_load(sbox):
+  "load: copy parent and modify prop"
+  run_load_test(sbox, "copy-parent-modify-prop.dump")
+
+def copy_revprops_dump(sbox):
+  "dump: copy revprops other than svn:*"
+  run_dump_test(sbox, "revprops.dump")
+
+def copy_revprops_load(sbox):
+  "load: copy revprops other than svn:*"
+  run_load_test(sbox, "revprops.dump")
+
+def url_encoding_dump(sbox):
+  "dump: url encoding issues"
+  run_dump_test(sbox, "url-encoding-bug.dump")
+
+def url_encoding_load(sbox):
+  "load: url encoding issues"
+  run_load_test(sbox, "url-encoding-bug.dump")
+
 ########################################################################
 # Run the tests
 
@@ -176,8 +261,26 @@ test_list = [ None,
               revision_0_dump,
               revision_0_load,
               skeleton_load,
+              copy_and_modify_dump,
               copy_and_modify_load,
-              Wimp("Need to fix headers in RA layer", copy_and_modify_dump),
+              copy_from_previous_version_and_modify_dump,
+              copy_from_previous_version_and_modify_load,
+              modified_in_place_dump,
+              modified_in_place_load,
+              tag_empty_trunk_dump,
+              tag_empty_trunk_load,
+              dir_prop_change_dump,
+              dir_prop_change_load,
+              copy_parent_modify_prop_dump,
+              copy_parent_modify_prop_load,
+              url_encoding_dump,
+              url_encoding_load,
+              copy_revprops_dump,
+              Wimp("TODO", copy_revprops_load),
+              no_author_dump,
+              no_author_load,
+              Wimp("TODO", move_and_modify_in_the_same_revision_dump),
+              Wimp("TODO", move_and_modify_in_the_same_revision_load),
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/main.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/main.py Tue Sep 21 14:14:12 2010
@@ -1076,9 +1076,6 @@ def server_has_mergeinfo():
 def server_has_revprop_commit():
   return options.server_minor_version >= 5
 
-def server_sends_copyfrom_on_update():
-  return options.server_minor_version >= 5
-
 def server_authz_has_aliases():
   return options.server_minor_version >= 5
 

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/verify.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/verify.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/verify.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/svntest/verify.py Tue Sep 21 14:14:12 2010
@@ -108,7 +108,7 @@ class ExpectedOutput:
   def __cmp__(self, other):
     raise 'badness'
 
-  def matches(self, other):
+  def matches(self, other, except_re=None):
     """Return whether SELF.output matches OTHER (which may be a list
     of newline-terminated lines, or a single string).  Either value
     may be None."""
@@ -126,7 +126,31 @@ class ExpectedOutput:
     if not isinstance(expected, list):
       expected = [expected]
 
-    return self.is_equivalent_list(expected, actual)
+    if except_re:
+      return self.matches_except(expected, actual, except_re)
+    else:
+      return self.is_equivalent_list(expected, actual)
+
+  def matches_except(self, expected, actual, except_re):
+    "Return whether EXPECTED and ACTUAL match except for except_re."
+    if not self.is_regex:
+      i_expected = 0
+      i_actual = 0
+      while i_expected < len(expected) and i_actual < len(actual):
+        if re.match(except_re, actual[i_actual]):
+          i_actual += 1
+        elif re.match(except_re, expected[i_expected]):
+          i_expected += 1
+        elif expected[i_expected] == actual[i_actual]:
+          i_expected += 1
+          i_actual += 1
+        else:
+          return False
+      if i_expected == len(expected) and i_actual == len(actual):
+            return True
+      return False
+    else:
+      raise Exception("is_regex and except_re are mutually exclusive")
 
   def is_equivalent_list(self, expected, actual):
     "Return whether EXPECTED and ACTUAL are equivalent."
@@ -308,7 +332,7 @@ def display_lines(message, label, expect
       sys.stdout.write(x)
 
 def compare_and_display_lines(message, label, expected, actual,
-                              raisable=None):
+                              raisable=None, except_re=None):
   """Compare two sets of output lines, and print them if they differ,
   preceded by MESSAGE iff not None.  EXPECTED may be an instance of
   ExpectedOutput (and if not, it is wrapped as such).  RAISABLE is an
@@ -325,7 +349,7 @@ def compare_and_display_lines(message, l
     actual = [actual]
   actual = [line for line in actual if not line.startswith('DBG:')]
 
-  if not expected.matches(actual):
+  if not expected.matches(actual, except_re):
     expected.display_differences(message, label, actual)
     raise raisable
 

Modified: subversion/branches/atomic-revprop/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/cmdline/update_tests.py?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/atomic-revprop/subversion/tests/cmdline/update_tests.py Tue Sep 21 14:14:12 2010
@@ -40,8 +40,7 @@ SkipUnless = svntest.testcase.SkipUnless
 XFail = svntest.testcase.XFail
 Item = svntest.wc.StateItem
 
-from svntest.main import SVN_PROP_MERGEINFO, server_sends_copyfrom_on_update, \
-  server_has_mergeinfo
+from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
 
 ######################################################################
 # Tests
@@ -3503,248 +3502,6 @@ def mergeinfo_update_elision(sbox):
 
 
 #----------------------------------------------------------------------
-# If the update editor receives add_file(foo, copyfrom='blah'), it
-# should attempt to locate 'blah' in the wc, and then copy it into place.
-
-def update_handles_copyfrom(sbox):
-  "update should make use of copyfrom args"
-
-  sbox.build()
-  wc_dir = sbox.wc_dir
-
-  # Make a backup copy of the working copy.
-  wc_backup = sbox.add_wc_path('backup')
-  svntest.actions.duplicate_dir(wc_dir, wc_backup)
-
-  # Copy 'rho' to 'glub'
-  rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
-  glub_path = os.path.join(wc_dir, 'A', 'D', 'G', 'glub')
-  svntest.actions.run_and_verify_svn(None, None, [],
-                                     'copy', rho_path, glub_path)
-
-  # Commit that change, creating r2.
-  expected_output = svntest.wc.State(wc_dir, {
-    'A/D/G/glub' : Item(verb='Adding'),
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.add({
-    'A/D/G/glub' : Item(status='  ', wc_rev=2),
-    })
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
-
-  # Make a local edits to rho in the backup working copy - both text and props
-  rho2_path = os.path.join(wc_backup, 'A', 'D', 'G', 'rho')
-  svntest.main.file_append(rho2_path, "Some new text.\n")
-  svntest.main.run_svn(None, 'propset', 'Kubla', 'Khan', rho2_path)
-
-  # Now try updating our backup working copy: it should receive glub,
-  # but with copyfrom args of rho@1, and thus copy the existing
-  # (edited) rho to glub.  In other words, both rho and glub should be
-  # identical and contain the same local edits.
-
-  expected_output = svntest.wc.State(wc_backup, { })
-  expected_output = wc.State(wc_backup, {
-    'A/D/G/glub' : Item(status='A '),  ### perhaps update should show 'A +' ??
-    })
-
-  expected_disk = svntest.main.greek_state.copy()
-  expected_disk.tweak('A/D/G/rho',
-                      contents="This is the file 'rho'.\nSome new text.\n",
-                      props={'Kubla' : 'Khan'})
-  expected_disk.add({
-    'A/D/G/glub' : Item("This is the file 'rho'.\nSome new text.\n",
-                        props={'Kubla' : 'Khan'})
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_backup, 2)
-  expected_status.tweak('A/D/G/rho', wc_rev=2, status='MM')
-  expected_status.add({
-    'A/D/G/glub' : Item(status='MM', wc_rev=2),
-    })
-
-  svntest.actions.run_and_verify_update(wc_backup,
-                                        expected_output,
-                                        expected_disk,
-                                        expected_status,
-                                        check_props = True)
-
-#----------------------------------------------------------------------
-# if the update_editor receives add_file(copyfrom=...), and the
-# copyfrom_path simply isn't available in the working copy, it should
-# fall back to doing an RA request to fetch the file.
-
-def copyfrom_degrades_gracefully(sbox):
-  "update degrades well if copyfrom_path unavailable"
-
-  sbox.build()
-  wc_dir = sbox.wc_dir
-
-  # Make a backup copy of the working copy.
-  wc_backup = sbox.add_wc_path('backup')
-  svntest.actions.duplicate_dir(wc_dir, wc_backup)
-
-  # Move 'alpha' to 'glub'
-  alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
-  glub_path = os.path.join(wc_dir, 'A', 'D', 'G', 'glub')
-  svntest.actions.run_and_verify_svn(None, None, [],
-                                     'mv', alpha_path, glub_path)
-
-  # Commit that change, creating r2.
-  expected_output = svntest.wc.State(wc_dir, {
-    'A/B/E/alpha' : Item(verb='Deleting'),
-    'A/D/G/glub' : Item(verb='Adding'),
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.add({
-    'A/D/G/glub' : Item(status='  ', wc_rev=2),
-    })
-  expected_status.remove('A/B/E/alpha')
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
-
-  # In the 2nd working copy, update just one side of the move -- so that
-  # alpha gets deleted, but glub not yet added.
-  E_path = os.path.join(wc_backup, 'A', 'B', 'E')
-
-  expected_output = svntest.wc.State(E_path, {
-      'alpha' : Item(status='D '),
-      })
-
-  expected_disk = wc.State('', {
-      'beta'  : wc.StateItem("This is the file 'beta'.\n"),
-      })
-
-  expected_status = svntest.wc.State(E_path, {
-    ''           : Item(status='  '),
-    'beta'     : Item(status='  '),
-    })
-  expected_status.tweak(wc_rev=2)
-
-  svntest.actions.run_and_verify_update(E_path,
-                                        expected_output,
-                                        expected_disk,
-                                        expected_status)
-
-  # Now update the entire working copy, which should cause an
-  # add_file(glub, copyfrom_path=alpha)... except alpha is already gone.
-  # Update editor should gracefully fetch it via RA request.
-  expected_output = svntest.wc.State(wc_backup, { })
-  expected_output = wc.State(wc_backup, {
-    'A/D/G/glub' : Item(status='A '),
-    })
-
-  expected_disk = svntest.main.greek_state.copy()
-  expected_disk.remove('A/B/E/alpha')
-  expected_disk.add({
-    'A/D/G/glub' : Item("This is the file 'alpha'.\n"),
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_backup, 2)
-  expected_status.remove('A/B/E/alpha')
-  expected_status.add({
-    'A/D/G/glub' : Item(status='  ', wc_rev=2),
-    })
-
-  svntest.actions.run_and_verify_update(wc_backup,
-                                        expected_output,
-                                        expected_disk,
-                                        expected_status)
-
-#----------------------------------------------------------------------
-# If the update editor receives add_file(foo, copyfrom='blah'), it
-# should attempt to locate 'blah' in the wc, and then copy it into
-# place.  Furthermore, the new file should be able to receive
-# subsequent txdeltas coming from the server.
-
-def update_handles_copyfrom_with_txdeltas(sbox):
-  "update uses copyfrom & accepts further txdeltas"
-
-  sbox.build()
-  wc_dir = sbox.wc_dir
-
-  # Make a backup copy of the working copy.
-  wc_backup = sbox.add_wc_path('backup')
-  svntest.actions.duplicate_dir(wc_dir, wc_backup)
-
-  # Copy 'rho' to 'glub'
-  rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
-  glub_path = os.path.join(wc_dir, 'A', 'D', 'G', 'glub')
-  svntest.actions.run_and_verify_svn(None, None, [],
-                                     'copy', rho_path, glub_path)
-
-  # Commit that change, creating r2.
-  expected_output = svntest.wc.State(wc_dir, {
-    'A/D/G/glub' : Item(verb='Adding'),
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.add({
-    'A/D/G/glub' : Item(status='  ', wc_rev=2),
-    })
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
-
-  # Make additional edits to glub...
-  svntest.main.file_append_binary(glub_path, "Some new text.\n")
-  svntest.main.run_svn(None, 'propset', 'Kubla', 'Khan', glub_path)
-
-  # Commit the changes, creating r3.
-  expected_output = svntest.wc.State(wc_dir, {
-    'A/D/G/glub' : Item(verb='Sending'),
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.add({
-    'A/D/G/glub' : Item(status='  ', wc_rev=3),
-    })
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
-
-  # Make a local edit to rho in the backup working copy.
-  rho2_path = os.path.join(wc_backup, 'A', 'D', 'G', 'rho')
-  svntest.main.file_write(rho2_path,
-                          "New first line.\nThis is the file 'rho'.\n",
-                          "wb")
-
-  # Now try updating our backup working copy: it should receive glub,
-  # but with copyfrom args of rho@1, and thus copy the existing rho to
-  # glub.  Furthermore, it should then apply the extra r3 edits to the
-  # copied file.
-
-  expected_output = svntest.wc.State(wc_backup, { })
-  expected_output = wc.State(wc_backup, {
-    'A/D/G/glub' : Item(status='A '),  ### perhaps update should show 'A +' ??
-    })
-
-  expected_disk = svntest.main.greek_state.copy()
-  expected_disk.tweak('A/D/G/rho',
-                      contents="New first line.\nThis is the file 'rho'.\n")
-  expected_disk.add({
-    'A/D/G/glub' : Item("New first line.\nThis is the file 'rho'.\n"
-                        + "Some new text.\n",
-                        props={'Kubla' : 'Khan'})
-    })
-
-  expected_status = svntest.actions.get_virginal_state(wc_backup, 3)
-  expected_status.tweak('A/D/G/rho', wc_rev=3, status='M ')
-  expected_status.add({
-    'A/D/G/glub' : Item(status='M ', wc_rev=3),
-    })
-
-  svntest.actions.run_and_verify_update(wc_backup,
-                                        expected_output,
-                                        expected_disk,
-                                        expected_status,
-                                        check_props = True)
-
-#----------------------------------------------------------------------
 # Very obscure bug: Issue #2977.
 # Let's say there's a revision with
 #   $ svn mv b c
@@ -4951,105 +4708,6 @@ def tree_conflicts_on_update_3(sbox):
                         expected_status,
                         expected_info = expected_info) ] )
 
-#----------------------------------------------------------------------
-# Test for issue #3354 'update fails when file with local mods is moved
-# and modified'
-def update_moves_and_modifies_an_edited_file(sbox):
-  "update moves and modifies a file with edits"
-
-  # r1: Create our standard greek test tree.
-  sbox.build()
-  wc_dir = sbox.wc_dir
-
-  # Make a second working copy
-  other_wc = sbox.add_wc_path('other')
-  svntest.actions.duplicate_dir(wc_dir, other_wc)
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-
-  # Some paths we'll care about
-  E_path           = os.path.join(wc_dir, "A", "B", "E")
-  alpha_path       = os.path.join(wc_dir, "A", "B", "E", "alpha")
-  alpha_moved_path = os.path.join(wc_dir, "A", "B", "E", "alpha.moved")
-  other_alpha_path = os.path.join(other_wc, "A", "B", "E", "alpha")
-  other_E_path     = os.path.join(other_wc, "A", "B", "E")
-
-  # r2: Move A/B/E/alpha to A/B/E/alpha.moved in the first WC.
-  svntest.actions.run_and_verify_svn(None, None, [], 'move',
-                                     alpha_path, alpha_moved_path)
-
-  expected_output = wc.State(wc_dir, {
-    'A/B/E/alpha'       : Item(verb='Deleting'),
-    'A/B/E/alpha.moved' : Item(verb='Adding')
-    })
-
-  expected_status.add({'A/B/E/alpha.moved' : Item(status='  ', wc_rev=2)})
-  expected_status.remove('A/B/E/alpha')
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None, wc_dir)
-
-  # r3: Make a text mod to A/B/E/alpha.moved in the first WC.
-  new_content_for_alpha = 'alpha, modified after move\n'
-  svntest.main.file_write(alpha_moved_path, new_content_for_alpha)
-
-  expected_output = svntest.wc.State(wc_dir, {
-    'A/B/E/alpha.moved' : Item(verb='Sending'),
-    })
-
-  expected_status.tweak('A/B/E/alpha.moved', wc_rev=3)
-
-  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                        expected_status, None,
-                                        wc_dir)
-
-  # Make a text mod to A/B/E/alpha in the second WC then
-  # update the second WC.
-  new_content_for_other_alpha = 'alpha, modified\n'
-  svntest.main.file_write(other_alpha_path, new_content_for_other_alpha)
-
-  expected_output = wc.State(other_E_path, {
-    'alpha'       : Item(status='  ', treeconflict='C'),
-    'alpha.moved' : Item(status='C '),
-    })
-
-  expected_status = wc.State(other_E_path, {
-    ''            : Item(status='  ', wc_rev=3),
-    'alpha'       : Item(status='A ', wc_rev='-', copied='+', treeconflict='C'),
-    'alpha.moved' : Item(status='C ', wc_rev=3),
-    'beta'        : Item(status='  ', wc_rev=3),
-    })
-
-  expected_disk = wc.State('', {
-    'alpha'              : Item(new_content_for_other_alpha),
-    'alpha.moved'        : Item("<<<<<<< .mine\n" +
-                                new_content_for_other_alpha +
-                                "=======\n" +
-                                new_content_for_alpha +
-                                ">>>>>>> .r3\n"),
-    'alpha.moved.copied' : Item("This is the file 'alpha'.\n"),
-    'alpha.moved.r3'     : Item(new_content_for_alpha),
-    'alpha.moved.mine'   : Item(new_content_for_other_alpha),
-    'beta'               : Item("This is the file 'beta'.\n"),
-    })
-
-  # This update should succeed and leave A/B/E/alpha as scheduled for
-  # addition with the local edit made prior to the update (i.e. this is
-  # a tree conflict with the incoming delete half of the move in r2).
-  # A/B/E/alpha.moved should also be present and have a text conflict
-  # as a result of the incoming text edit in r3.
-  #
-  # Prior to the fix for issue #3354 this update failed and left the
-  # WC locked.
-  expected_skip = wc.State(other_E_path, { })
-
-  svntest.actions.run_and_verify_update(other_E_path,
-                                        expected_output,
-                                        expected_disk,
-                                        expected_status,
-                                        None, None, None, None, None,
-                                        True, other_E_path,
-                                        '--accept', 'postpone')
-
 # Issue #3334: a modify-on-deleted tree conflict should leave the node
 # updated to the target revision but still scheduled for deletion.
 def tree_conflict_uc1_update_deleted_tree(sbox):
@@ -5596,94 +5254,6 @@ def mergeinfo_updates_merge_with_local_m
                                      A_COPY_path)
 
 #----------------------------------------------------------------------
-# Test for receiving modified properties on added files that were originally
-# moved from somewhere else. (Triggers locate_copyfrom behavior)
-def add_moved_file_has_props(sbox):
-  """update adding moved file receives modified props"""
-  sbox.build()
-
-  wc_dir = sbox.wc_dir
-
-  G = os.path.join(os.path.join(wc_dir, 'A', 'D', 'G'))
-  pi  = os.path.join(G, 'pi')
-  G_new = os.path.join(wc_dir, 'G_new')
-
-  # Give pi some property
-  svntest.main.run_svn(None, 'ps', 'svn:eol-style', 'native', pi)
-  svntest.main.run_svn(None, 'ci', wc_dir, '-m', 'added eol-style')
-
-  svntest.actions.run_and_verify_svn(None, 'At revision 2.', [], 'up', wc_dir)
-
-  # Now move pi to a different place
-  svntest.main.run_svn(None, 'mkdir', G_new)
-  svntest.main.run_svn(None, 'mv', pi, G_new)
-  svntest.main.run_svn(None, 'ci', wc_dir, '-m', 'Moved pi to G_new')
-
-  svntest.actions.run_and_verify_svn(None, 'At revision 3.', [], 'up', wc_dir)
-
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
-  expected_status.remove('A/D/G/pi')
-  expected_status.add({
-    'G_new'    : Item (status='  ', wc_rev=3),
-    'G_new/pi' : Item (status='  ', wc_rev=3),
-  })
-
-  svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
-  svntest.main.run_svn(None, 'up', '-r', '0', G_new)
-  svntest.main.run_svn(None, 'up', wc_dir)
-
-  # This shouldn't show property modifications, but at r982550 it did.
-  svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
-#----------------------------------------------------------------------
-# Test for receiving modified properties on added files that were originally
-# moved from somewhere else. (Triggers locate_copyfrom behavior). This is
-# an extended variant that has another property change on the new path
-def add_moved_file_has_props2(sbox):
-  """update adding moved node receives 2* props"""
-  sbox.build()
-
-  wc_dir = sbox.wc_dir
-
-  G = os.path.join(os.path.join(wc_dir, 'A', 'D', 'G'))
-  pi  = os.path.join(G, 'pi')
-  G_new = os.path.join(wc_dir, 'G_new')
-
-  # Give pi some property
-  svntest.main.run_svn(None, 'ps', 'svn:eol-style', 'native', pi)
-  svntest.main.run_svn(None, 'ci', wc_dir, '-m', 'added eol-style')
-
-  svntest.actions.run_and_verify_svn(None, 'At revision 2.', [], 'up', wc_dir)
-
-  # Now move pi to a different place
-  svntest.main.run_svn(None, 'mkdir', G_new)
-  svntest.main.run_svn(None, 'mv', pi, G_new)
-  svntest.main.run_svn(None, 'ps', 'svn:eol-style', 'CR', os.path.join(G_new, 'pi'))
-
-  svntest.main.run_svn(None, 'ci', wc_dir, '-m', 'Moved pi to G_new')
-
-  svntest.actions.run_and_verify_svn(None, 'At revision 3.', [], 'up', wc_dir)
-
-
-  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
-  expected_status.remove('A/D/G/pi')
-  expected_status.add({
-    'G_new'    : Item (status='  ', wc_rev=3),
-    'G_new/pi' : Item (status='  ', wc_rev=3),
-  })
-
-  svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
-  svntest.main.run_svn(None, 'up', '-r', '0', G_new)
-  svntest.main.run_svn(None, 'up', wc_dir)
-
-  # This shouldn't show local modifications, but currently it
-  # shows a property conflict on G_new/pi.
-  svntest.actions.run_and_verify_status(wc_dir, expected_status)
-
-
 # A regression test for a 1.7-dev crash upon updating a WC to a different
 # revision when it contained an excluded dir.
 def update_with_excluded_subdir(sbox):
@@ -5792,11 +5362,6 @@ test_list = [ None,
               update_conflicted,
               SkipUnless(mergeinfo_update_elision,
                          server_has_mergeinfo),
-              SkipUnless(update_handles_copyfrom,
-                         server_sends_copyfrom_on_update),
-              copyfrom_degrades_gracefully,
-              SkipUnless(update_handles_copyfrom_with_txdeltas,
-                         server_sends_copyfrom_on_update),
               update_copied_from_replaced_and_changed,
               update_copied_and_deleted_prop,
               update_accept_conflicts,
@@ -5809,7 +5374,6 @@ test_list = [ None,
               tree_conflicts_on_update_2_2,
               XFail(tree_conflicts_on_update_2_3),
               tree_conflicts_on_update_3,
-              update_moves_and_modifies_an_edited_file,
               tree_conflict_uc1_update_deleted_tree,
               XFail(tree_conflict_uc2_schedule_re_add),
               set_deep_depth_on_target_with_shallow_children,
@@ -5817,8 +5381,6 @@ test_list = [ None,
               XFail(update_deleted_locked_files),
               XFail(update_empty_hides_entries),
               mergeinfo_updates_merge_with_local_mods,
-              add_moved_file_has_props,
-              XFail(add_moved_file_has_props2),
               update_with_excluded_subdir,
               XFail(update_with_file_lock_and_keywords_property_set)
              ]

Modified: subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/db-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/db-test.c?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/db-test.c (original)
+++ subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/db-test.c Tue Sep 21 14:14:12 2010
@@ -48,9 +48,9 @@
 #include "../svn_test.h"
 
 
-#define ROOT_ONE "http://example.com/one/"
-#define ROOT_TWO "http://example.com/two/"
-#define ROOT_THREE "http://example.com/three/"
+#define ROOT_ONE "http://example.com/one"
+#define ROOT_TWO "http://example.com/two"
+#define ROOT_THREE "http://example.com/three"
 
 #define UUID_ONE "uuid1"
 #define UUID_TWO "uuid2"
@@ -75,7 +75,7 @@
 #define MD5_2 "5d41402abc4b2a76b9719d911017c592"
 #define SHA1_1 "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d"
 
-#define I_TC_DATA "((conflict F file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) (conflict G file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) )"
+#define I_TC_DATA "((conflict F file update edited deleted (version 22 " ROOT_ONE " 1 2 branch1/ft/F none) (version 22 " ROOT_ONE " 1 3 branch1/ft/F file)) (conflict G file update edited deleted (version 22 " ROOT_ONE " 1 2 branch1/ft/F none) (version 22 " ROOT_ONE " 1 3 branch1/ft/F file)) )"
 
 static const char * const TESTING_DATA = (
    /* Load our test data.
@@ -387,7 +387,7 @@ static const char * const TESTING_DATA =
       the value 1 is just 'good enough' to make the nodes WORKING nodes. */
   "insert into nodes values ("
   "  1, 'I', 1, '', 2, 'some/dir', 2, 'normal', 'immediates',"
-  "  0, null, 'dir', 2, " TIME_2s ", ' " AUTHOR_2 " ', null, '()',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
   "  null, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J', 1, '', null, null, null, 'normal', 'immediates',"
@@ -399,11 +399,11 @@ static const char * const TESTING_DATA =
   "  null, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J/J-b', 1, 'J', 2, 'some/dir', 2, 'normal', 'infinity',"
-  "  0, null, 'dir', 2, " TIME_2s ", ' " AUTHOR_2 " ', null, '()',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
   "  null, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J/J-b/J-b-a', 1, 'J/J-b', 2, 'another/dir', 2, 'normal', 'infinity',"
-  "  0, null, 'dir', 2, " TIME_2s ", ' " AUTHOR_2 " ', null, '()',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
   "  null, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J/J-b/J-b-b', 1, 'J/J-b', null, null, null, 'normal', null,"
@@ -419,7 +419,7 @@ static const char * const TESTING_DATA =
   "  null, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J/J-d', 1, 'J', 2, 'moved/file', 2, 'normal', null,"
-  "  1, null, 'file', 2, " TIME_2s ", ' " AUTHOR_2 " ', '$md5 $ " MD5_1 " ',"
+  "  1, null, 'file', 2, " TIME_2s ", '" AUTHOR_2 "', '$md5 $ " MD5_1 " ',"
   " '()', 10, null, null, null, null);"
   "insert into nodes values ("
   "  1, 'J/J-e', 1, 'J', null, null, null, 'not-present', null,"
@@ -915,10 +915,10 @@ test_inserting_nodes(apr_pool_t *pool)
             pool));
 
   /* Create a new not-present symlink node. */
-  SVN_ERR(svn_wc__db_base_add_absent_node(
+  SVN_ERR(svn_wc__db_base_add_not_present_node(
             db, svn_dirent_join(local_abspath, "Q", pool),
             "Q", ROOT_ONE, UUID_ONE, 3,
-            svn_wc__db_kind_symlink, svn_wc__db_status_not_present,
+            svn_wc__db_kind_symlink,
             NULL, NULL,
             pool));
 

Modified: subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/entries-compat.c
URL: http://svn.apache.org/viewvc/subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/entries-compat.c?rev=999427&r1=999426&r2=999427&view=diff
==============================================================================
--- subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/entries-compat.c (original)
+++ subversion/branches/atomic-revprop/subversion/tests/libsvn_wc/entries-compat.c Tue Sep 21 14:14:12 2010
@@ -75,7 +75,7 @@
 #define MD5_1 "2d18c5e57e84c5b8a5e9a6e13fa394dc"
 #define MD5_2 "5d41402abc4b2a76b9719d911017c592"
 
-#define I_TC_DATA "((conflict F file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) (conflict G file update edited deleted (version 23 " ROOT_ONE " 1 2 branch1/ft/F none) (version 23 " ROOT_ONE " 1 3 branch1/ft/F file)) )"
+#define I_TC_DATA "((conflict F file update edited deleted (version 22 " ROOT_ONE " 1 2 branch1/ft/F none) (version 22 " ROOT_ONE " 1 3 branch1/ft/F file)) (conflict G file update edited deleted (version 22 " ROOT_ONE " 1 2 branch1/ft/F none) (version 22 " ROOT_ONE " 1 3 branch1/ft/F file)) )"
 
 static const char * const TESTING_DATA = (
    /* Load our test data.
@@ -382,11 +382,99 @@ static const char * const TESTING_DATA =
    " "
 #endif
 #ifdef SVN_WC__NODES
+   /* Load data into NODES table;
+      ### op_depths have not been calculated by me yet;
+      the value 1 is just 'good enough' to make the nodes WORKING nodes. */
+  "insert into nodes values ("
+  "  1, 'I', 1, '', 2, 'some/dir', 2, 'normal', 'immediates',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J', 1, '', null, null, null, 'normal', 'immediates',"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-a', 1, 'J', null, null, null, 'normal', null,"
+  "  0, null, 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-b', 1, 'J', 2, 'some/dir', 2, 'normal', 'infinity',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-b/J-b-a', 1, 'J/J-b', 2, 'another/dir', 2, 'normal', 'infinity',"
+  "  0, null, 'dir', 2, " TIME_2s ", '" AUTHOR_2 "', null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-b/J-b-b', 1, 'J/J-b', null, null, null, 'normal', null,"
+  "  0, null, 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-c', 1, 'J', null, null, null, 'not-present', null,"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-c/J-c-a', 1, 'J/J-c', null, null, null, 'not-present', null,"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-d', 1, 'J', 2, 'moved/file', 2, 'normal', null,"
+  "  1, null, 'file', 2, " TIME_2s ", '" AUTHOR_2 "', '$md5 $ " MD5_1 " ',"
+  " '()', 10, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-e', 1, 'J', null, null, null, 'not-present', null,"
+  "  0, 'other/place', 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-e/J-e-a', 1, 'J/J-e', null, null, null, 'not-present', null,"
+  "  0, null, 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-e/J-e-b', 1, 'J/J-e', null, null, null, 'not-present',"
+  "  null, 0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-e/J-e-b/Jeba', 1, 'J/J-e/J-e-b', null, null, null, 'base-deleted',"
+  "  null, 0, null, 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-f', 1, 'J', null, null, null, 'normal', 'immediates',"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'J/J-f/J-f-a', 1, 'J/J-f', null, null, null, 'base-deleted',"
+  "  'immediates', 0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'K', 1, '', null, null, null, 'base-deleted', null,"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'K/K-a', 1, 'K', null, null, null, 'base-deleted', null,"
+  "  0, null, 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'K/K-b', 1, 'K', null, null, null, 'base-deleted', null,"
+  "  0, 'moved/away', 'file', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'L', 1, '', null, null, null, 'normal', 'immediates',"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'L/L-a', 1, 'L', null, null, null, 'not-present', 'immediates',"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
+  "insert into nodes values ("
+  "  1, 'L/L-a/L-a-a', 1, 'L', null, null, null, 'not-present', 'immediates',"
+  "  0, null, 'dir', null, null, null, null, '()',"
+  "  null, null, null, null, null);"
 #endif
    "insert into actual_node values ("
    "  1, 'I', '', null, null, null, null, null, 'changelist', null, "
    "'" I_TC_DATA "', null, null, null, null);"
    "  "
+#ifndef SVN_WC__NODES_ONLY
    "insert into base_node values ("
    "  1, 'M', null, null, '', 'normal', 'dir', "
    "  1, null, null, "
@@ -397,6 +485,17 @@ static const char * const TESTING_DATA =
    "  null, null, "
    "  null, null, null, null, null, "
    "  null, null, null, 0, null, null, '()', 0); "
+#endif
+#ifdef SVN_WC__NODES
+   "insert into nodes values ("
+   "  1, 'M', 0, '', null, null, 1, 'normal', null,"
+   "  null, null, 'dir', 1, " TIME_1s ", '" AUTHOR_1 "', null,"
+   "  '()', null, null, null, null, null);"
+   "insert into nodes values ("
+   "  1, 'M/M-a', 0, 'M', null, null, 1, 'not-present', null,"
+   "  null, null, 'file', 1, null, null,  null,"
+   "  '()', null, null, null, null, null);"
+#endif
    );
 
 
@@ -410,11 +509,19 @@ static const char * const M_TESTING_DATA
    "insert into repository values (2, '" ROOT_TWO "', '" UUID_TWO "'); "
    "insert into wcroot values (1, null); "
 
+#ifndef SVN_WC__NODES_ONLY
    "insert into base_node values ("
    "  1, '', 1, 'M', null, 'normal', 'dir', "
    "  1, null, null, "
    "  1, " TIME_1s ", '" AUTHOR_1 "', 'infinity', null, null, '()', null, 0, "
    "  null); "
+#endif
+#ifdef SVN_WC__NODES
+   "insert into nodes values ("
+   "  1, '', 0, null, 1, 'M', 1, 'normal', 'infinity',"
+   "  null, null, 'dir', 1, " TIME_1s ", '" AUTHOR_1 "', null,"
+   "  '()', null, null, null, null, null);"
+#endif
    );
 
 WC_QUERIES_SQL_DECLARE_STATEMENTS(statements);