Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/schedule_tests.py Sun Jun 14 20:58:10 2015 @@ -495,8 +495,7 @@ def delete_missing(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) #---------------------------------------------------------------------- # Regression test for issue #854: @@ -721,8 +720,7 @@ def replace_dir_delete_child(sbox): svntest.actions.run_and_verify_commit(sbox.wc_dir, expected_output, - expected_status, - None, sbox.wc_dir) + expected_status) ########################################################################
Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/special_tests.py Sun Jun 14 20:58:10 2015 @@ -86,8 +86,7 @@ def general_symlink(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, - wc_dir) + expected_status) ## Now we should update to the previous version, verify that no ## symlink is present, then update back to HEAD and see if the symlink @@ -133,7 +132,7 @@ def general_symlink(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) @SkipUnless(svntest.main.is_posix_os) @@ -250,7 +249,7 @@ def copy_tree_with_symlink(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Copy H to H2 H_path = os.path.join(wc_dir, 'A', 'D', 'H') H2_path = os.path.join(wc_dir, 'A', 'D', 'H2') @@ -297,7 +296,7 @@ def replace_symlink_with_file(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Now replace the symlink with a normal file and try to commit, we @@ -350,7 +349,7 @@ def remove_symlink(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Now remove it svntest.actions.run_and_verify_svn(None, [], 'rm', newfile_path) @@ -366,7 +365,7 @@ def remove_symlink(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) #---------------------------------------------------------------------- @SkipUnless(server_has_mergeinfo) @@ -395,8 +394,7 @@ def merge_symlink_into_file(sbox): 'A/Dprime/gamma' : Item(verb='Deleting'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) # Commit a symlink in its place linktarget_path = os.path.join(wc_dir, 'linktarget') @@ -407,8 +405,7 @@ def merge_symlink_into_file(sbox): 'A/Dprime/gamma' : Item(verb='Adding'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) # merge the creation of the symlink into the original directory svntest.main.run_svn(None, @@ -430,8 +427,7 @@ def merge_symlink_into_file(sbox): 'A/D/gamma' : Item(verb='Replacing'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) @@ -460,8 +456,7 @@ def merge_file_into_symlink(sbox): 'A/Dprime/gamma' : Item(verb='Deleting'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) # Commit a symlink in its place linktarget_path = os.path.join(wc_dir, 'linktarget') @@ -472,8 +467,7 @@ def merge_file_into_symlink(sbox): 'A/Dprime/gamma' : Item(verb='Adding'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) svntest.main.file_write(gamma_path, 'changed file', 'w+') @@ -481,8 +475,7 @@ def merge_file_into_symlink(sbox): 'A/D/gamma' : Item(verb='Sending'), }) - svntest.actions.run_and_verify_commit(wc_dir, expected_output, None, None, - wc_dir) + svntest.actions.run_and_verify_commit(wc_dir, expected_output, None) # ok, now merge the change to the file into the symlink we created, this # gives us a weird error @@ -498,7 +491,8 @@ def checkout_repo_with_symlinks(sbox): svntest.actions.load_repo(sbox, os.path.join(os.path.dirname(sys.argv[0]), 'special_tests_data', - 'symlink.dump')) + 'symlink.dump'), + create_wc=False) expected_output = svntest.wc.State(sbox.wc_dir, { 'from': Item(status='A '), @@ -564,7 +558,8 @@ def checkout_repo_with_unknown_special_t svntest.actions.load_repo(sbox, os.path.join(os.path.dirname(sys.argv[0]), 'special_tests_data', - 'bad-special-type.dump')) + 'bad-special-type.dump'), + create_wc=False) expected_output = svntest.wc.State(sbox.wc_dir, { 'special': Item(status='A '), @@ -604,39 +599,78 @@ def replace_symlink_with_dir(sbox): expected_output = svntest.wc.State(wc_dir, { }) - error_re_string = 'E145001: (Entry|Node).*has.*changed (special|kind)' + error_re_string = '.*E145001: (Entry|Node).*has.*changed (special|kind).*' svntest.actions.run_and_verify_commit(wc_dir, expected_output, - None, error_re_string, wc_dir) + None, error_re_string) # test for issue #1808: svn up deletes local symlink that obstructs # versioned file @Issue(1808) -@SkipUnless(svntest.main.is_posix_os) def update_obstructing_symlink(sbox): "symlink obstructs incoming delete" sbox.build() wc_dir = sbox.wc_dir - mu_path = os.path.join(wc_dir, 'A', 'mu') - mu_url = sbox.repo_url + '/A/mu' - iota_path = os.path.join(wc_dir, 'iota') + mu_path = sbox.ospath('A/mu') - # delete A/mu and replace it with a symlink - svntest.main.run_svn(None, 'rm', mu_path) - os.symlink(iota_path, mu_path) + iota_abspath = os.path.abspath(sbox.ospath('iota')) - svntest.main.run_svn(None, 'rm', mu_url, - '-m', 'log msg') + # delete mu and replace it with an (not-added) symlink + sbox.simple_rm('A/mu') + sbox.simple_symlink(iota_abspath, 'A/mu') - svntest.main.run_svn(None, - 'up', wc_dir) + # delete pi and replace it with an added symlink + sbox.simple_rm('A/D/G/pi') + sbox.simple_add_symlink(iota_abspath, 'A/D/G/pi') - # check that the symlink is still there - target = os.readlink(mu_path) - if target != iota_path: - raise svntest.Failure + if not os.path.exists(mu_path): + raise svntest.Failure("mu should be there") + + # Now remove mu and pi in the repository + svntest.main.run_svn(None, 'rm', '-m', 'log msg', + sbox.repo_url + '/A/mu', + sbox.repo_url + '/A/D/G/pi') + + # We expect tree conflicts + expected_output = svntest.wc.State(wc_dir, { + 'A/mu': Item(status=' ', treeconflict='C'), + 'A/D/G/pi': Item(status=' ', treeconflict='C') + }) + + expected_status = svntest.actions.get_virginal_state(wc_dir, 2) + expected_status.tweak('A/mu', status='? ', treeconflict='C', + wc_rev=None) + + expected_status.tweak('A/D/G/pi', status='A ',treeconflict='C', + wc_rev='-') + + svntest.actions.run_and_verify_update(wc_dir, + expected_output, None, + expected_status) + + expected_info = [ + { + 'Path': re.escape(sbox.ospath('A/D/G/pi')), + 'Tree conflict': 'local file replace, incoming file delete or move.*' + }, + { + 'Path': re.escape(sbox.ospath('A/mu')), + 'Tree conflict': 'local file delete, incoming file delete or move.*' + } + ] + svntest.actions.run_and_verify_info(expected_info, + sbox.ospath('A/D/G/pi'), + sbox.ospath('A/mu')) + + # check that the symlink is still there + if not os.path.exists(mu_path): + raise svntest.Failure("mu should be there") + if svntest.main.is_posix_os(): + target = os.readlink(mu_path) + if target != iota_abspath: + raise svntest.Failure("mu no longer points to the same location") def warn_on_reserved_name(sbox): "warn when attempt operation on a reserved name" @@ -666,7 +700,7 @@ def propvalue_normalized(sbox): # Property value should be SVN_PROP_BOOLEAN_TRUE expected_propval = ['*'] svntest.actions.run_and_verify_svn(expected_propval, [], - 'propget', '--strict', 'svn:special', + 'propget', '--no-newline', 'svn:special', iota2_path) # Commit and check again. @@ -678,12 +712,11 @@ def propvalue_normalized(sbox): 'iota2' : Item(status=' ', wc_rev=2), }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, - wc_dir) + expected_status) svntest.main.run_svn(None, 'update', wc_dir) svntest.actions.run_and_verify_svn(expected_propval, [], - 'propget', '--strict', 'svn:special', + 'propget', '--no-newline', 'svn:special', iota2_path) @@ -727,7 +760,7 @@ def symlink_destination_change(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Modify the symlink to point somewhere else os.remove(newfile_path) @@ -899,8 +932,7 @@ def update_symlink(sbox): expected_output, expected_disk, expected_status, - None, None, None, - None, None, 1) + check_props=True) #---------------------------------------------------------------------- @Issue(4091) @@ -1142,8 +1174,7 @@ def incoming_symlink_changes(sbox): 's-in-place' : Item(verb='Sending'), }) svntest.actions.run_and_verify_commit(wc_dir, - expected_output, None, None, - wc_dir) + expected_output, None) # r4 svntest.main.run_svnmucc('propdel', 'svn:special', @@ -1174,7 +1205,6 @@ def incoming_symlink_changes(sbox): expected_output, None, expected_status, - None, None, None, None, None, check_props=True) # Update back to r2, to prepare some local changes @@ -1191,8 +1221,7 @@ def incoming_symlink_changes(sbox): expected_output, None, expected_status, - None, None, None, None, None, - True, + [], True, wc_dir, '-r', '2') # Ok, now add a property on all of them to make future symlinkness changes @@ -1216,8 +1245,7 @@ def incoming_symlink_changes(sbox): expected_output, None, expected_status, - None, None, None, None, None, - True) + check_props=True) #---------------------------------------------------------------------- @Issue(4479) Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/stat_tests.py Sun Jun 14 20:58:10 2015 @@ -107,7 +107,7 @@ def status_update_with_nested_adds(sbox) # Commit. svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Now we go to the backup working copy, still at revision 1. # We will run 'svn st -u', and make sure that newdir/newfile is reported @@ -735,7 +735,7 @@ use-commit-times = yes expected_status = svntest.actions.get_virginal_state(other_wc, 1) svntest.actions.run_and_verify_update(other_wc, expected_output, expected_disk, expected_status, - None, None, None, None, None, False, + [], False, other_wc, '--config-dir', config_dir) iota_text_timestamp = get_text_timestamp(other_iota_path) if (iota_text_timestamp[17] != ':' or @@ -1111,7 +1111,7 @@ def inconsistent_eol(sbox): expected_status.tweak('iota', wc_rev=2) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir) + expected_status) # Make the eol style inconsistent and verify that status says nothing. svntest.main.file_write(iota_path, "line 1\nline 2\r\n", "wb") @@ -1144,8 +1144,7 @@ def status_update_with_incoming_props(sb # Commit the working copy svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) # Create expected trees for an update to revision 1. expected_output = svntest.wc.State(wc_dir, { @@ -1160,7 +1159,7 @@ def status_update_with_incoming_props(sb expected_output, expected_disk, expected_status, - None, None, None, None, None, 1, + [], True, '-r', '1', wc_dir) # Can't use run_and_verify_status here because the out-of-date @@ -1248,8 +1247,7 @@ def status_update_verbose_with_incoming_ # Commit the working copy svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) # Create expected trees for an update to revision 1. expected_output = svntest.wc.State(wc_dir, { @@ -1265,7 +1263,7 @@ def status_update_verbose_with_incoming_ expected_output, expected_disk, expected_status, - None, None, None, None, None, 1, + [], True, '-r', '1', wc_dir) # Can't use run_and_verify_status here because the out-of-date @@ -1326,8 +1324,7 @@ def status_nonrecursive_update(sbox): expected_status.tweak('A/D/gamma', wc_rev=2, status=' ') svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) # Create expected trees for an update to revision 1. expected_output = svntest.wc.State(wc_dir, { @@ -1342,7 +1339,7 @@ def status_nonrecursive_update(sbox): expected_output, expected_disk, expected_status, - None, None, None, None, None, 0, + [], False, '-r', '1', wc_dir) # Check the remote status of folder A (non-recursively) @@ -1382,8 +1379,7 @@ def change_files_and_commit(wc_dir, file expected_status.tweak(file, wc_rev=commitrev, status=' ') svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, wc_dir) + expected_status) def status_depth_local(sbox): "run 'status --depth=X' with local changes" @@ -1602,44 +1598,81 @@ def status_dash_u_deleted_directories(sb # check status -u of B expected = svntest.verify.UnorderedOutput( - ["D 1 %s\n" % "B", - "D 1 %s\n" % os.path.join("B", "lambda"), - "D 1 %s\n" % os.path.join("B", "E"), - "D 1 %s\n" % os.path.join("B", "E", "alpha"), - "D 1 %s\n" % os.path.join("B", "E", "beta"), - "D 1 %s\n" % os.path.join("B", "F"), + ["D 1 1 jrandom %s\n" % \ + "B", + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "lambda"), + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "E"), + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "E", "alpha"), + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "E", "beta"), + "D 1 1 jrandom %s\n" % + os.path.join("B", "F"), "Status against revision: 1\n" ]) svntest.actions.run_and_verify_svn(expected, [], + "status", "-u", "-v", "B") + + expected = \ + ["D 1 %s\n" % "B", + "Status against revision: 1\n" ] + svntest.actions.run_and_verify_svn(expected, + [], "status", "-u", "B") + # again, but now from inside B, should give the same output if not os.path.exists('B'): os.mkdir('B') os.chdir("B") expected = svntest.verify.UnorderedOutput( - ["D 1 %s\n" % ".", - "D 1 %s\n" % "lambda", - "D 1 %s\n" % "E", - "D 1 %s\n" % os.path.join("E", "alpha"), - "D 1 %s\n" % os.path.join("E", "beta"), - "D 1 %s\n" % "F", + ["D 1 1 jrandom %s\n" % \ + ".", + "D 1 1 jrandom %s\n" % \ + "lambda", + "D 1 1 jrandom %s\n" % \ + "E", + "D 1 1 jrandom %s\n" % \ + os.path.join("E", "alpha"), + "D 1 1 jrandom %s\n" % \ + os.path.join("E", "beta"), + "D 1 1 jrandom %s\n" % \ + "F", "Status against revision: 1\n" ]) svntest.actions.run_and_verify_svn(expected, [], + "status", "-u", "-v", ".") + + expected = \ + ["D 1 %s\n" % ".", + "Status against revision: 1\n" ] + svntest.actions.run_and_verify_svn(expected, + [], "status", "-u", ".") # check status -u of B/E expected = svntest.verify.UnorderedOutput( - ["D 1 %s\n" % os.path.join("B", "E"), - "D 1 %s\n" % os.path.join("B", "E", "alpha"), - "D 1 %s\n" % os.path.join("B", "E", "beta"), + ["D 1 1 jrandom %s\n" % \ + os.path.join("B", "E"), + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "E", "alpha"), + "D 1 1 jrandom %s\n" % \ + os.path.join("B", "E", "beta"), "Status against revision: 1\n" ]) os.chdir(was_cwd) os.chdir(A_path) svntest.actions.run_and_verify_svn(expected, [], + "status", "-u", "-v", + os.path.join("B", "E")) + + + expected = [ "Status against revision: 1\n" ] + svntest.actions.run_and_verify_svn(expected, + [], "status", "-u", os.path.join("B", "E")) @@ -2093,12 +2126,12 @@ def status_path_handling(sbox): def status_move_missing_direct(sbox): "move information when status is called directly" - + sbox.build() sbox.simple_copy('A', 'Z') sbox.simple_commit('') sbox.simple_update('') - + sbox.simple_move('Z', 'ZZ') sbox.simple_move('A', 'Z') sbox.simple_move('Z/B', 'ZB') @@ -2108,14 +2141,14 @@ def status_move_missing_direct(sbox): # Somehow 'svn status' now shows different output for 'ZB/E' # when called directly and via an ancestor, as this handles # multi-layer in a different way - + # Note that the status output may change over different Subversion revisions, # but the status on a node should be identical anyway 'svn status' is called # on it. - + expected_output = [ 'A + %s\n' % sbox.ospath('ZB'), - ' > moved from %s\n' % os.path.join('..', 'Z', 'B'), + ' > moved from %s\n' % os.path.join('..', 'Z', 'B'), 'D + %s\n' % sbox.ospath('ZB/E'), ' > moved to %s\n' % os.path.join('..', 'Z', 'B', 'E'), ] @@ -2133,7 +2166,7 @@ def status_move_missing_direct(sbox): def status_move_missing_direct_base(sbox): "move when status is called directly with base" - + sbox.build() sbox.simple_copy('A', 'Z') sbox.simple_mkdir('Q') @@ -2141,10 +2174,10 @@ def status_move_missing_direct_base(sbox sbox.simple_mkdir('Q/ZB/E') sbox.simple_commit('') sbox.simple_update('') - + sbox.simple_rm('Q') sbox.simple_mkdir('Q') - + sbox.simple_move('Z', 'ZZ') sbox.simple_move('A', 'Z') sbox.simple_move('Z/B', 'Q/ZB') @@ -2154,14 +2187,14 @@ def status_move_missing_direct_base(sbox # Somehow 'svn status' now shows different output for 'Q/ZB/E' # when called directly and via an ancestor, as this handles # multi-layer in a different way - + # Note that the status output may change over different Subversion revisions, # but the status on a node should be identical anyway 'svn status' is called # on it. - + # This test had a different result as status_move_missing_direct at the time of # writing this test. - + expected_output = [ 'A + %s\n' % sbox.ospath('Q/ZB'), ' > moved from %s\n' % os.path.join('..', '..', 'Z', 'B'), @@ -2180,6 +2213,96 @@ def status_move_missing_direct_base(sbox svntest.actions.run_and_verify_svn(expected_output, [], 'status', sbox.ospath('Q/ZB/E'), '--depth', 'empty') +def status_missing_conflicts(sbox): + "status missing certain conflicts" + + sbox.build() + wc_dir = sbox.wc_dir + sbox.simple_propset('q', 'r', 'A/B/E/alpha', 'A/B/E/beta') + sbox.simple_commit() + + sbox.simple_move('A/B/E/alpha', 'alpha') + sbox.simple_move('A/B/E/beta', 'beta') + + sbox.simple_rm('A/B/E') + + sbox.simple_update('A/B/E', revision=1) + + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('A/B/E', status='D ', treeconflict='C', wc_rev=1) + expected_status.tweak('A/B/E/alpha', status='D ', treeconflict='C', wc_rev=1, + moved_to='alpha') + expected_status.tweak('A/B/E/beta', status='D ', treeconflict='C', wc_rev=1, + moved_to='beta') + expected_status.add({ + 'alpha' : Item(status='A ', copied='+', moved_from='A/B/E/alpha', wc_rev='-'), + 'beta' : Item(status='A ', copied='+', moved_from='A/B/E/beta', wc_rev='-') + }) + + svntest.actions.run_and_verify_status(wc_dir, expected_status) + expected_info = [ + { + 'Tree conflict': 'local file moved away, incoming file edit upon update.*' + }, + { + 'Tree conflict': 'local file moved away, incoming file edit upon update.*' + } + ] + svntest.actions.run_and_verify_info(expected_info, + sbox.ospath('A/B/E/alpha'), + sbox.ospath('A/B/E/beta')) + + svntest.actions.run_and_verify_svn(None, [], + 'resolve', '--accept=mine-conflict', + '--depth=empty', sbox.ospath('A/B/E')) + expected_status.tweak('A/B/E', treeconflict=None) + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + # Now replace with directory + sbox.simple_mkdir('A/B/E') + expected_status.tweak('A/B/E', status='R ') + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + svntest.actions.run_and_verify_status(wc_dir, expected_status) + svntest.actions.run_and_verify_info(expected_info, + sbox.ospath('A/B/E/alpha'), + sbox.ospath('A/B/E/beta')) + + #Recreate scenario for file + sbox.simple_rm('A/B/E', 'alpha', 'beta') + svntest.actions.run_and_verify_svn(None, [], + 'revert', '-R', sbox.ospath('A/B/E')) + + sbox.simple_update('A/B/E', revision=2) + + sbox.simple_move('A/B/E/alpha', 'alpha') + sbox.simple_move('A/B/E/beta', 'beta') + + sbox.simple_rm('A/B/E') + sbox.simple_update('A/B/E', revision=1) + svntest.actions.run_and_verify_svn(None, [], + 'resolve', '--accept=mine-conflict', + '--depth=empty', sbox.ospath('A/B/E')) + + sbox.simple_append('A/B/E', 'something') + expected_status.tweak('A/B/E', status='D ') + svntest.actions.run_and_verify_status(wc_dir, expected_status) + sbox.simple_add('A/B/E') + + # In the entries world A/B/E doesn't have children.. + expected_status.tweak('A/B/E', status='R ', entry_kind='file') + + # Tree conflicts still in db + svntest.actions.run_and_verify_info(expected_info, + sbox.ospath('A/B/E/alpha'), + sbox.ospath('A/B/E/beta')) + + # But not in status! + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + + + ######################################################################## # Run the tests @@ -2230,6 +2353,7 @@ test_list = [ None, status_path_handling, status_move_missing_direct, status_move_missing_direct_base, + status_missing_conflicts, ] if __name__ == '__main__': Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnadmin_tests.py Sun Jun 14 20:58:10 2015 @@ -82,6 +82,10 @@ def check_hotcopy_fsfs_fsx(src, dst): if dst_dirent == 'write-lock': continue + # Ignore auto-created rep-cache.db-journal file + if dst_dirent == 'rep-cache.db-journal': + continue + src_dirent = os.path.join(src_dirpath, dst_dirent) if not os.path.exists(src_dirent): raise svntest.Failure("%s does not exist in hotcopy " @@ -96,6 +100,10 @@ def check_hotcopy_fsfs_fsx(src, dst): if src_file == 'write-lock': continue + # Ignore auto-created rep-cache.db-journal file + if src_file == 'rep-cache.db-journal': + continue + src_path = os.path.join(src_dirpath, src_file) dst_path = os.path.join(dst_dirpath, src_file) if not os.path.isfile(dst_path): @@ -179,7 +187,7 @@ def check_hotcopy_fsfs(src, dst): def check_hotcopy_fsx(src, dst): "Verify that the SRC FSX repository has been correctly copied to DST." check_hotcopy_fsfs_fsx(src, dst) - + #---------------------------------------------------------------------- # How we currently test 'svnadmin' -- @@ -784,7 +792,7 @@ def verify_incremental_fsfs(sbox): # the listing itself is valid. r2 = fsfs_file(sbox.repo_dir, 'revs', '2') if r2.endswith('pack'): - raise svntest.Skip + raise svntest.Skip('Test doesn\'t handle packed revisions') fp = open(r2, 'wb') fp.write("""id: 0-2.0.r2/0 @@ -2051,7 +2059,7 @@ def verify_keep_going(sbox): svntest.actions.run_and_verify_svn(None, [], 'mkdir', '-m', 'log_msg', C_url) - + r2 = fsfs_file(sbox.repo_dir, 'revs', '2') fp = open(r2, 'r+b') fp.write("""inserting junk to corrupt the rev""") @@ -2070,12 +2078,12 @@ def verify_keep_going(sbox): ".*r2: E160004:.*", ".*r3: E160004:.*", ".*r3: E160004:.*"]) - exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*", - "svnadmin: E165011:.*"], False) if (svntest.main.fs_has_rep_sharing()): exp_out.insert(0, ".*Verifying.*metadata.*") + exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*", + "svnadmin: E165011:.*"], False) if svntest.verify.verify_outputs("Unexpected error while running 'svnadmin verify'.", output, errput, exp_out, exp_err): raise svntest.Failure @@ -2092,6 +2100,7 @@ def verify_keep_going(sbox): if (svntest.main.fs_has_rep_sharing()): exp_out.insert(0, ".*Verifying repository metadata.*") + exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*"], False) if svntest.verify.verify_outputs("Unexpected error while running 'svnadmin verify'.", output, errput, exp_out, exp_err): raise svntest.Failure @@ -2102,12 +2111,62 @@ def verify_keep_going(sbox): sbox.repo_dir) if svntest.verify.verify_outputs("Output of 'svnadmin verify' is unexpected.", - None, errput, None, "svnadmin: E165011:.*"): + None, errput, None, "svnadmin: E160004:.*"): raise svntest.Failure # Don't leave a corrupt repository svntest.main.safe_rmtree(sbox.repo_dir, True) + +@SkipUnless(svntest.main.is_fs_type_fsfs) +def verify_keep_going_quiet(sbox): + "svnadmin verify --keep-going --quiet test" + + sbox.build(create_wc = False) + repo_url = sbox.repo_url + B_url = sbox.repo_url + '/B' + C_url = sbox.repo_url + '/C' + + # Create A/B/E/bravo in r2. + svntest.actions.run_and_verify_svn(None, [], + 'mkdir', '-m', 'log_msg', + B_url) + + svntest.actions.run_and_verify_svn(None, [], + 'mkdir', '-m', 'log_msg', + C_url) + + r2 = fsfs_file(sbox.repo_dir, 'revs', '2') + fp = open(r2, 'r+b') + fp.write("""inserting junk to corrupt the rev""") + fp.close() + + exit_code, output, errput = svntest.main.run_svnadmin("verify", + "--keep-going", + "--quiet", + sbox.repo_dir) + + exp_err = svntest.verify.RegexListOutput([".*Error verifying revision 2.", + "svnadmin: E160004:.*", + "svnadmin: E160004:.*", + ".*Error verifying revision 3.", + "svnadmin: E160004:.*", + "svnadmin: E160004:.*", + "svnadmin: E165011:.*"], False) + + # Insert another expected error from checksum verification + if (svntest.main.is_fs_log_addressing()): + exp_err.insert(0, "svnadmin: E160004:.*") + + if svntest.verify.verify_outputs( + "Unexpected error while running 'svnadmin verify'.", + output, errput, None, exp_err): + raise svntest.Failure + + # Don't leave a corrupt repository + svntest.main.safe_rmtree(sbox.repo_dir, True) + + @SkipUnless(svntest.main.is_fs_type_fsfs) def verify_invalid_path_changes(sbox): "detect invalid changed path list entries" @@ -2227,8 +2286,7 @@ def verify_invalid_path_changes(sbox): exp_out = svntest.verify.RegexListOutput([".*Verified revision 0.", ".*Verified revision 1.", ".*Error verifying revision 2."]) - exp_err = svntest.verify.RegexListOutput(["svnadmin: E160020:.*", - "svnadmin: E165011:.*"], False) + exp_err = svntest.verify.RegexListOutput(["svnadmin: E160020:.*"], False) if (svntest.main.fs_has_rep_sharing()): exp_out.insert(0, ".*Verifying.*metadata.*") @@ -2244,7 +2302,7 @@ def verify_invalid_path_changes(sbox): sbox.repo_dir) if svntest.verify.verify_outputs("Output of 'svnadmin verify' is unexpected.", - None, errput, None, "svnadmin: E165011:.*"): + None, errput, None, "svnadmin: E160020:.*"): raise svntest.Failure # Don't leave a corrupt repository @@ -2616,8 +2674,7 @@ def verify_quickly(sbox): # resulting in different progress output if svntest.main.is_fs_log_addressing(): exp_out = svntest.verify.RegexListOutput([]) - exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*", - "svnadmin: E165011:.*"], False) + exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*"], False) else: exp_out = svntest.verify.RegexListOutput([]) exp_err = svntest.verify.RegexListOutput([]) @@ -2641,7 +2698,7 @@ def fsfs_hotcopy_progress(sbox): # and incremental scenarios. The progress output can be affected by # the --fsfs-packing option, so skip the test if that is the case. if svntest.main.options.fsfs_packing: - raise svntest.Skip + raise svntest.Skip('fsfs packing set') # Create an empty repository, configure three files per shard. sbox.build(create_wc=False, empty=True) @@ -2755,7 +2812,7 @@ def fsfs_hotcopy_progress_with_revprop_c # The progress output can be affected by the --fsfs-packing # option, so skip the test if that is the case. if svntest.main.options.fsfs_packing: - raise svntest.Skip + raise svntest.Skip('fsfs packing set') # Create an empty repository, commit several revisions and hotcopy it. sbox.build(create_wc=False, empty=True) @@ -2925,6 +2982,30 @@ def load_txdelta(sbox): ".*Verified revision *"): raise svntest.Failure +@Issues(4563) +def load_no_svndate_r0(sbox): + "load without svn:date on r0" + + sbox.build(create_wc=False, empty=True) + + # svn:date exits + svntest.actions.run_and_verify_svnlook([' svn:date\n'], [], + 'proplist', '--revprop', '-r0', + sbox.repo_dir) + + dump_old = ["SVN-fs-dump-format-version: 2\n", "\n", + "UUID: bf52886d-358d-4493-a414-944a6e5ad4f5\n", "\n", + "Revision-number: 0\n", + "Prop-content-length: 10\n", + "Content-length: 10\n", "\n", + "PROPS-END\n", "\n"] + svntest.actions.run_and_verify_load(sbox.repo_dir, dump_old) + + # svn:date should have been removed + svntest.actions.run_and_verify_svnlook([], [], + 'proplist', '--revprop', '-r0', + sbox.repo_dir) + ######################################################################## # Run the tests @@ -2963,6 +3044,7 @@ test_list = [ None, mergeinfo_race, recover_old_empty, verify_keep_going, + verify_keep_going_quiet, verify_invalid_path_changes, verify_denormalized_names, fsfs_recover_old_non_empty, @@ -2979,6 +3061,7 @@ test_list = [ None, freeze_same_uuid, upgrade, load_txdelta, + load_no_svndate_r0, ] if __name__ == '__main__': Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnauthz_tests.py Sun Jun 14 20:58:10 2015 @@ -128,9 +128,8 @@ def svnauthz_validate_repo_test(sbox): expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) # Valid authz url (file stored in repo) authz_url = repo_url + '/A/authz' @@ -174,9 +173,8 @@ def svnauthz_validate_txn_test(sbox): expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = ['Exit 0\n'] verify_logfile(logfilepath, expected_data) @@ -184,9 +182,8 @@ def svnauthz_validate_txn_test(sbox): svntest.main.file_append(authz_path, 'x') expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')}) expected_status.tweak('A/authz', status=' ', wc_rev=3) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = svntest.verify.RegexOutput(".*?Error parsing authz file: '.*?'", match_all=False) verify_logfile(logfilepath, expected_data, delete_log=False) @@ -201,7 +198,7 @@ def svnauthz_validate_txn_test(sbox): svntest.main.file_append(authz_path, 'x') expected_status.tweak('A/authz', status=' ', wc_rev=4) if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): + expected_status): raise svntest.Failure expected_data = svntest.verify.ExpectedOutput("Exit 2\n", match_all=False) verify_logfile(logfilepath, expected_data) @@ -279,7 +276,7 @@ def svnauthz_accessof_repo_test(sbox): 'A/authz' : Item(status=' ', wc_rev=2), }) if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): + expected_status): raise svntest.Failure # Anonymous access with no path, and no repository should be rw @@ -412,9 +409,8 @@ def svnauthz_accessof_groups_repo_test(s 'A/groups' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) # Anonymous access with no path, and no repository should be no # since it returns the highest level of access granted anywhere. @@ -628,9 +624,8 @@ def svnauthz_accessof_is_repo_test(sbox) expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) # Test an invalid --is option, should get an error message and exit code # of 2. @@ -753,9 +748,8 @@ def svnauthz_accessof_is_repo_test(sbox) svntest.main.file_append(authz_path, "x\n") expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')}) expected_status.tweak('A/authz', wc_rev=3) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) # Check that --is returns 1 when the syntax is invalid with a url. expected_out = svntest.verify.RegexOutput( @@ -797,9 +791,8 @@ def svnauthz_accessof_txn_test(sbox): expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = ['Exit 0\n'] verify_logfile(logfilepath, expected_data) @@ -812,18 +805,16 @@ def svnauthz_accessof_txn_test(sbox): expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')}) expected_status.tweak('A/authz', status=' ', wc_rev=3) svntest.main.file_append(authz_path, "groucho = r\n") - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = svntest.verify.ExpectedOutput('Exit 3\n', match_all=False) verify_logfile(logfilepath, expected_data) # break the authz file with a non-existent group and check for an exit 1. expected_status.tweak('A/authz', status=' ', wc_rev=4) svntest.main.file_append(authz_path, "@friends = rw\n") - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = svntest.verify.ExpectedOutput('Exit 1\n', match_all=False) verify_logfile(logfilepath, expected_data) @@ -831,9 +822,8 @@ def svnauthz_accessof_txn_test(sbox): expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Deleting')}) expected_status.remove('A/authz') svntest.main.run_svn(None, 'rm', authz_path) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = svntest.verify.ExpectedOutput('Exit 2\n', match_all=False) verify_logfile(logfilepath, expected_data) @@ -887,9 +877,8 @@ def svnauthz_compat_mode_repo_test(sbox) expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) svntest.actions.run_and_verify_svnauthz(None, None, 0, True, authz_url) @@ -897,9 +886,8 @@ def svnauthz_compat_mode_repo_test(sbox) svntest.main.file_append(authz_path, "x\n") expected_output = wc.State(wc_dir, {'A/authz' : Item(verb='Sending')}) expected_status.tweak('A/authz', status=' ', wc_rev=3) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, None, wc_dir): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) svntest.actions.run_and_verify_svnauthz(None, None, 1, True, authz_path) Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnlook_tests.py Sun Jun 14 20:58:10 2015 @@ -95,9 +95,7 @@ def test_misc(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # give the repo a new UUID uuid = "01234567-89ab-cdef-89ab-cdef01234567" @@ -234,9 +232,7 @@ def delete_file_in_moved_dir(sbox): ### in order to get this commit working again. svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) exit_code, output, errput = svntest.main.run_svnlook("dirs-changed", repo_dir) @@ -383,9 +379,7 @@ def changed_copy_info(sbox): }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) exit_code, output, errput = svntest.main.run_svnlook("changed", repo_dir) if errput: @@ -481,9 +475,7 @@ def diff_ignore_whitespace(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # Check the output of 'svnlook diff -x --ignore-space-change' on mu. # It should not print anything. @@ -536,9 +528,7 @@ def diff_ignore_eolstyle(sbox): svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status, - None, - wc_dir) + expected_status) # Grab the diff exit_code, expected_output, err = svntest.actions.run_and_verify_svn( @@ -705,7 +695,6 @@ fp.close()""" "Properties on '/A':\n", ' bogus_prop\n', ' svn:log\n', ' svn:author\n', - ' svn:check-locks\n', # internal prop, not really expected ' bogus_rev_prop\n', ' svn:date\n', ' svn:txn-client-compat-version\n', Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnmucc_tests.py Sun Jun 14 20:58:10 2015 @@ -345,7 +345,7 @@ def propset_root_internal(sbox, target): 'propset', 'foo', 'bar', target) svntest.actions.run_and_verify_svn('bar', [], - 'propget', '--strict', 'foo', + 'propget', '--no-newline', 'foo', target) ## propdel on ^/ @@ -355,7 +355,7 @@ def propset_root_internal(sbox, target): target) svntest.actions.run_and_verify_svn([], '.*W200017: Property.*not found', - 'propget', '--strict', 'foo', + 'propget', '--no-newline', 'foo', target) @Issues(3663) @@ -453,6 +453,56 @@ rm A/B/C/Y 'log', '-qvr3', repo_url) +def prohibited_deletes_and_moves(sbox): + "test prohibited delete and move operations" + + # These action sequences were allowed in 1.8.13, but are prohibited in 1.9.x + # and later. Most of them probably indicate an inadvertent user mistake. + # See dev@, 2015-05-11, "Re: Issue 4579 / svnmucc fails to process certain + # deletes", <http://svn.haxx.se/dev/archive-2015-05/0038.shtml> + + sbox.build() + svntest.main.file_write(sbox.ospath('file'), "New contents") + + xtest_svnmucc(sbox.repo_url, + ["svnmucc: E200009: Can't delete node at 'iota'", + ], #--------- + '-m', 'r2: modify and delete /iota', + 'put', sbox.ospath('file'), 'iota', + 'rm', 'iota') + + xtest_svnmucc(sbox.repo_url, + ["svnmucc: E200009: Can't delete node at 'iota'", + ], #--------- + '-m', 'r2: propset and delete /iota', + 'propset', 'prop', 'val', 'iota', + 'rm', 'iota') + + xtest_svnmucc(sbox.repo_url, + ["svnmucc: E160013: Can't delete node at 'iota' as it does " + "not exist", + ], #--------- + '-m', 'r2: delete and delete /iota', + 'rm', 'iota', + 'rm', 'iota') + + # Subversion 1.8.13 used to move /iota without applying the text change. + xtest_svnmucc(sbox.repo_url, + ["svnmucc: E200009: Can't delete node at 'iota'", + ], #--------- + '-m', 'r2: modify and move /iota', + 'put', sbox.ospath('file'), 'iota', + 'mv', 'iota', 'iota2') + + # Subversion 1.8.13 used to move /A without applying the inner remove. + xtest_svnmucc(sbox.repo_url, + ["svnmucc: E200009: Can't delete node at 'A'", + ], #--------- + '-m', 'r2: delete /A/B and move /A', + 'rm', 'A/B', + 'mv', 'A', 'A1') + + ###################################################################### test_list = [ None, @@ -462,6 +512,7 @@ test_list = [ None, too_many_log_messages, no_log_msg_non_interactive, nested_replaces, + prohibited_deletes_and_moves, ] if __name__ == '__main__': Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnrdump_tests.py Sun Jun 14 20:58:10 2015 @@ -571,6 +571,7 @@ def dont_drop_valid_mergeinfo_during_inc dump_fp.close() # Blow away the current repos and create an empty one in its place. + svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve sbox.build(empty=True) # Create the revprop-change hook for this test @@ -606,6 +607,7 @@ def dont_drop_valid_mergeinfo_during_inc # PART 3: Load a full dump to an non-empty repository. # # Reset our sandbox. + svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve sbox.build(empty=True) # Create the revprop-change hook for this test @@ -667,6 +669,7 @@ def dont_drop_valid_mergeinfo_during_inc # PART 4: Load a a series of incremental dumps to an non-empty repository. # # Reset our sandbox. + svntest.main.safe_rmtree(sbox.repo_dir, True) # Fix race with bdb in svnserve sbox.build(empty=True) # Create the revprop-change hook for this test Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnserveautocheck.sh Sun Jun 14 20:58:10 2015 @@ -92,16 +92,19 @@ random_port() { fi } -if type time > /dev/null; then - TIME_CMD=time -else - TIME_CMD="" -fi +if type time > /dev/null ; then TIME_CMD() { time "$@"; } ; else TIME_CMD() { "$@"; } ; fi MAKE=${MAKE:-make} +PATH="$PATH:/usr/sbin/:/usr/local/sbin/" + +ss > /dev/null 2>&1 || netstat > /dev/null 2>&1 || fail "unable to find ss or netstat required to find a free port" SVNSERVE_PORT=$(random_port) -while netstat -an | grep $SVNSERVE_PORT | grep 'LISTEN'; do +while \ + (ss -ltn sport = :$SVNSERVE_PORT 2>&1 | grep :$SVNSERVE_PORT > /dev/null ) \ + || \ + (netstat -an 2>&1 | grep $SVNSERVE_PORT | grep 'LISTEN' > /dev/null ) \ + do SVNSERVE_PORT=$(random_port) done @@ -121,13 +124,13 @@ fi BASE_URL=svn://127.0.0.1:$SVNSERVE_PORT if [ $# = 0 ]; then - $TIME_CMD "$MAKE" check "BASE_URL=$BASE_URL" + TIME_CMD "$MAKE" check "BASE_URL=$BASE_URL" r=$? else cd "$ABS_BUILDDIR/subversion/tests/cmdline/" TEST="$1" shift - $TIME_CMD "./${TEST}_tests.py" "--url=$BASE_URL" $* + TIME_CMD "./${TEST}_tests.py" "--url=$BASE_URL" $* r=$? cd - > /dev/null fi Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_authz_tests.py Sun Jun 14 20:58:10 2015 @@ -30,7 +30,7 @@ import sys, os # Test suite-specific modules -import locale, re, urllib +import locale, re # Our testing module import svntest @@ -383,7 +383,7 @@ def identity_copy(sbox): except: pass if locale.setlocale(locale.LC_ALL) != other_locale: - raise svntest.Skip + raise svntest.Skip('Setting test locale failed') try: run_test(sbox, "copy-bad-encoding.expected.dump", @@ -471,8 +471,7 @@ def copy_delete_unreadable_child(sbox): src_authz + ':/A': '* =', }) - dest_url = svntest.main.file_scheme_prefix \ - + urllib.pathname2url(os.path.abspath(dest_sbox.repo_dir)) + dest_url = dest_sbox.file_protocol_repo_url() run_init(dest_url, sbox.repo_url) run_sync(dest_url) Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svnsync_tests.py Sun Jun 14 20:58:10 2015 @@ -28,7 +28,7 @@ import sys, os # Test suite-specific modules -import re, urllib +import re # Our testing module import svntest @@ -131,16 +131,14 @@ def setup_and_sync(sbox, dump_file_conte repo_url = sbox.repo_url cwd = os.getcwd() if is_src_ra_local: - repo_url = svntest.main.file_scheme_prefix + \ - urllib.pathname2url(os.path.join(cwd, sbox.repo_dir)) + repo_url = sbox.file_protocol_repo_url() if subdir: repo_url = repo_url + subdir dest_repo_url = dest_sbox.repo_url if is_dest_ra_local: - dest_repo_url = svntest.main.file_scheme_prefix + \ - urllib.pathname2url(os.path.join(cwd, dest_sbox.repo_dir)) + dest_repo_url = dest_sbox.file_protocol_repo_url() run_init(dest_repo_url, repo_url, source_prop_encoding) run_sync(dest_repo_url, repo_url, Modified: subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py (original) +++ subversion/branches/fsx-1.10/subversion/tests/cmdline/svntest/actions.py Sun Jun 14 20:58:10 2015 @@ -430,7 +430,7 @@ def run_and_verify_svnsync2(expected_std def load_repo(sbox, dumpfile_path = None, dump_str = None, - bypass_prop_validation = False): + bypass_prop_validation = False,create_wc=True): "Loads the dumpfile into sbox" if not dump_str: dump_str = open(dumpfile_path, "rb").read() @@ -443,7 +443,8 @@ def load_repo(sbox, dumpfile_path = None # Load the mergetracking dumpfile into the repos, and check it out the repo run_and_verify_load(sbox.repo_dir, dump_str.splitlines(True), bypass_prop_validation) - run_and_verify_svn(None, [], "co", sbox.repo_url, sbox.wc_dir) + if create_wc: + run_and_verify_svn(None, [], "co", sbox.repo_url, sbox.wc_dir) return dump_str @@ -480,13 +481,9 @@ def run_and_verify_svnauthz(expected_std # -def run_and_verify_checkout2(do_remove, - URL, wc_dir_name, output_tree, disk_tree, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None, - *args): +def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree, + expected_stderr=[], + *args, **kw): """Checkout the URL into a new directory WC_DIR_NAME. *ARGS are any extra optional args to the checkout subcommand. @@ -503,17 +500,12 @@ def run_and_verify_checkout2(do_remove, if isinstance(output_tree, wc.State): output_tree = output_tree.old_tree() - # Remove dir if it's already there, unless this is a forced checkout. - # In that case assume we want to test a forced checkout's toleration - # of obstructing paths. - if do_remove: - main.safe_rmtree(wc_dir_name) - # Checkout and make a tree of the output, using l:foo/p:bar ### todo: svn should not be prompting for auth info when using ### repositories with no auth/auth requirements - exit_code, output, errput = main.run_svn(None, 'co', - URL, wc_dir_name, *args) + exit_code, output, errput = run_and_verify_svn(None, expected_stderr, + 'co', URL, wc_dir_name, + *args) actual = tree.build_tree_from_checkout(output) # Verify actual output against expected output. @@ -524,32 +516,7 @@ def run_and_verify_checkout2(do_remove, raise if disk_tree: - verify_disk(wc_dir_name, disk_tree, False, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton) - -def run_and_verify_checkout(URL, wc_dir_name, output_tree, disk_tree, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None, - *args): - """Same as run_and_verify_checkout2(), but without the DO_REMOVE arg. - WC_DIR_NAME is deleted if present unless the '--force' option is passed - in *ARGS.""" - - - # Remove dir if it's already there, unless this is a forced checkout. - # In that case assume we want to test a forced checkout's toleration - # of obstructing paths. - return run_and_verify_checkout2(('--force' not in args), - URL, wc_dir_name, output_tree, disk_tree, - singleton_handler_a, - a_baton, - singleton_handler_b, - b_baton, - *args) - + verify_disk(wc_dir_name, disk_tree, False, **kw) def run_and_verify_export(URL, export_dir_name, output_tree, disk_tree, *args): @@ -780,11 +747,8 @@ def verify_update(actual_output, elision_output_tree, disk_tree, status_tree, - singleton_handler_a=None, - a_baton=None, - singleton_handler_b=None, - b_baton=None, - check_props=False): + check_props=False, + extra_files=None): """Verify update of WC_DIR_NAME. The subcommand output (found in ACTUAL_OUTPUT, ACTUAL_MERGEINFO_OUTPUT, @@ -847,8 +811,7 @@ def verify_update(actual_output, # Create a tree by scanning the working copy, and verify it if disk_tree: verify_disk(wc_dir_name, disk_tree, check_props, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton) + extra_files=extra_files) # Verify via 'status' command too, if possible. if status_tree: @@ -856,12 +819,22 @@ def verify_update(actual_output, def verify_disk(wc_dir_name, disk_tree, check_props=False, - singleton_handler_a = None, a_baton = None, - singleton_handler_b = None, b_baton = None): + extra_files=None): """Verify WC_DIR_NAME against DISK_TREE. If CHECK_PROPS is set, the comparison will examin props. Returns if successful, raises on failure.""" + singleton_handler_a = None + a_baton = None, + singleton_handler_b = None + b_baton = None + done_a = None + + if extra_files: + singleton_handler_a = svntest.tree.detect_conflict_files + done_a = svntest.tree.detect_conflict_files_done + a_baton = extra_files + if isinstance(disk_tree, wc.State): disk_tree = disk_tree.old_tree() @@ -875,18 +848,15 @@ def verify_disk(wc_dir_name, disk_tree, _log_tree_state("ACTUAL DISK TREE:", actual_disk) raise - + if done_a: + done_a(a_baton) def run_and_verify_update(wc_dir_name, output_tree, disk_tree, status_tree, - error_re_string = None, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None, + expected_stderr=[], check_props = False, - *args): + *args, **kw): """Update WC_DIR_NAME. *ARGS are any extra optional args to the update subcommand. NOTE: If *ARGS is specified at all, explicit @@ -904,38 +874,20 @@ def run_and_verify_update(wc_dir_name, None, the 'svn status' output will be verified against STATUS_TREE. (This is a good way to check that revision numbers were bumped.) - For the DISK_TREE verification, SINGLETON_HANDLER_A and - SINGLETON_HANDLER_B will be passed to tree.compare_trees -- see that - function's doc string for more details. - If CHECK_PROPS is set, then disk comparison will examine props. Return if successful, raise on failure.""" # Update and make a tree of the output. - if len(args): - exit_code, output, errput = main.run_svn(error_re_string, 'up', *args) - else: - exit_code, output, errput = main.run_svn(error_re_string, - 'up', wc_dir_name, - *args) + if len(args) == 0: + args = (wc_dir_name,) - if error_re_string: - rm = re.compile(error_re_string) - match = None - for line in errput: - match = rm.search(line) - if match: - break - if not match: - raise main.SVNUnmatchedError + exit_code, output, errput = run_and_verify_svn(None, expected_stderr, 'up', *args) actual = wc.State.from_checkout(output) verify_update(actual, None, None, wc_dir_name, output_tree, None, None, disk_tree, status_tree, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton, - check_props) + check_props, **kw) def run_and_parse_info(*args): @@ -1019,19 +971,20 @@ def run_and_verify_info(expected_infos, for actual, expected in zip(actual_infos, expected_infos): # compare dicts + path = actual['Path'] for key, value in expected.items(): assert ':' not in key # caller passed impossible expectations? if value is None and key in actual: - raise main.SVNLineUnequal("Found unexpected key '%s' with value '%s'" - % (key, actual[key])) + raise main.SVNLineUnequal("On '%s': Found unexpected key '%s'\n Value '%s'" + % (path, key, actual[key])) if value is not None and key not in actual: - raise main.SVNLineUnequal("Expected key '%s' (with value '%s') " - "not found" % (key, value)) + raise main.SVNLineUnequal("On '%s': Expected key '%s' not found\n Expected value '%s'" + % (path, key, value)) if value is not None and not re.match(value, actual[key]): - raise verify.SVNUnexpectedStdout("Values of key '%s' don't match:\n" + raise verify.SVNUnexpectedStdout("On '%s': Values of key '%s' don't match:\n" " Expected: '%s' (regex)\n" " Found: '%s' (string)\n" - % (key, value, actual[key])) + % (path, key, value, actual[key])) except: sys.stderr.write("Bad 'svn info' output:\n" @@ -1045,25 +998,16 @@ def run_and_verify_merge(dir, rev1, rev2 mergeinfo_output_tree, elision_output_tree, disk_tree, status_tree, skip_tree, - error_re_string = None, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None, + expected_stderr = [], check_props = False, dry_run = True, - *args): + *args, **kw): """Run 'svn merge URL1@REV1 URL2@REV2 DIR' if URL2 is not None (for a three-way merge between URLs and WC). If URL2 is None, run 'svn merge -rREV1:REV2 URL1 DIR'. If both REV1 and REV2 are None, leave off the '-r' argument. - If ERROR_RE_STRING, the merge must exit with error, and the error - message must match regular expression ERROR_RE_STRING. - - Else if ERROR_RE_STRING is None, then: - The subcommand output will be verified against OUTPUT_TREE. Output related to mergeinfo notifications will be verified against MERGEINFO_OUTPUT_TREE if that is not None. Output related to mergeinfo @@ -1103,8 +1047,8 @@ def run_and_verify_merge(dir, rev1, rev2 pre_disk = tree.build_tree_from_wc(dir) dry_run_command = merge_command + ('--dry-run',) dry_run_command = dry_run_command + args - exit_code, out_dry, err_dry = main.run_svn(error_re_string, - *dry_run_command) + exit_code, out_dry, err_dry = run_and_verify_svn(None, expected_stderr, + *dry_run_command) post_disk = tree.build_tree_from_wc(dir) try: tree.compare_trees("disk", post_disk, pre_disk) @@ -1117,16 +1061,7 @@ def run_and_verify_merge(dir, rev1, rev2 # Update and make a tree of the output. merge_command = merge_command + args - exit_code, out, err = main.run_svn(error_re_string, *merge_command) - - if error_re_string: - if not error_re_string.startswith(".*"): - error_re_string = ".*(" + error_re_string + ")" - expected_err = verify.RegexOutput(error_re_string, match_all=False) - verify.verify_outputs(None, None, err, None, expected_err) - return - elif err: - raise verify.SVNUnexpectedStderr(err) + exit_code, out, err = run_and_verify_svn(None, expected_stderr, *merge_command) # Split the output into that related to application of the actual diff # and that related to the recording of mergeinfo describing the merge. @@ -1215,9 +1150,7 @@ def run_and_verify_merge(dir, rev1, rev2 verify_update(actual_diff, actual_mergeinfo, actual_elision, dir, output_tree, mergeinfo_output_tree, elision_output_tree, disk_tree, status_tree, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton, - check_props) + check_props, **kw) def run_and_verify_patch(dir, patch_path, @@ -1225,7 +1158,7 @@ def run_and_verify_patch(dir, patch_path error_re_string=None, check_props=False, dry_run=True, - *args): + *args, **kw): """Run 'svn patch patch_path DIR'. If ERROR_RE_STRING, 'svn patch' must exit with error, and the error @@ -1317,7 +1250,7 @@ def run_and_verify_patch(dir, patch_path verify_update(mytree, None, None, dir, output_tree, None, None, disk_tree, status_tree, - check_props=check_props) + check_props=check_props, **kw) def run_and_verify_mergeinfo(error_re_string = None, @@ -1360,54 +1293,31 @@ def run_and_verify_switch(wc_dir_name, wc_target, switch_url, output_tree, disk_tree, status_tree, - error_re_string = None, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None, + expected_stderr = [], check_props = False, - *args): + *args, **kw): """Switch WC_TARGET (in working copy dir WC_DIR_NAME) to SWITCH_URL. - If ERROR_RE_STRING, the switch must exit with error, and the error - message must match regular expression ERROR_RE_STRING. - - Else if ERROR_RE_STRING is None, then: - The subcommand output will be verified against OUTPUT_TREE, and the working copy itself will be verified against DISK_TREE. If optional STATUS_TREE is given, then 'svn status' output will be compared. (This is a good way to check that revision numbers were bumped.) - For the DISK_TREE verification, SINGLETON_HANDLER_A and - SINGLETON_HANDLER_B will be passed to tree.compare_trees -- see that - function's doc string for more details. - If CHECK_PROPS is set, then disk comparison will examine props. Return if successful, raise on failure.""" # Update and make a tree of the output. - exit_code, output, errput = main.run_svn(error_re_string, 'switch', - switch_url, wc_target, *args) - - if error_re_string: - if not error_re_string.startswith(".*"): - error_re_string = ".*(" + error_re_string + ")" - expected_err = verify.RegexOutput(error_re_string, match_all=False) - verify.verify_outputs(None, None, errput, None, expected_err) - elif errput: - raise verify.SVNUnexpectedStderr(err) - + exit_code, output, errput = run_and_verify_svn(None, expected_stderr, + 'switch', switch_url, + wc_target, *args) actual = wc.State.from_checkout(output) verify_update(actual, None, None, wc_dir_name, output_tree, None, None, disk_tree, status_tree, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton, - check_props) + check_props, **kw) def process_output_for_commit(output, error_re_string): """Helper for run_and_verify_commit(), also used in the factory.""" @@ -1455,7 +1365,7 @@ def process_output_for_commit(output, er def run_and_verify_commit(wc_dir_name, output_tree, status_tree, - error_re_string = None, + expected_stderr=[], *args): """Commit and verify results within working copy WC_DIR_NAME, sending ARGS to the commit subcommand. @@ -1465,9 +1375,7 @@ def run_and_verify_commit(wc_dir_name, o be compared. (This is a good way to check that revision numbers were bumped.) - If ERROR_RE_STRING is None, the commit must not exit with error. If - ERROR_RE_STRING is a string, the commit must exit with error, and - the error message must match regular expression ERROR_RE_STRING. + EXPECTED_STDERR is handled as in run_and_verify_svn() Return if successful, raise on failure.""" @@ -1475,21 +1383,15 @@ def run_and_verify_commit(wc_dir_name, o output_tree = output_tree.old_tree() # Commit. + if len(args) == 0: + args = (wc_dir_name,) if '-m' not in args and '-F' not in args: args = list(args) + ['-m', 'log msg'] - exit_code, output, errput = main.run_svn(error_re_string, 'ci', - *args) - - if error_re_string: - if not error_re_string.startswith(".*"): - error_re_string = ".*(" + error_re_string + ")" - expected_err = verify.RegexOutput(error_re_string, match_all=False) - verify.verify_outputs(None, None, errput, None, expected_err) - - # Else not expecting error: + exit_code, output, errput = run_and_verify_svn(None, expected_stderr, + 'ci', *args) # Convert the output into a tree. - output = process_output_for_commit(output, error_re_string) + output = process_output_for_commit(output, expected_stderr) actual = tree.build_tree_from_commit(output) # Verify actual output against expected output. @@ -1509,53 +1411,43 @@ def run_and_verify_commit(wc_dir_name, o # This function always passes '-q' to the status command, which # suppresses the printing of any unversioned or nonexistent items. -def run_and_verify_status(wc_dir_name, status_tree, - singleton_handler_a = None, - a_baton = None, - singleton_handler_b = None, - b_baton = None): +def run_and_verify_status(wc_dir_name, status_tree, no_entries=False): """Run 'status' on WC_DIR_NAME and compare it with the - expected STATUS_TREE. SINGLETON_HANDLER_A and SINGLETON_HANDLER_B will - be passed to tree.compare_trees - see that function's doc string for - more details. + expected STATUS_TREE. Returns on success, raises on failure.""" + if not isinstance(status_tree, wc.State): + raise TypeError('wc.State tree expected') + exit_code, output, errput = main.run_svn(None, 'status', '-v', '-u', '-q', wc_dir_name) - actual_status = svntest.wc.State.from_status(output) + actual_status = svntest.wc.State.from_status(output, wc_dir=wc_dir_name) # Verify actual output against expected output. - if isinstance(status_tree, wc.State): - try: - status_tree.compare_and_display('status', actual_status) - except tree.SVNTreeError: - _log_tree_state("ACTUAL STATUS TREE:", actual_status.old_tree(), - wc_dir_name) - raise - else: - actual_status = actual_status.old_tree() - try: - tree.compare_trees("status", actual_status, status_tree, - singleton_handler_a, a_baton, - singleton_handler_b, b_baton) - except tree.SVNTreeError: - verify.display_trees(None, 'STATUS OUTPUT TREE', status_tree, actual_status) - _log_tree_state("ACTUAL STATUS TREE:", actual_status, wc_dir_name) - raise + try: + status_tree.compare_and_display('status', actual_status) + except tree.SVNTreeError: + _log_tree_state("ACTUAL STATUS TREE:", actual_status.old_tree(), + wc_dir_name) + raise + + if no_entries: + return # if we have an output State, and we can/are-allowed to create an # entries-based State, then compare the two. - if isinstance(status_tree, wc.State): - actual_entries = wc.State.from_entries(wc_dir_name) - if actual_entries: - tweaked = status_tree.copy() - tweaked.tweak_for_entries_compare() - try: - tweaked.compare_and_display('entries', actual_entries) - except tree.SVNTreeUnequal: - ### do something more - raise + actual_entries = wc.State.from_entries(wc_dir_name) + if actual_entries: + tweaked = status_tree.copy() + tweaked.tweak_for_entries_compare() + try: + tweaked.compare_and_display('entries', actual_entries) + except tree.SVNTreeUnequal: + ### do something more + _log_tree_state("ACTUAL ENTRY TREE:", actual_entries.old_tree(), + wc_dir_name) + raise # A variant of previous func, but doesn't pass '-q'. This allows us @@ -1565,27 +1457,21 @@ def run_and_verify_unquiet_status(wc_dir expected STATUS_TREE. Returns on success, raises on failure.""" + if not isinstance(status_tree, wc.State): + raise TypeError('wc.State tree expected') + exit_code, output, errput = main.run_svn(None, 'status', '-v', '-u', wc_dir_name) - actual_status = svntest.wc.State.from_status(output) + actual_status = svntest.wc.State.from_status(output, wc_dir=wc_dir_name) # Verify actual output against expected output. - if isinstance(status_tree, wc.State): - try: - status_tree.compare_and_display('unquiet status', actual_status) - except tree.SVNTreeError: - _log_tree_state("ACTUAL STATUS TREE:", - actual_status.normalize().old_tree(), wc_dir_name) - raise - else: - actual_status = actual_status.old_tree() - try: - tree.compare_trees("UNQUIET STATUS", actual_status, status_tree) - except tree.SVNTreeError: - _log_tree_state("ACTUAL UNQUIET STATUS TREE:", actual_status, - wc_dir_name) - raise + try: + status_tree.compare_and_display('unquiet status', actual_status) + except tree.SVNTreeError: + _log_tree_state("ACTUAL STATUS TREE:", + actual_status.normalize().old_tree(), wc_dir_name) + raise def run_and_verify_status_xml(expected_entries = [], *args): @@ -2165,7 +2051,7 @@ def inject_conflict_into_wc(sbox, state_ if expected_status: expected_status.tweak(state_path, wc_rev=merged_rev) run_and_verify_commit(wc_dir, expected_output, expected_status, - None, file_path) + [], file_path) # Backdate the file. exit_code, output, errput = main.run_svn(None, "up", "-r", str(prev_rev), @@ -2209,13 +2095,15 @@ def inject_conflict_into_expected_state( if expected_status: expected_status.tweak(state_path, status='C ') -def make_conflict_marker_text(wc_text, merged_text, prev_rev, merged_rev): +def make_conflict_marker_text(wc_text, merged_text, prev_rev, merged_rev, + old_text=''): """Return the conflict marker text described by WC_TEXT (the current text in the working copy, MERGED_TEXT (the conflicting text merged in), and MERGED_REV (the revision from whence the conflicting text came).""" return "<<<<<<< .working\n" + wc_text + \ - "||||||| .merge-left.r" + str(prev_rev) + "\n=======\n" + \ + "||||||| .merge-left.r" + str(prev_rev) + '\n' + \ + old_text + "=======\n" + \ merged_text + ">>>>>>> .merge-right.r" + str(merged_rev) + "\n" @@ -2267,7 +2155,7 @@ def build_greek_tree_conflicts(sbox): expected_status = get_virginal_state(wc_dir, 1) expected_status.tweak('A/D/G/pi', wc_rev='2') expected_status.remove('A/D/G/rho', 'A/D/G/tau') - run_and_verify_commit(wc_dir, expected_output, expected_status, None, + run_and_verify_commit(wc_dir, expected_output, expected_status, [], '-m', 'Incoming changes.', wc_dir ) # Update back to the pristine state ("time-warp"). @@ -2279,7 +2167,7 @@ def build_greek_tree_conflicts(sbox): expected_disk = main.greek_state expected_status = get_virginal_state(wc_dir, 1) run_and_verify_update(wc_dir, expected_output, expected_disk, - expected_status, None, None, None, None, None, False, + expected_status, [], False, '-r', '1', wc_dir) # Make local changes
