Author: cmpilato
Date: Fri Apr 15 16:27:50 2011
New Revision: 1092759
URL: http://svn.apache.org/viewvc?rev=1092759&view=rev
Log:
Fix issue #3857 ("Segmentation Fault in foreign repository merge with
prop conflict (propmod atop missing prop)").
* subversion/libsvn_wc/util.c
(svn_wc__cd2_to_cd): Don't operate on NULL paths.
* subversion/tests/cmdline/merge_tests.py
(foreign_repos_prop_conflict): New regression test.
(test_list): Add reference to new test.
Modified:
subversion/trunk/subversion/libsvn_wc/util.c
subversion/trunk/subversion/tests/cmdline/merge_tests.py
Modified: subversion/trunk/subversion/libsvn_wc/util.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/util.c?rev=1092759&r1=1092758&r2=1092759&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/util.c (original)
+++ subversion/trunk/subversion/libsvn_wc/util.c Fri Apr 15 16:27:50 2011
@@ -426,19 +426,21 @@ svn_wc__cd2_to_cd(const svn_wc_conflict_
case svn_wc_conflict_kind_text:
new_conflict->is_binary = conflict->is_binary;
- new_conflict->mime_type = conflict->mime_type
- ? apr_pstrdup(result_pool, conflict->mime_type)
- : NULL;
- new_conflict->base_file = svn_dirent_basename(conflict->base_abspath,
+ if (conflict->mime_type)
+ new_conflict->mime_type = apr_pstrdup(result_pool,
+ conflict->mime_type);
+ if (conflict->base_abspath)
+ new_conflict->base_file = svn_dirent_basename(conflict->base_abspath,
+ result_pool);
+ if (conflict->their_abspath)
+ new_conflict->their_file =
svn_dirent_basename(conflict->their_abspath,
+ result_pool);
+ if (conflict->my_abspath)
+ new_conflict->my_file = svn_dirent_basename(conflict->my_abspath,
result_pool);
- new_conflict->their_file = svn_dirent_basename(conflict->their_abspath,
- result_pool);
- new_conflict->my_file = svn_dirent_basename(conflict->my_abspath,
- result_pool);
- new_conflict->merged_file = conflict->merged_file
- ? apr_pstrdup(result_pool,
- conflict->merged_file)
- : NULL;
+ if (conflict->merged_file)
+ new_conflict->merged_file = apr_pstrdup(result_pool,
+ conflict->merged_file);
break;
case svn_wc_conflict_kind_tree:
Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1092759&r1=1092758&r2=1092759&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Fri Apr 15
16:27:50 2011
@@ -16677,6 +16677,49 @@ def dry_run_merge_conflicting_binary(sbo
None, None, None, None, None,
True, True, '--allow-mixed-revisions',
other_wc)
+
+#----------------------------------------------------------------------
+@Issue(3857)
+def foreign_repos_prop_conflict(sbox):
+ "prop conflict from foreign repos merge"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Create a second repository and working copy with the original
+ # greek tree.
+ repo_dir = sbox.repo_dir
+ other_repo_dir, other_repo_url = sbox.add_repo_path("other")
+ other_wc_dir = sbox.add_wc_path("other")
+ svntest.main.copy_repos(repo_dir, other_repo_dir, 1, 1)
+ svntest.actions.run_and_verify_svn(None, None, [], 'co', other_repo_url,
+ other_wc_dir)
+
+ # Add properties in the first repos and commit.
+ sbox.simple_propset('red', 'rojo', 'A/D/G')
+ sbox.simple_propset('yellow', 'amarillo', 'A/D/G')
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ci', '-m', 'spenglish', wc_dir)
+
+ # Tweak properties in the first repos and commit.
+ sbox.simple_propset('red', 'rosso', 'A/D/G')
+ sbox.simple_propset('yellow', 'giallo', 'A/D/G')
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ci', '-m', 'engtalian', wc_dir)
+
+ # Now, merge the propchange to the *second* working copy.
+ expected_output = [' C %s\n' % (os.path.join(other_wc_dir,
+ "A", "D", "G")),
+ 'Summary of conflicts:\n',
+ ' Property conflicts: 1\n',
+ ]
+ expected_output = expected_merge_output([[3]], expected_output, True)
+ svntest.actions.run_and_verify_svn(None,
+ expected_output,
+ [], 'merge', '-c3',
+ sbox.repo_url,
+ other_wc_dir)
+
########################################################################
# Run the tests
@@ -16800,6 +16843,7 @@ test_list = [ None,
subtree_merges_inherit_invalid_working_mergeinfo,
merge_change_to_file_with_executable,
dry_run_merge_conflicting_binary,
+ foreign_repos_prop_conflict,
]
if __name__ == '__main__':