diff options
Diffstat (limited to 'subversion/tests/cmdline/mergeinfo_tests.py')
-rwxr-xr-x | subversion/tests/cmdline/mergeinfo_tests.py | 126 |
1 files changed, 89 insertions, 37 deletions
diff --git a/subversion/tests/cmdline/mergeinfo_tests.py b/subversion/tests/cmdline/mergeinfo_tests.py index 2766d67..adb7925 100755 --- a/subversion/tests/cmdline/mergeinfo_tests.py +++ b/subversion/tests/cmdline/mergeinfo_tests.py @@ -68,8 +68,12 @@ def no_mergeinfo(sbox): "'mergeinfo' on a URL that lacks mergeinfo" sbox.build(create_wc=False) + sbox.simple_repo_copy('A', 'A2') svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - [], sbox.repo_url, sbox.repo_url) + [], + sbox.repo_url + '/A', + sbox.repo_url + '/A2', + "--show-revs=merged") def mergeinfo(sbox): "'mergeinfo' on a path with mergeinfo" @@ -77,41 +81,70 @@ def mergeinfo(sbox): sbox.build() wc_dir = sbox.wc_dir + # make a branch 'A2' + sbox.simple_repo_copy('A', 'A2') # r2 + # make a change in branch 'A' + sbox.simple_mkdir('A/newdir') + sbox.simple_commit() # r3 + sbox.simple_update() + # Dummy up some mergeinfo. - svntest.actions.run_and_verify_svn(None, None, [], 'ps', SVN_PROP_MERGEINFO, - '/:1', wc_dir) + svntest.actions.run_and_verify_svn(None, None, [], + 'ps', SVN_PROP_MERGEINFO, '/A:3', + sbox.ospath('A2')) svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - ['1'], sbox.repo_url, wc_dir) + ['3'], + sbox.repo_url + '/A', + sbox.ospath('A2'), + "--show-revs=merged") @SkipUnless(server_has_mergeinfo) def explicit_mergeinfo_source(sbox): "'mergeinfo' with source selection" + # The idea is the target has mergeinfo pertaining to two or more different + # source branches and we're asking about just one of them. + sbox.build() - wc_dir = sbox.wc_dir - H_path = os.path.join(wc_dir, 'A', 'D', 'H') - H2_path = os.path.join(wc_dir, 'A', 'D', 'H2') - B_url = sbox.repo_url + '/A/B' - B_path = os.path.join(wc_dir, 'A', 'B') - G_url = sbox.repo_url + '/A/D/G' - G_path = os.path.join(wc_dir, 'A', 'D', 'G') - H2_url = sbox.repo_url + '/A/D/H2' - # Make a copy, and dummy up some mergeinfo. - mergeinfo = '/A/B:1\n/A/D/G:1\n' - svntest.actions.set_prop(SVN_PROP_MERGEINFO, mergeinfo, H_path) - svntest.main.run_svn(None, "cp", H_path, H2_path) - svntest.main.run_svn(None, "ci", "-m", "r2", wc_dir) + def url(relpath): + return sbox.repo_url + '/' + relpath + def path(relpath): + return sbox.ospath(relpath) + + B = 'A/B' + + # make some branches + B2 = 'A/B2' + B3 = 'A/B3' + sbox.simple_repo_copy(B, B2) # r2 + sbox.simple_repo_copy(B, B3) # r3 + sbox.simple_update() + + # make changes in the branches + sbox.simple_mkdir('A/B2/newdir') + sbox.simple_commit() # r4 + sbox.simple_mkdir('A/B3/newdir') + sbox.simple_commit() # r5 + + # Put dummy mergeinfo on branch root + mergeinfo = '/A/B2:2-5\n/A/B3:2-5\n' + sbox.simple_propset(SVN_PROP_MERGEINFO, mergeinfo, B) + sbox.simple_commit() # Check using each of our recorded merge sources (as paths and URLs). svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - ['1'], B_url, H_path) + ['2', '4'], url(B2), path(B), + "--show-revs=merged") svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - ['1'], B_path, H_path) + ['2', '4'], path(B2), path(B), + "--show-revs=merged") svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - ['1'], G_url, H_path) + ['3', '5'], url(B3), path(B), + "--show-revs=merged") svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - ['1'], G_path, H_path) + ['3', '5'], path(B3), path(B), + "--show-revs=merged") @SkipUnless(server_has_mergeinfo) def mergeinfo_non_source(sbox): @@ -135,7 +168,8 @@ def mergeinfo_non_source(sbox): # Check on a source we haven't "merged" from. svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), - [], H2_url, H_path) + [], H2_url, H_path, + "--show-revs=merged") #---------------------------------------------------------------------- # Issue #3138 @@ -211,7 +245,8 @@ def non_inheritable_mergeinfo(sbox): svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), ['4','6*'], sbox.repo_url + '/A', - A_COPY_path) + A_COPY_path, + '--show-revs', 'merged') svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), ['3','5','6*'], sbox.repo_url + '/A', @@ -222,7 +257,8 @@ def non_inheritable_mergeinfo(sbox): svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), ['4'], sbox.repo_url + '/A/D', - D_COPY_path) + D_COPY_path, + '--show-revs', 'merged') svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), ['3','6'], sbox.repo_url + '/A/D', @@ -348,6 +384,14 @@ def recursive_mergeinfo(sbox): sbox.repo_url + '/A2', sbox.repo_url + '/A_COPY', '--show-revs', 'eligible', '-R') + # Do the same as above, but test that we can request the revisions + # in reverse order. + svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), + ['8*', '4*', '3'], + sbox.repo_url + '/A2', + sbox.repo_url + '/A_COPY', + '--show-revs', 'eligible', '-R', + '-r', '9:0') # Asking for merged revisions from A2 to A_COPY should show: # @@ -370,6 +414,15 @@ def recursive_mergeinfo(sbox): A_COPY_path, '--show-revs', 'merged', '--depth', 'infinity') + # Do the same as above, but test that we can request the revisions + # in reverse order. + svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""), + ['8*', '6', '5', '4*'], + A2_path, + A_COPY_path, + '--show-revs', 'merged', + '--depth', 'infinity', + '-r', '9:0') # A couple tests of problems found with initial issue #3242 fixes. # We should be able to check for the merged revs from a URL to a URL @@ -505,7 +558,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox): gamma_2_path = os.path.join(wc_dir, 'A_COPY_2', 'D', 'gamma') tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau') D_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D') - + # Merge -c5 ^/A/D/G/rho A_COPY\D\G\rho # Merge -c7 ^/A A_COPY # Commit as r8 @@ -538,7 +591,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox): # Check the merged and eligible revisions both recursively and # non-recursively. - # Eligible : Non-recursive + # Eligible : Non-recursive svntest.actions.run_and_verify_mergeinfo( adjust_error_for_server_version(''), ['4','5'], sbox.repo_url + '/A/D', subtree_wc, @@ -591,7 +644,7 @@ def wc_target_inherits_mergeinfo_from_repos(sbox): svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', 'Merge r8 from A_COPY_2 to A_COPY', wc_dir) - + def test_svn_mergeinfo_4_way(wc_target): # Eligible : Non-recursive svntest.actions.run_and_verify_mergeinfo( @@ -684,8 +737,8 @@ def natural_history_is_not_eligible_nor_merged(sbox): # ranges as partially merged". @Issue(4050) @SkipUnless(server_has_mergeinfo) -def noninheritabled_mergeinfo_not_always_eligible(sbox): - "noninheritabled mergeinfo not always eligible" +def noninheritable_mergeinfo_not_always_eligible(sbox): + "noninheritable mergeinfo not always eligible" sbox.build() wc_dir = sbox.wc_dir @@ -706,15 +759,14 @@ def noninheritabled_mergeinfo_not_always_eligible(sbox): svntest.actions.run_and_verify_svn(None, None, [], 'merge', sbox.repo_url + '/A', branch_path, '-c3', '--depth=empty') + # Forcibly set non-inheritable mergeinfo to replicate the pre-1.8 behavior, + # where prior to the fix for issue #4057, non-inheritable mergeinfo was + # unconditionally set for merges with shallow operational depths. + svntest.actions.run_and_verify_svn(None, None, [], + 'propset', SVN_PROP_MERGEINFO, + '/A:3*\n', branch_path) svntest.main.run_svn(None, 'commit', '-m', 'shallow merge', wc_dir) - # A sanity check that we really have non-inheritable mergeinfo. - # If issue #4057 is ever fixed then the above merge will record - # inheritable mergeinfo and this test will spuriously pass. - svntest.actions.run_and_verify_svn(None, ["/A:3*\n"], [], - 'propget', SVN_PROP_MERGEINFO, - branch_path) - # Now check that r3 is reported as fully merged from ^/A to ^/branch # and does not show up all when asking for eligible revs. svntest.actions.run_and_verify_mergeinfo( @@ -744,7 +796,7 @@ test_list = [ None, mergeinfo_on_pegged_wc_path, wc_target_inherits_mergeinfo_from_repos, natural_history_is_not_eligible_nor_merged, - noninheritabled_mergeinfo_not_always_eligible, + noninheritable_mergeinfo_not_always_eligible, ] if __name__ == '__main__': |