Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/lock_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/lock_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/lock_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/lock_tests.py Sun Jun 14 20:58:10 2015 @@ -176,9 +176,7 @@ def commit_file_unlock(sbox): # Make sure both iota an mu are unlocked, but only mu is bumped svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) #---------------------------------------------------------------------- def commit_propchange(sbox): @@ -896,7 +894,7 @@ def lock_uri_encoded(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, - None, + [], file_path) svntest.actions.run_and_verify_svn(".*locked by user", [], 'lock', @@ -1215,9 +1213,7 @@ def info_moved_path(sbox): expected_status.remove("iota") svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # Create a new, unrelated iota, creating r3. svntest.main.file_append(fname, "Another iota") @@ -1231,9 +1227,7 @@ def info_moved_path(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # Lock the new iota. svntest.actions.run_and_verify_svn(".*locked by user", [], @@ -1274,9 +1268,7 @@ def ls_url_encoded(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # Lock the file. svntest.actions.run_and_verify_svn(".*locked by user", @@ -1343,7 +1335,7 @@ def examine_lock_encoded_recurse(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, - None, + [], file_path) # lock the file and validate the contents @@ -1838,11 +1830,10 @@ def commit_stolen_lock(sbox): svntest.actions.run_and_verify_commit(wc_dir, [], expected_status, - err_re, - wc_dir) + err_re) -# When removing directories, the locks of contained files were not -# correctly removed from the working copy database, thus they later +# When removing directories, the locks of contained files were not +# correctly removed from the working copy database, thus they later # magically reappeared when new files or directories with the same # pathes were added. @Issue(4364) @@ -1857,15 +1848,13 @@ def drop_locks_on_parent_deletion(sbox): sbox.simple_lock('A/B/E/alpha') sbox.simple_lock('A/B/E/beta') sbox.simple_rm('A/B') - + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.remove_subtree('A/B') - + svntest.actions.run_and_verify_commit(wc_dir, [], - expected_status, - None, - wc_dir) + expected_status) # now re-add entities to the deleted pathes. sbox.simple_mkdir('A/B') @@ -1874,7 +1863,7 @@ def drop_locks_on_parent_deletion(sbox): # The bug also resurrected locks on directories when their path # matched a former file. sbox.simple_mkdir('A/B/E', 'A/B/E/alpha') - + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('A/B', 'A/B/E', @@ -1883,12 +1872,10 @@ def drop_locks_on_parent_deletion(sbox): 'A/B/lambda', wc_rev='3') expected_status.remove('A/B/E/beta') - + svntest.actions.run_and_verify_commit(wc_dir, [], - expected_status, - None, - wc_dir) + expected_status) def copy_with_lock(sbox): @@ -1917,9 +1904,7 @@ def copy_with_lock(sbox): # copy source and so the commit fails. svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) def lock_hook_messages(sbox): "verify (un)lock message is transferred correctly" @@ -1997,7 +1982,6 @@ def failing_post_hooks(sbox): 'unlock', pi_path) svntest.actions.run_and_verify_status(wc_dir, expected_status) -@XFail() def break_delete_add(sbox): "break a lock, delete and add the file" @@ -2092,22 +2076,36 @@ def dav_lock_timeout(sbox): expected_status.tweak('iota', writelocked='K') svntest.actions.run_and_verify_status(wc_dir, expected_status) +def http_connection(repo_url): + + import httplib + from urlparse import urlparse + + loc = urlparse(repo_url) + if loc.scheme == 'http': + h = httplib.HTTPConnection(loc.hostname, loc.port) + else: + try: + import ssl # new in python 2.6 + c = ssl.create_default_context() + c.check_hostname = False + c.verify_mode = ssl.CERT_NONE + h = httplib.HTTPSConnection(loc.hostname, loc.port, context=c) + except: + h = httplib.HTTPSConnection(loc.hostname, loc.port) + return h + @SkipUnless(svntest.main.is_ra_type_dav) def create_dav_lock_timeout(sbox): "create generic DAV lock with timeout" import httplib - from urlparse import urlparse import base64 sbox.build() wc_dir = sbox.wc_dir - loc = urlparse(sbox.repo_url) - if loc.scheme == 'http': - h = httplib.HTTPConnection(loc.hostname, loc.port) - else: - h = httplib.HTTPSConnection(loc.hostname, loc.port) + h = http_connection(sbox.repo_url) lock_body = '<?xml version="1.0" encoding="utf-8" ?>' \ '<D:lockinfo xmlns:D="DAV:">' \ @@ -2147,7 +2145,7 @@ def non_root_locks(sbox): 'cp', sbox.repo_url, sbox.repo_url + '/X', '-m', 'copy greek tree') - sbox.simple_switch(sbox.repo_url + '/X') + sbox.simple_switch(sbox.repo_url + '/X') expected_status = svntest.actions.get_virginal_state(wc_dir, 2) svntest.actions.run_and_verify_status(wc_dir, expected_status) @@ -2243,7 +2241,6 @@ def dav_lock_refresh(sbox): "refresh timeout of DAV lock" import httplib - from urlparse import urlparse import base64 sbox.build(create_wc = False) @@ -2253,12 +2250,7 @@ def dav_lock_refresh(sbox): sbox.repo_url + '/iota') # Try to refresh lock using 'If' header - loc = urlparse(sbox.repo_url) - - if loc.scheme == 'http': - h = httplib.HTTPConnection(loc.hostname, loc.port) - else: - h = httplib.HTTPSConnection(loc.hostname, loc.port) + h = http_connection(sbox.repo_url) lock_token = svntest.actions.run_and_parse_info(sbox.repo_url + '/iota')[0]['Lock Token'] @@ -2336,20 +2328,19 @@ def lock_commit_bump(sbox): }) expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('A/mu', wc_rev=3) - + svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) # We explicitly check both the Revision and Last Changed Revision. - expected_infos = [ { + expected_infos = [ { 'Revision' : '1' , 'Last Changed Rev' : '1' , 'URL' : '.*', 'Lock Token' : None, } ] - svntest.actions.run_and_verify_info(expected_infos, + svntest.actions.run_and_verify_info(expected_infos, sbox.ospath('iota')) def copy_dir_with_locked_file(sbox): @@ -2372,6 +2363,105 @@ def copy_dir_with_locked_file(sbox): 'mv', A_url, AA2_url, '-m', '') +@Issue(4557) +@XFail(svntest.main.is_ra_type_dav) +def delete_dir_with_lots_of_locked_files(sbox): + "delete a directory containing lots of locked files" + + sbox.build() + wc_dir = sbox.wc_dir + + # A lot of paths. + nfiles = 75 # NOTE: test XPASSES with 50 files!!! + locked_paths = [] + for i in range(nfiles): + locked_paths.append(sbox.ospath("A/locked_files/file-%i" % i)) + + # Create files at these paths + os.mkdir(sbox.ospath("A/locked_files")) + for file_path in locked_paths: + svntest.main.file_write(file_path, "This is '%s'.\n" % (file_path,)) + sbox.simple_add("A/locked_files") + sbox.simple_commit() + sbox.simple_update() + + # lock all the files + svntest.actions.run_and_verify_svn(None, [], 'lock', + '-m', 'All locks', + *locked_paths) + # Locally delete A (regression against earlier versions, which + # always used a special non-standard request) + sbox.simple_rm("A") + + # But a further replacement never worked + sbox.simple_mkdir("A") + # And an additional propset didn't work either + # (but doesn't require all lock tokens recursively) + sbox.simple_propset("k", "v", "A") + + # Commit the deletion + # XFAIL: As of 1.8.10, this commit fails with: + # svn: E175002: Unexpected HTTP status 400 'Bad Request' on '<path>' + # and the following error in the httpd error log: + # request failed: error reading the headers + # This problem was introduced on the 1.8.x branch in r1606976. + sbox.simple_commit() + +def delete_locks_on_depth_commit(sbox): + "delete locks on depth-limited commit" + + sbox.build() + wc_dir = sbox.wc_dir + + svntest.actions.run_and_verify_svn(None, [], 'lock', + '-m', 'All files', + *(sbox.ospath(x) + for x in ['iota', 'A/B/E/alpha', + 'A/B/E/beta', 'A/B/lambda', + 'A/D/G/pi', 'A/D/G/rho', + 'A/D/G/tau', 'A/D/H/chi', + 'A/D/H/omega', 'A/D/H/psi', + 'A/D/gamma', 'A/mu'])) + + sbox.simple_rm("A") + + expected_output = svntest.wc.State(wc_dir, { + 'A' : Item(verb='Deleting'), + }) + + expected_status = svntest.wc.State(wc_dir, { + '' : Item(status=' ', wc_rev='1'), + 'iota' : Item(status=' ', wc_rev='1'), + }) + + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status, [], + wc_dir, '--depth', 'immediates') + + sbox.simple_update() # r2 + + svntest.actions.run_and_verify_svn(None, [], 'cp', + sbox.repo_url + '/A@1', sbox.ospath('A')) + + expected_output = [ + 'Adding %s\n' % sbox.ospath('A'), + 'svn: The depth of this commit is \'immediates\', but copies ' \ + 'are always performed recursively in the repository.\n', + 'Committing transaction...\n', + 'Committed revision 3.\n', + ] + + # Verifying the warning line... so can't use verify_commit() + svntest.actions.run_and_verify_svn(expected_output, [], + 'commit', wc_dir, '--depth', 'immediates', + '-mm') + + # Verify that all locks are gone at the server and at the client + expected_status = svntest.actions.get_virginal_state(wc_dir, 3) + expected_status.tweak('', 'iota', wc_rev=2) + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + ######################################################################## # Run the tests @@ -2438,6 +2528,8 @@ test_list = [ None, delete_locked_file_with_percent, lock_commit_bump, copy_dir_with_locked_file, + delete_dir_with_lots_of_locked_files, + delete_locks_on_depth_commit, ] if __name__ == '__main__':
Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/log_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/log_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/log_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/log_tests.py Sun Jun 14 20:58:10 2015 @@ -1474,7 +1474,7 @@ def retrieve_revprops(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, - None, + [], '-m', msg2, omega_path) @@ -1646,8 +1646,7 @@ def merge_sensitive_log_added_mergeinfo_ expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1) + check_props=True) # Commit the merge. expected_output = svntest.wc.State(wc_dir, { @@ -1661,8 +1660,7 @@ def merge_sensitive_log_added_mergeinfo_ 'A_COPY/D/H/omega', 'A_COPY/D/H/psi', wc_rev=7) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status, - None, wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status) wc_disk.tweak("A_COPY/D", props={SVN_PROP_MERGEINFO : '/A/D:2-6'}) wc_disk.tweak("A_COPY/D/G/rho", "A_COPY/D/H/omega", "A_COPY/D/H/psi", @@ -1702,7 +1700,7 @@ def merge_sensitive_log_added_mergeinfo_ expected_elision_output, expected_disk, expected_status, expected_skip, - None, None, None, None, None, 1) + check_props=True) # Commit the merge. expected_output = svntest.wc.State(wc_dir, { @@ -1712,8 +1710,7 @@ def merge_sensitive_log_added_mergeinfo_ wc_status.tweak('A_COPY/D/H', 'A_COPY/D/H/psi', wc_rev=8) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status, - None, wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, wc_status) wc_disk.tweak("A_COPY/D/H", props={SVN_PROP_MERGEINFO : '/A/D:2,4-6'}) wc_disk.tweak("A_COPY/D/G/rho", "A_COPY/D/H/omega", "A_COPY/D/H/psi", @@ -2618,6 +2615,170 @@ def merge_sensitive_log_xml_reverse_merg svntest.actions.run_and_verify_log_xml(expected_log_attrs=log_attrs, args=['-g', '-r8', D_COPY_path]) +def log_revision_move_copy(sbox): + "log revision handling over move/copy" + + sbox.build() + + sbox.simple_move('iota', 'iotb') + sbox.simple_append('iotb', 'new line\n') + + sbox.simple_copy('A/mu', 'mutb') + sbox.simple_append('mutb', 'mutb\n') + + sbox.simple_move('A/B/E', 'E') + sbox.simple_move('E/alpha', 'alpha') + + #r2 + svntest.actions.run_and_verify_svn(None, [], + 'rm', sbox.repo_url + '/A/D', '-mm') + + sbox.simple_commit() #r3 + + # This introduces a copy and a move in r3, but check how the history + # of these nodes behaves in r2. + + # This one might change behavior once we improve move handling + expected_output = [ + '------------------------------------------------------------------------\n' + ] + expected_err = [] + svntest.actions.run_and_verify_svn(expected_output, expected_err, + 'log', '-v',sbox.ospath('iotb'), + '-r2') + + # While this one + expected_output = [] + expected_err = '.*E195012: Unable to find repository location.*' + svntest.actions.run_and_verify_svn(expected_output, expected_err, + 'log', '-v', sbox.ospath('mutb'), + '-r2') + + # And just for fun, do the same thing for blame + expected_output = [ + ' 1 jrandom This is the file \'iota\'.\n' + ] + expected_err = [] + svntest.actions.run_and_verify_svn(expected_output, expected_err, + 'blame', sbox.ospath('iotb'), + '-r2') + + expected_output = None + expected_err = '.*E195012: Unable to find repository location.*' + svntest.actions.run_and_verify_svn(expected_output, expected_err, + 'blame', sbox.ospath('mutb'), + '-r2') + + expected_output = svntest.verify.RegexListOutput([ + '-+\\n', + 'r3\ .*\n', + re.escape('Changed paths:\n'), + re.escape(' D /A/B/E\n'), + re.escape(' A /E (from /A/B/E:2)\n'), # Patched - Direct move + re.escape(' D /E/alpha\n'), + re.escape(' A /alpha (from /A/B/E/alpha:1)\n'), # Indirect move - Not patched + re.escape(' D /iota\n'), + re.escape(' A /iotb (from /iota:2)\n'), # Patched - Direct move + re.escape(' A /mutb (from /A/mu:1)\n'), # Copy (always r1) + '-+\\n' + ]) + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', '-v', '-q', sbox.wc_dir, + '-c3') + +def log_on_deleted_deep(sbox): + "log on deleted deep path" + + sbox.build() + sbox.simple_propset('k', 'v', 'A/B/E/alpha') + sbox.simple_commit() #r2 + sbox.simple_propset('k', 'v', 'A/B/E/beta') + sbox.simple_commit() #r3 + + sbox.simple_update() # Or commit fails + sbox.simple_move('A/B', 'B') + sbox.simple_commit() #r4 + + expected_output = svntest.verify.RegexListOutput([ + r'-+\n', + r'r1 .*\n', + r'-+\n', + r'r2 .*\n', + r'-+\n', + r'r2 .*\n', + r'-+\n', + r'r3 .*\n', + r'-+\n', + ]) + # In deleted location + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + '-q', '-c', '1-2,2-3') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + 'alpha', 'beta', + '-q', '-c', '1-2,2-3') + + # In new location + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E', + '-q', '-c', '1-2,2-3') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E@4', + 'alpha', 'beta', + '-q', '-c', '1-2,2-3') + + expected_output = svntest.verify.RegexListOutput([ + r'-+\n', + r'r1 .*\n', + r'-+\n', + r'r2 .*\n', + r'-+\n', + ]) + # 2 ranges + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + 'alpha', + '-q', '-c', '1,2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E', + 'alpha', + '-q', '-c', '1,2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + '', + '-q', '-c', '1,2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E', + '', + '-q', '-c', '1,2') + + # 1 range + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + 'alpha', + '-q', '-c', '1-2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E', + 'alpha', + '-q', '-c', '1-2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/A/B/E@3', + '', + '-q', '-c', '1-2') + + svntest.actions.run_and_verify_svn(expected_output, [], + 'log', sbox.repo_url + '/B/E', + '', + '-q', '-c', '1-2') + ######################################################################## # Run the tests @@ -2667,6 +2828,8 @@ test_list = [ None, log_multiple_revs_spanning_rename, mergeinfo_log, merge_sensitive_log_xml_reverse_merges, + log_revision_move_copy, + log_on_deleted_deep, ] if __name__ == '__main__': Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_authz_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_authz_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_authz_tests.py Sun Jun 14 20:58:10 2015 @@ -194,8 +194,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1) + check_props=True) # Merge r4:8 into the restricted WC's A_COPY_2. # @@ -270,8 +269,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0) + check_props=True) # Merge r5:7 into the restricted WC's A_COPY_3. # @@ -335,8 +333,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0) + check_props=True) svntest.actions.run_and_verify_svn(None, [], 'revert', '--recursive', wc_restricted) @@ -379,8 +376,8 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0, '-c5', '-c8', + [], True, False, + '-c5', '-c8', A_COPY_2_H_path) # Test issue #2829 'Improve handling for skipped paths encountered @@ -395,7 +392,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_output = wc.State(wc_dir, {'A/D/H/zeta' : Item(verb='Adding')}) wc_status.add({'A/D/H/zeta' : Item(status=' ', wc_rev=9)}) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - wc_status, None, wc_dir) + wc_status) # Merge -r7:9 to the restricted WC's A_COPY_2/D/H. # @@ -436,8 +433,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0) + check_props=True) # Merge -r4:9 to the restricted WC's A_COPY_2/D/H. # @@ -483,8 +479,7 @@ def mergeinfo_and_skipped_paths(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0) + check_props=True) @SkipUnless(server_has_mergeinfo) @Issue(2876) @@ -526,7 +521,7 @@ def merge_fails_if_subtree_is_deleted_on # Commit the new content svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) svntest.actions.run_and_verify_svn(None, [], 'cp', A_url, Acopy_url, '-m', 'create a new copy of A') @@ -566,7 +561,7 @@ def merge_fails_if_subtree_is_deleted_on }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Delete A/D/gamma from working copy svntest.actions.run_and_verify_svn(None, [], 'delete', gamma_path) @@ -580,7 +575,7 @@ def merge_fails_if_subtree_is_deleted_on svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, - None, + [], wc_dir, wc_dir) svntest.actions.run_and_verify_svn( expected_merge_output([[3,4]], @@ -640,7 +635,7 @@ def reintegrate_fails_if_no_root_access( expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY/mu', wc_rev=7) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) expected_disk.tweak('A_COPY/mu', contents='Changed on the branch.') # Update the WC. @@ -731,8 +726,7 @@ def reintegrate_fails_if_no_root_access( expected_disk, expected_status, expected_skip, - None, None, None, None, - None, True, True, + [], True, True, '--reintegrate', A_path) def diff_unauth_parent(sbox): Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_automatic_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_automatic_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_automatic_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_automatic_tests.py Sun Jun 14 20:58:10 2015 @@ -980,8 +980,8 @@ def merge_to_reverse_cherry_subtree_to_m expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0, A_COPY_path) + [], True, False, + A_COPY_path) #---------------------------------------------------------------------- # Automatic merges should notice ancestory for replaced files @@ -1073,8 +1073,8 @@ def merge_replacement(sbox): expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 0, A_path) + [], True, False, + A_path) @SkipUnless(server_has_mergeinfo) @Issue(4313) Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_reintegrate_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_reintegrate_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/merge_reintegrate_tests.py Sun Jun 14 20:58:10 2015 @@ -86,7 +86,7 @@ def run_and_verify_reintegrate(tgt_dir, mergeinfo_output_tree, elision_output_tree, disk_tree, status_tree, skip_tree, - error_re_string = None, + expected_stderr = [], check_props = True, dry_run = True): """Run 'svn merge --reintegrate SRC_URL TGT_DIR'. Raise an error if @@ -98,8 +98,7 @@ def run_and_verify_reintegrate(tgt_dir, tgt_dir, None, None, src_url, None, output_tree, mergeinfo_output_tree, elision_output_tree, disk_tree, status_tree, skip_tree, - error_re_string, - None, None, None, None, check_props, dry_run, + expected_stderr, check_props, dry_run, '--reintegrate', tgt_dir) @@ -122,7 +121,7 @@ def basic_reintegrate(sbox): expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY/mu', wc_rev=7) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) expected_disk.tweak('A_COPY/mu', contents='Changed on the branch.') # Update the wcs. @@ -130,7 +129,7 @@ def basic_reintegrate(sbox): expected_status.tweak(wc_rev='7') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # Merge from trunk to branch (ie, r3-6), using normal cherry-harvest. A_COPY_path = sbox.ospath('A_COPY') @@ -196,8 +195,7 @@ def basic_reintegrate(sbox): k_expected_disk, k_expected_status, expected_skip, - None, None, None, None, - None, True) + [], True) expected_disk.tweak('A_COPY', props={SVN_PROP_MERGEINFO: '/A:2-7'}) expected_disk.tweak('A_COPY/B/E/beta', contents="New content") expected_disk.tweak('A_COPY/D/G/rho', contents="New content") @@ -215,14 +213,14 @@ def basic_reintegrate(sbox): expected_status.tweak('A_COPY', 'A_COPY/D/H/psi', 'A_COPY/D/G/rho', 'A_COPY/B/E/beta', 'A_COPY/D/H/omega', wc_rev=8) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Update the wcs again. expected_output = wc.State(wc_dir, {}) expected_status.tweak(wc_rev='8') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # *finally*, actually run merge --reintegrate in trunk with the @@ -268,7 +266,7 @@ def basic_reintegrate(sbox): k_expected_disk, k_expected_status, expected_skip, - None, True, True) + [], True, True) # Test issue #3640: # @@ -325,7 +323,7 @@ def basic_reintegrate(sbox): k_expected_disk, expected_status, expected_skip, - None, True, True) + [], True, True) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -343,7 +341,7 @@ def reintegrate_with_rename(sbox): expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY/mu', wc_rev=7) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) expected_disk.tweak('A_COPY/mu', contents='Changed on the branch.') # Update the wcs. @@ -351,7 +349,7 @@ def reintegrate_with_rename(sbox): expected_status.tweak(wc_rev='7') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # Merge from trunk to branch (ie, r3-6), using normal cherry-harvest. A_COPY_path = sbox.ospath('A_COPY') @@ -417,8 +415,7 @@ def reintegrate_with_rename(sbox): k_expected_disk, k_expected_status, expected_skip, - None, None, None, None, - None, True) + [], True) expected_disk.tweak('A_COPY', props={SVN_PROP_MERGEINFO: '/A:2-7'}) expected_disk.tweak('A_COPY/B/E/beta', contents="New content") expected_disk.tweak('A_COPY/D/G/rho', contents="New content") @@ -436,7 +433,7 @@ def reintegrate_with_rename(sbox): expected_status.tweak('A_COPY', 'A_COPY/D/H/psi', 'A_COPY/D/G/rho', 'A_COPY/B/E/beta', 'A_COPY/D/H/omega', wc_rev=8) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Update the wcs again. @@ -474,7 +471,7 @@ def reintegrate_with_rename(sbox): expected_status.tweak(wc_rev='8') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # Make another change on the branch: copy tau to tauprime. Commit # in r9. @@ -500,7 +497,7 @@ def reintegrate_with_rename(sbox): expected_status.tweak(wc_rev='9') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # *finally*, actually run merge --reintegrate in trunk with the # branch URL. This should bring in the mu change and the tauprime @@ -553,7 +550,7 @@ def reintegrate_with_rename(sbox): k_expected_disk, k_expected_status, expected_skip, - None, True, True) + [], True, True) # Finally, commit the result of the merge (r10). expected_output = wc.State(wc_dir, { @@ -566,7 +563,7 @@ def reintegrate_with_rename(sbox): }) expected_status.tweak('A', 'A/mu', wc_rev=10) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -584,7 +581,7 @@ def reintegrate_branch_never_merged_to(s expected_output = wc.State(wc_dir, {'A_COPY/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY/mu', wc_rev=7) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) expected_disk.tweak('A_COPY/mu', contents='Changed on the branch.') # Update the wcs. @@ -592,7 +589,7 @@ def reintegrate_branch_never_merged_to(s expected_status.tweak(wc_rev='7') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # Make another change on the branch: copy tau to tauprime. Commit # in r8. @@ -606,7 +603,7 @@ def reintegrate_branch_never_merged_to(s }) expected_status.add({'A_COPY/D/G/tauprime': Item(status=' ', wc_rev=8)}) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) expected_disk.add({ 'A_COPY/D/G/tauprime' : Item(contents="This is the file 'tau'.\n") }) @@ -617,7 +614,7 @@ def reintegrate_branch_never_merged_to(s expected_status.tweak(wc_rev='8') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, - None, None, None, None, None, True) + check_props=True) # *finally*, actually run merge --reintegrate in trunk with the # branch URL. This should bring in the mu change and the tauprime @@ -685,7 +682,7 @@ def reintegrate_branch_never_merged_to(s k_expected_disk, k_expected_status, expected_skip, - None, True, True) + [], True, True) # Finally, commit the result of the merge (r9). expected_output = wc.State(wc_dir, { @@ -698,7 +695,7 @@ def reintegrate_branch_never_merged_to(s }) expected_status.tweak('A', 'A/mu', wc_rev=9) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -717,10 +714,11 @@ def reintegrate_fail_on_modified_wc(sbox sbox.simple_commit() svntest.main.file_write(mu_path, "Changed on 'trunk' (the merge target).") + expected_skip = wc.State(wc_dir, {}) sbox.simple_update() # avoid mixed-revision error run_and_verify_reintegrate( A_path, sbox.repo_url + '/A_COPY', None, None, None, - None, None, None, + None, None, expected_skip, ".*Cannot merge into a working copy that has local modifications.*", True, False) @@ -740,11 +738,12 @@ def reintegrate_fail_on_mixed_rev_wc(sbo }) expected_status.tweak('A/mu', wc_rev=7) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) + expected_skip = wc.State(wc_dir, {}) # Try merging into that same wc, expecting failure. run_and_verify_reintegrate( A_path, sbox.repo_url + '/A_COPY', None, None, None, - None, None, None, + None, None, expected_skip, ".*Cannot merge into mixed-revision working copy.*", True, False) @@ -806,12 +805,13 @@ def reintegrate_fail_on_switched_wc(sbox expected_output, expected_disk, expected_status, - None, None, None, None, None, + [], False, '--ignore-ancestry') sbox.simple_update() # avoid mixed-revision error + expected_skip = wc.State(wc_dir, {}) run_and_verify_reintegrate( A_path, sbox.repo_url + '/A_COPY', None, None, None, - None, None, None, + None, None, expected_skip, ".*Cannot merge into a working copy with a switched subtree.*", True, False) @@ -892,7 +892,7 @@ def reintegrate_on_shallow_wc(sbox): expected_A_disk, expected_A_status, expected_A_skip, - None, 1, 1) + [], 1, 1) # Now revert the reintegrate and make a second change on the # branch in r4, but this time change a subtree that corresponds @@ -929,7 +929,7 @@ def reintegrate_on_shallow_wc(sbox): expected_A_disk, expected_A_status, expected_A_skip, - None, 1, 1) + [], 1, 1) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -1103,7 +1103,7 @@ def reintegrate_with_subtree_mergeinfo(s expected_output = wc.State(wc_dir, {'A_COPY_3/D/gamma' : Item(verb='Sending')}) expected_status.tweak('A_COPY_3/D/gamma', wc_rev=9) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r10 - Merge r9 from A_COPY_3/D to A/D, creating explicit subtree # mergeinfo under A. For this and every subsequent merge we update the WC @@ -1121,14 +1121,14 @@ def reintegrate_with_subtree_mergeinfo(s 'A/D/gamma' : Item(verb='Sending')}) expected_status.tweak('A/D', 'A/D/gamma', wc_rev=10) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r11 - Make a text change to A_COPY_2/mu svntest.main.file_write(mu_COPY_2_path, "New content") expected_output = wc.State(wc_dir, {'A_COPY_2/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY_2/mu', wc_rev=11) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r12 - Merge r11 from A_COPY_2/mu to A_COPY/mu svntest.actions.run_and_verify_svn(exp_noop_up_out(11), [], 'up', @@ -1143,7 +1143,7 @@ def reintegrate_with_subtree_mergeinfo(s {'A_COPY/mu' : Item(verb='Sending')}) expected_status.tweak('A_COPY/mu', wc_rev=12) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r13 - Do a 'synch' cherry harvest merge of all available revisions # from A to A_COPY @@ -1180,14 +1180,14 @@ def reintegrate_with_subtree_mergeinfo(s 'A_COPY/D/gamma', wc_rev=13) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r14 - Make a text change on A_COPY/B/E/alpha svntest.main.file_write(alpha_COPY_path, "New content") expected_output = wc.State(wc_dir, {'A_COPY/B/E/alpha' : Item(verb='Sending')}) expected_status.tweak('A_COPY/B/E/alpha', wc_rev=14) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Now, reintegrate A_COPY to A. This should succeed. svntest.actions.run_and_verify_svn(exp_noop_up_out(14), [], 'up', @@ -1260,7 +1260,7 @@ def reintegrate_with_subtree_mergeinfo(s expected_A_disk, expected_A_status, expected_A_skip, - None, 1, 1) + [], 1, 1) # Make some more changes to A_COPY so that the same revisions have *not* # been uniformly applied from A to A_COPY. In this case the reintegrate @@ -1293,7 +1293,7 @@ def reintegrate_with_subtree_mergeinfo(s 'A_COPY/D/H/omega' : Item(verb='Sending')}) expected_status.tweak('A_COPY/D', 'A_COPY/D/H/omega', wc_rev=15) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Now reintegrate A_COPY back to A. Since A_COPY/D no longer has r8 merged # to it from A, the merge should fail. Further we expect an error message @@ -1393,14 +1393,14 @@ def reintegrate_with_subtree_mergeinfo(s wc_rev=17) expected_status.add({'A_COPY/D/gamma_moved' : Item(status=' ', wc_rev=17)}) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r18 - C) Text mod to A/D/gamma_moved svntest.main.file_write(gamma_moved_path, "Even newer content") expected_output = wc.State(wc_dir, {'A/D/gamma_moved' : Item(verb='Sending')}) expected_status.tweak('A/D/gamma_moved', wc_rev=18) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # r19 - D) Synch merge from A to A_COPY svntest.actions.run_and_verify_svn( @@ -1421,7 +1421,7 @@ def reintegrate_with_subtree_mergeinfo(s 'A_COPY/D/gamma_moved', wc_rev=19) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Reintegrate A_COPY to A, this should work since # A_COPY/D/gamma_moved's natural history, @@ -1529,7 +1529,7 @@ def reintegrate_with_subtree_mergeinfo(s expected_A_disk, expected_A_status, expected_A_skip, - None, 1, 1) + [], 1, 1) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -1686,7 +1686,7 @@ def multiple_reintegrates_from_the_same_ expected_disk, expected_status, expected_skip, - None, 1, 1) + [], 1, 1) svntest.actions.run_and_verify_svn(None, [], 'ci', '-m', "2nd Reintegrate feature branch back to 'A'", wc_dir) @@ -1842,7 +1842,7 @@ def reintegrate_with_self_referential_me expected_disk, expected_status, expected_skip, - None, 1, 0) + [], 1, 0) #---------------------------------------------------------------------- # Test for issue #3577 '1.7 subtree mergeinfo recording breaks reintegrate' @@ -1977,7 +1977,7 @@ def reintegrate_with_subtree_merges(sbox expected_A_disk, expected_A_status, expected_A_skip, - None, 1, 1) + [], 1, 1) # Test issue #4329. Revert previous merge and commit a new edit to # A/D/H/psi. Attempt the same merge without the --reintegrate option. @@ -1998,8 +1998,8 @@ def reintegrate_with_subtree_merges(sbox expected_mergeinfo_output, expected_elision_output, expected_A_disk, expected_A_status, - expected_A_skip, None, None, None, - None, None, True, False, A_path) + expected_A_skip, + [], True, False, A_path) #---------------------------------------------------------------------- # Test for issue #3654 'added subtrees with mergeinfo break reintegrate'. @@ -2192,7 +2192,7 @@ def added_subtrees_with_mergeinfo_break_ expected_disk, expected_status, expected_skip, - None, 1, 1) + [], 1, 1) #---------------------------------------------------------------------- # Test for issue #3648 '2-URL merges incorrectly reverse-merge mergeinfo @@ -2350,8 +2350,7 @@ def two_URL_merge_removes_valid_mergeinf expected_disk, expected_status, expected_skip, - None, None, None, None, - None, 1, 1) + [], True, True) #---------------------------------------------------------------------- # Test for issue #3867 'reintegrate merges create mergeinfo for @@ -2438,7 +2437,7 @@ def reintegrate_creates_bogus_mergeinfo( expected_mergeinfo_output, expected_elision_output, expected_disk, None, expected_skip, - None, + [], 1, 1) @@ -2564,7 +2563,7 @@ def no_source_subtree_mergeinfo(sbox): expected_output, expected_mergeinfo, expected_elision, expected_disk, None, expected_skip, - None, + [], 1, 1) #----------------------------------------------------------------------
