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__':