You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2010/09/17 18:00:12 UTC

svn commit: r998183 - in /subversion/trunk/subversion: libsvn_client/ tests/cmdline/ tests/cmdline/svntest/

Author: cmpilato
Date: Fri Sep 17 16:00:11 2010
New Revision: 998183

URL: http://svn.apache.org/viewvc?rev=998183&view=rev
Log:
First step in purging the copyfrom-args-over-update client-side code:
Stop asking the server to send that stuff.  ("Stop it!")  This also
includes the removal of tests which appear to be written specifically
to test this now-removed functionality.

(This task is tracked in issue #3711.)

* subversion/libsvn_client/client.h
  (svn_client__update_internal): Lose 'send_copyfrom_args' parameter.

* subversion/libsvn_client/update.c
  (update_internal): Lose 'send_copyfrom_args' parameter.  Always pass
    FALSE for that parameter to svn_ra_do_update2().
  (svn_client__update_internal): Lose 'send_copyfrom_args' parameter.
    Update call to update_internal().
  (svn_client_update3): Update call to svn_client__update_internal().

* subversion/libsvn_client/checkout.c
  (initialize_area, svn_client__checkout_internal): Update call to
    svn_client__update_internal().

* subversion/libsvn_client/externals.c
  (switch_dir_external): Update call to svn_client__update_internal().

* subversion/tests/cmdline/svntest/main.py
  (server_sends_copyfrom_on_update): Delete as unused.

* subversion/tests/cmdline/update_tests.py
  (): Don't import server_sends_copyfrom_on_update.
  (update_handles_copyfrom, copyfrom_degrades_gracefully,
   update_handles_copyfrom_with_txdeltas, add_moved_file_has_props, 
   update_moves_and_modifies_an_edited_file, add_moved_file_has_props2):
    Remove as irrelevant (now that updates don't do copyfrom stuff).
  (test_lists): Lose references to deleted tests.

* subversion/tests/cmdline/copy_tests.py
  (): Don't import server_sends_copyfrom_on_update.
  (locate_wrong_origin, replaced_local_source_for_incoming_copy): 
  (test_lists): Lose references to deleted tests.

* subversion/tests/cmdline/resolved_tests.py
  (): Don't import server_sends_copyfrom_on_update.

Modified:
    subversion/trunk/subversion/libsvn_client/checkout.c
    subversion/trunk/subversion/libsvn_client/client.h
    subversion/trunk/subversion/libsvn_client/externals.c
    subversion/trunk/subversion/libsvn_client/update.c
    subversion/trunk/subversion/tests/cmdline/copy_tests.py
    subversion/trunk/subversion/tests/cmdline/resolved_tests.py
    subversion/trunk/subversion/tests/cmdline/svntest/main.py
    subversion/trunk/subversion/tests/cmdline/update_tests.py

Modified: subversion/trunk/subversion/libsvn_client/checkout.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/checkout.c?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/checkout.c (original)
+++ subversion/trunk/subversion/libsvn_client/checkout.c Fri Sep 17 16:00:11 2010
@@ -71,10 +71,11 @@ initialize_area(svn_revnum_t *result_rev
                              repos_root, uuid, revnum, depth, pool));
   /* Have update fix the incompleteness. */
   return svn_error_return(svn_client__update_internal(result_rev, local_abspath,
-                                    revision, depth, TRUE, ignore_externals,
-                                    allow_unver_obstructions,
-                                    use_sleep, FALSE, innercheckout,
-                                    ctx, pool));
+                                                      revision, depth, TRUE,
+                                                      ignore_externals,
+                                                      allow_unver_obstructions,
+                                                      use_sleep, innercheckout,
+                                                      ctx, pool));
 }
 
 
@@ -219,7 +220,7 @@ svn_client__checkout_internal(svn_revnum
                                                 revision, depth, TRUE,
                                                 ignore_externals,
                                                 allow_unver_obstructions,
-                                                use_sleep, FALSE, innercheckout,
+                                                use_sleep, innercheckout,
                                                 ctx, pool);
             }
           else

Modified: subversion/trunk/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/client.h (original)
+++ subversion/trunk/subversion/libsvn_client/client.h Fri Sep 17 16:00:11 2010
@@ -490,12 +490,6 @@ svn_client__make_local_parents(const cha
    that obstruct items added from the repos are tolerated; if FALSE,
    these obstructions cause the update to fail.
 
-   If SEND_COPYFROM_ARGS is true, then request that the server not
-   send file contents when adding files that have been created by
-   explicit copying; instead, just send copyfrom-args to add_file(),
-   and possibly follow up with an apply_textdelta() against the copied
-   file.
-
    If INNERUPDATE is true, no anchor check is performed on the update target.
 */
 svn_error_t *
@@ -507,7 +501,6 @@ svn_client__update_internal(svn_revnum_t
                             svn_boolean_t ignore_externals,
                             svn_boolean_t allow_unver_obstructions,
                             svn_boolean_t *timestamp_sleep,
-                            svn_boolean_t send_copyfrom_args,
                             svn_boolean_t innerupdate,
                             svn_client_ctx_t *ctx,
                             apr_pool_t *pool);

Modified: subversion/trunk/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/externals.c (original)
+++ subversion/trunk/subversion/libsvn_client/externals.c Fri Sep 17 16:00:11 2010
@@ -205,7 +205,7 @@ switch_dir_external(const char *path,
                                                   revision, svn_depth_unknown,
                                                   FALSE, FALSE, FALSE,
                                                   timestamp_sleep, TRUE,
-                                                  TRUE, ctx, subpool));
+                                                  ctx, subpool));
               svn_pool_destroy(subpool);
               return SVN_NO_ERROR;
             }

Modified: subversion/trunk/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/update.c (original)
+++ subversion/trunk/subversion/libsvn_client/update.c Fri Sep 17 16:00:11 2010
@@ -98,7 +98,6 @@ update_internal(svn_revnum_t *result_rev
                 svn_boolean_t ignore_externals,
                 svn_boolean_t allow_unver_obstructions,
                 svn_boolean_t *timestamp_sleep,
-                svn_boolean_t send_copyfrom_args,
                 svn_boolean_t innerupdate,
                 svn_client_ctx_t *ctx,
                 apr_pool_t *pool)
@@ -244,12 +243,8 @@ update_internal(svn_revnum_t *result_rev
 
   /* Tell RA to do an update of URL+TARGET to REVISION; if we pass an
      invalid revnum, that means RA will use the latest revision.  */
-  SVN_ERR(svn_ra_do_update2(ra_session,
-                            &reporter, &report_baton,
-                            revnum,
-                            target,
-                            depth,
-                            send_copyfrom_args,
+  SVN_ERR(svn_ra_do_update2(ra_session, &reporter, &report_baton,
+                            revnum, target, depth, FALSE,
                             update_editor, update_edit_baton, pool));
 
   SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
@@ -321,7 +316,6 @@ svn_client__update_internal(svn_revnum_t
                             svn_boolean_t ignore_externals,
                             svn_boolean_t allow_unver_obstructions,
                             svn_boolean_t *timestamp_sleep,
-                            svn_boolean_t send_copyfrom_args,
                             svn_boolean_t innerupdate,
                             svn_client_ctx_t *ctx,
                             apr_pool_t *pool)
@@ -343,8 +337,7 @@ svn_client__update_internal(svn_revnum_t
   err = update_internal(result_rev, local_abspath, anchor_abspath,
                          revision, depth, depth_is_sticky,
                          ignore_externals, allow_unver_obstructions,
-                         timestamp_sleep, send_copyfrom_args,
-                         innerupdate, ctx, pool);
+                         timestamp_sleep, innerupdate, ctx, pool);
 
   err = svn_error_compose_create(
             err,
@@ -398,7 +391,7 @@ svn_client_update3(apr_array_header_t **
                                             revision, depth, depth_is_sticky,
                                             ignore_externals,
                                             allow_unver_obstructions,
-                                            &sleep, TRUE, FALSE, ctx, subpool);
+                                            &sleep, FALSE, ctx, subpool);
 
           if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
             {

Modified: subversion/trunk/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/copy_tests.py?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/copy_tests.py Fri Sep 17 16:00:11 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/trunk/subversion/tests/cmdline/resolved_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/resolved_tests.py?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/resolved_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/resolved_tests.py Fri Sep 17 16:00:11 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/trunk/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Fri Sep 17 16:00:11 2010
@@ -1060,9 +1060,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/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=998183&r1=998182&r2=998183&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Fri Sep 17 16:00:11 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)
              ]