Author: stsp
Date: Wed Nov 27 10:55:08 2013
New Revision: 1545986

URL: http://svn.apache.org/r1545986
Log:
Fix issue #4301, 'svn mergeinfo' won't work on moved target.

* subversion/libsvn_client/merge.c
   (svn_client_get_merging_summary): Treat svn_opt_revision_base as a local
    target revision, rather than as a repository target revision. The target
    path might only exist in the working copy, e.g. in case it was locally
    copied or moved. When this happened 'svn mergeinfo' ran into a dubious
    error because it tried to query history of a non-existent repository path.
    So for the purposes of this function, deriving the in-repos location for
    svn_opt_revision_base from the working copy path is a better idea.

* subversion/svn/mergeinfo-cmd.c
  (mergeinfo_summary): Same change as for svn_client_get_merging_summary()
   since the same logic is duplicated here.

* subversion/tests/cmdline/mergeinfo_tests.py
  (mergeinfo_local_move, test_list): New regression test.

Modified:
    subversion/trunk/subversion/libsvn_client/merge.c
    subversion/trunk/subversion/svn/mergeinfo-cmd.c
    subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1545986&r1=1545985&r2=1545986&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Nov 27 10:55:08 2013
@@ -12681,7 +12681,8 @@ svn_client_get_merging_summary(svn_boole
 
   target_is_wc = (! svn_path_is_url(target_path_or_url))
                  && (target_revision->kind == svn_opt_revision_unspecified
-                     || target_revision->kind == svn_opt_revision_working);
+                     || target_revision->kind == svn_opt_revision_working
+                     || target_revision->kind == svn_opt_revision_base);
   if (target_is_wc)
     {
       const char *target_abspath;

Modified: subversion/trunk/subversion/svn/mergeinfo-cmd.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/mergeinfo-cmd.c?rev=1545986&r1=1545985&r2=1545986&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/trunk/subversion/svn/mergeinfo-cmd.c Wed Nov 27 10:55:08 2013
@@ -275,7 +275,8 @@ mergeinfo_summary(
 
   target_is_wc = (! svn_path_is_url(target_path_or_url))
                  && (target_revision->kind == svn_opt_revision_unspecified
-                     || target_revision->kind == svn_opt_revision_working);
+                     || target_revision->kind == svn_opt_revision_working 
+                     || target_revision->kind == svn_opt_revision_base);
   SVN_ERR(svn_client_get_merging_summary(
             &is_reintegration,
             &yca_url, &yca_rev,

Modified: subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py?rev=1545986&r1=1545985&r2=1545986&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/mergeinfo_tests.py Wed Nov 27 
10:55:08 2013
@@ -803,6 +803,20 @@ def mergeinfo_log(sbox):
                                      '--log', sbox.repo_url + '/A',
                                      sbox.ospath('A2'))
 
+@SkipUnless(server_has_mergeinfo)
+@Issue(4301)
+def mergeinfo_local_move(sbox):
+  "'mergeinfo' on a locally moved path"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_move('A', 'A2')
+  svntest.actions.run_and_verify_svn(None,
+                                     None, [],
+                                     'mergeinfo', sbox.repo_url + '/A',
+                                     sbox.ospath('A2'))
+
 
 ########################################################################
 # Run the tests
@@ -822,6 +836,7 @@ test_list = [ None,
               natural_history_is_not_eligible_nor_merged,
               noninheritable_mergeinfo_not_always_eligible,
               mergeinfo_log,
+              mergeinfo_local_move,
              ]
 
 if __name__ == '__main__':


Reply via email to