You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2010/05/19 20:05:01 UTC

svn commit: r946317 - in /subversion/trunk/subversion: libsvn_client/merge.c tests/cmdline/merge_tests.py

Author: pburba
Date: Wed May 19 18:05:01 2010
New Revision: 946317

URL: http://svn.apache.org/viewvc?rev=946317&view=rev
Log:
Fix issue #3640 'moved target breaks reintegrate merge'.

* subversion/libsvn_client/merge.c

  (calculate_left_hand_side): Don't assume the reintegrate target hasn't
   been moved since the reintegrate source was branched from it.

* subversion/tests/cmdline/merge_tests.py

  (basic_reintegrate): Remove XFail comment.

  (test_list): Remove XFail from basic_reintegrate.

Modified:
    subversion/trunk/subversion/libsvn_client/merge.c
    subversion/trunk/subversion/tests/cmdline/merge_tests.py

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=946317&r1=946316&r2=946317&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed May 19 18:05:01 2010
@@ -9525,20 +9525,32 @@ calculate_left_hand_side(const char **ur
       /* We've previously merged some or all of the target, up to
          youngest_merged_rev, from the target to the source.  Set *URL_LEFT
          and *REV_LEFT to cover the youngest part of this range. */
-      svn_opt_revision_t peg_revision;
+      svn_opt_revision_t peg_revision, youngest_rev, unspecified_rev;
+      svn_opt_revision_t *start_revision;
       const char *youngest_url;
+      const char *old_url;
 
       peg_revision.kind = svn_opt_revision_number;
-      peg_revision.value.number = youngest_merged_rev;
+      peg_revision.value.number = target_rev;
+
+      youngest_rev.kind = svn_opt_revision_number;
+      youngest_rev.value.number = youngest_merged_rev;
+      
+      unspecified_rev.kind = svn_opt_revision_unspecified;
+
+      *rev_left = youngest_rev.value.number;
+
+      /* Get the URL of the target_url@youngest_merged_rev. */
+      SVN_ERR(svn_ra_get_session_url(ra_session, &old_url, subpool));
+      SVN_ERR(svn_ra_reparent(ra_session, target_url, subpool));
+      SVN_ERR(svn_client__repos_locations(&youngest_url, &start_revision,
+                                          NULL, NULL, ra_session,
+                                          target_url, &peg_revision,
+                                          &youngest_rev, &unspecified_rev,
+                                          ctx, subpool));
 
-      *rev_left = youngest_merged_rev;
-      SVN_ERR(svn_client__derive_location(
-        &youngest_url, NULL,
-        svn_path_url_add_component2(source_repos_root,
-                                    target_repos_rel_path,
-                                    subpool),
-        &peg_revision, ra_session, ctx, subpool, subpool));
       *url_left = apr_pstrdup(pool, youngest_url);
+      SVN_ERR(svn_ra_reparent(ra_session, old_url, subpool));
     }
 
   svn_pool_destroy(subpool);

Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=946317&r1=946316&r2=946317&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Wed May 19 18:05:01 2010
@@ -10603,22 +10603,6 @@ def basic_reintegrate(sbox):
   expected_status.tweak(wc_rev=9)
   k_expected_disk.tweak('', props={SVN_PROP_MERGEINFO : '/A_COPY:2-9'})
   expected_skip = wc.State(A_MOVED_path, {})
-  # This test is currently marked as XFail as the reintegrate fails:
-  #
-  #   >svn merge ^^/A_COPY A_MOVED --reintegrate
-  #   ..\..\..\subversion\svn\merge-cmd.c:358: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\merge.c:9777: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\merge.c:9747: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\merge.c:9654: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\ra.c:753: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\mergeinfo.c:740: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_client\ra.c:548: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_repos\rev_hunt.c:908: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_repos\rev_hunt.c:607: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_fs_fs\tree.c:2883: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_fs_fs\tree.c:2883: (apr_err=160013)
-  #   ..\..\..\subversion\libsvn_fs_fs\tree.c:667: (apr_err=160013)
-  #   svn: File not found: revision 7, path '/A_MOVED'
   svntest.actions.run_and_verify_merge(A_MOVED_path, None, None,
                                        sbox.repo_url + '/A_COPY', None,
                                        expected_output,
@@ -19208,8 +19192,8 @@ test_list = [ None,
                          server_has_mergeinfo),
               SkipUnless(new_subtrees_should_not_break_merge,
                          server_has_mergeinfo),
-              XFail(SkipUnless(basic_reintegrate,
-                               server_has_mergeinfo)),
+              SkipUnless(basic_reintegrate,
+                         server_has_mergeinfo),
               reintegrate_with_rename,
               reintegrate_branch_never_merged_to,
               reintegrate_fail_on_modified_wc,