Modified: subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/merge_tree_conflict_tests.py Tue Jan 8 23:46:00 2013 @@ -765,7 +765,7 @@ def tree_conflicts_and_obstructions(sbox 'beta' : Item(status=' ', wc_rev=3), }) expected_skip = wc.State(branch_path, { - 'alpha-moved' : Item(), + 'alpha-moved' : Item(verb='Skipped'), }) svntest.actions.run_and_verify_merge(branch_path, @@ -1313,16 +1313,16 @@ def tree_conflicts_merge_edit_onto_missi }) expected_skip = svntest.wc.State('', { - 'F/alpha' : Item(), + 'F/alpha' : Item(verb='Skipped missing target'), # Obstruction handling improvements in 1.7 and 1.8 added - 'DF/D1/beta' : Item(), - 'DDD/D1/D2/D3/zeta' : Item(), - 'DDD/D1/D2/D3' : Item(), - 'DDF/D1/D2/gamma' : Item(), - 'D/D1/delta' : Item(), - 'D/D1' : Item(), - 'DD/D1/D2/epsilon' : Item(), - 'DD/D1/D2' : Item(), + 'DF/D1/beta' : Item(verb='Skipped missing target'), + 'DDD/D1/D2/D3/zeta' : Item(verb='Skipped'), + 'DDD/D1/D2/D3' : Item(verb='Skipped missing target'), + 'DDF/D1/D2/gamma' : Item(verb='Skipped missing target'), + 'D/D1/delta' : Item(verb='Skipped'), + 'D/D1' : Item(verb='Skipped missing target'), + 'DD/D1/D2/epsilon' : Item(verb='Skipped'), + 'DD/D1/D2' : Item(verb='Skipped missing target'), }) # Currently this test fails because some parts of the merge @@ -1385,14 +1385,14 @@ def tree_conflicts_merge_del_onto_missin }) expected_skip = svntest.wc.State('', { - 'F/alpha' : Item(), - 'D/D1' : Item(), + 'F/alpha' : Item(verb='Skipped missing target'), + 'D/D1' : Item(verb='Skipped missing target'), # Obstruction handling improvements in 1.7 and 1.8 added - 'D/D1' : Item(), - 'DD/D1/D2' : Item(), - 'DF/D1/beta' : Item(), - 'DDD/D1/D2/D3' : Item(), - 'DDF/D1/D2/gamma' : Item(), + 'D/D1' : Item(verb='Skipped missing target'), + 'DD/D1/D2' : Item(verb='Skipped missing target'), + 'DF/D1/beta' : Item(verb='Skipped missing target'), + 'DDD/D1/D2/D3' : Item(verb='Skipped missing target'), + 'DDF/D1/D2/gamma' : Item(verb='Skipped missing target'), }) svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py Tue Jan 8 23:46:00 2013 @@ -278,7 +278,7 @@ def patch_absolute_paths(sbox): expected_status.tweak('A/B/E/alpha', status='M ') expected_skip = wc.State('', { - lambda_path: Item(), + lambda_path: Item(verb='Skipped missing target'), }) svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path), @@ -1012,9 +1012,11 @@ def patch_add_new_dir(sbox): 'A/C' : Item(status='D ', wc_rev=1), }) - expected_skip = wc.State('', {A_Z_new_path : Item(), - A_B_E_Y_new_path : Item(), - A_C_new_path : Item()}) + expected_skip = wc.State( + '', + {A_Z_new_path : Item(verb='Skipped missing target'), + A_B_E_Y_new_path : Item(verb='Skipped missing target'), + A_C_new_path : Item(verb='Skipped missing target')}) svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), @@ -2452,7 +2454,7 @@ def patch_same_twice(sbox): ' Skipped paths: 1\n', ] - expected_skip = wc.State('', {beta_path : Item()}) + expected_skip = wc.State('', {beta_path : Item(verb='Skipped')}) # See above comment about the iota patch being applied twice. iota_contents += "Some more bytes\n" @@ -3973,7 +3975,9 @@ def patch_delete_and_skip(sbox): expected_status.tweak('A/B/E/alpha', status='D ') expected_status.tweak('A/B/E/beta', status='D ') - expected_skip = wc.State('', {skipped_path: Item()}) + expected_skip = wc.State( + '', + {skipped_path: Item(verb='Skipped missing target')}) svntest.actions.run_and_verify_patch('.', os.path.abspath(patch_file_path), expected_output, Modified: subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py Tue Jan 8 23:46:00 2013 @@ -1740,11 +1740,11 @@ def status_with_tree_conflicts(sbox): # check status of G expected = svntest.verify.UnorderedOutput( ["A + C %s\n" % rho, - " > local edit, incoming delete upon update\n", + " > local file edit, incoming file delete upon update\n", "D C %s\n" % pi, - " > local delete, incoming edit upon update\n", + " > local file delete, incoming file edit upon update\n", "! C %s\n" % tau, - " > local delete, incoming delete upon update\n", + " > local file delete, incoming file delete upon update\n", "Summary of conflicts:\n", " Tree conflicts: 3\n", ]) @@ -1758,11 +1758,11 @@ def status_with_tree_conflicts(sbox): expected = svntest.verify.UnorderedOutput( [" 2 2 jrandom %s\n" % G, "D C 2 2 jrandom %s\n" % pi, - " > local delete, incoming edit upon update\n", + " > local file delete, incoming file edit upon update\n", "A + C - 1 jrandom %s\n" % rho, - " > local edit, incoming delete upon update\n", + " > local file edit, incoming file delete upon update\n", "! C %s\n" % tau, - " > local delete, incoming delete upon update\n", + " > local file delete, incoming file delete upon update\n", "Summary of conflicts:\n", " Tree conflicts: 3\n", ]) Modified: subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/svntest/wc.py Tue Jan 8 23:46:00 2013 @@ -94,7 +94,7 @@ _re_parse_status = re.compile('^([?!MACD '((?P<wc_rev>\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?' '(?P<path>.+)$') -_re_parse_skipped = re.compile("^Skipped[^']* '(.+)'( --.*)?\n") +_re_parse_skipped = re.compile("^(Skipped[^']*) '(.+)'( --.*)?\n") _re_parse_summarize = re.compile("^([MAD ][M ]) (.+)\n") @@ -444,7 +444,8 @@ class State: match = _re_parse_skipped.search(line) if match: - desc[to_relpath(match.group(1))] = StateItem() + desc[to_relpath(match.group(2))] = StateItem( + verb=(match.group(1).strip(':'))) return cls('', desc) Modified: subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/switch_tests.py Tue Jan 8 23:46:00 2013 @@ -891,7 +891,7 @@ def obstructed_switch(sbox): # svn info A/B/E/alpha expected_stdout = verify.RegexOutput( - ".*local unversioned, incoming add upon switch", + ".*local file unversioned, incoming file add upon switch", match_all=False) actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info', A_B_E_alpha) @@ -1285,7 +1285,7 @@ def forced_switch_failures(sbox): # svn info A/B/F/pi expected_stdout = verify.ExpectedOutput( - 'Tree conflict: local unversioned, incoming add upon switch\n', + 'Tree conflict: local file unversioned, incoming file add upon switch\n', match_all=False) actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info', @@ -2349,37 +2349,37 @@ def tree_conflicts_on_switch_1_1(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local file delete, incoming file edit upon switch' + ' Source left: .file.*/F/alpha@2' + ' Source right: .file.*/F/alpha@3$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .dir.*/DF/D1@3$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .dir.*/DDF/D1@3$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/D/D1@2' + ' Source right: .dir.*/D/D1@3$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .dir.*/DD/D1@3$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .dir.*/DDD/D1@3$', }, @@ -2447,37 +2447,37 @@ def tree_conflicts_on_switch_1_2(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local file delete, incoming file delete upon switch' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .dir.*/DF/D1@3$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .dir.*/DDF/D1@3$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .dir.*/DD/D1@3$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon switch' + '^local dir delete, incoming dir edit upon switch' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .dir.*/DDD/D1@3$', }, @@ -2530,37 +2530,37 @@ def tree_conflicts_on_switch_2_1(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local file edit, incoming file delete upon switch' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local dir edit, incoming dir delete upon switch' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local dir edit, incoming dir delete upon switch' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local dir edit, incoming dir delete upon switch' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local dir edit, incoming dir delete upon switch' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon switch' + '^local dir edit, incoming dir delete upon switch' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, @@ -2629,37 +2629,37 @@ def tree_conflicts_on_switch_2_2(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local file delete, incoming file delete upon switch' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, @@ -2718,37 +2718,37 @@ def tree_conflicts_on_switch_3(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local file delete, incoming file delete upon switch' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon switch' + '^local dir delete, incoming dir delete upon switch' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, Modified: subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/tree_conflict_tests.py Tue Jan 8 23:46:00 2013 @@ -1223,7 +1223,7 @@ def actual_only_node_behaviour(sbox): # info expected_info = { - 'Tree conflict': 'local missing, incoming edit upon merge.*', + 'Tree conflict': 'local file missing, incoming file edit upon merge.*', 'Name': 'foo', 'Schedule': 'normal', 'Node Kind': 'none', Modified: subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/update_tests.py Tue Jan 8 23:46:00 2013 @@ -4243,37 +4243,37 @@ def tree_conflicts_on_update_1_1(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local file delete, incoming file edit upon update' + ' Source left: .file.*/F/alpha@2' + ' Source right: .file.*/F/alpha@3$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .dir.*/DF/D1@3$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .dir.*/DDF/D1@3$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/D/D1@2' + ' Source right: .dir.*/D/D1@3$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .dir.*/DD/D1@3$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .dir.*/DDD/D1@3$', }, @@ -4340,37 +4340,37 @@ def tree_conflicts_on_update_1_2(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local file delete, incoming file delete upon update' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .dir.*/DF/D1@3$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .dir.*/DDF/D1@3$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .dir.*/DD/D1@3$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming edit upon update' + '^local dir delete, incoming dir edit upon update' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .dir.*/DDD/D1@3$', }, @@ -4423,37 +4423,37 @@ def tree_conflicts_on_update_2_1(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local file edit, incoming file delete upon update' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local dir edit, incoming dir delete upon update' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local dir edit, incoming dir delete upon update' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local dir edit, incoming dir delete upon update' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local dir edit, incoming dir delete upon update' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local edit, incoming delete upon update' + '^local dir edit, incoming dir delete upon update' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, @@ -4531,37 +4531,37 @@ def tree_conflicts_on_update_2_2(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local file delete, incoming file delete upon update' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, @@ -4693,37 +4693,37 @@ def tree_conflicts_on_update_3(sbox): expected_info = { 'F/alpha' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local file delete, incoming file delete upon update' + ' Source left: .file.*/F/alpha@2' + ' Source right: .none.*(/F/alpha@3)?$', }, 'DF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DF/D1@2' + ' Source right: .none.*(/DF/D1@3)?$', }, 'DDF/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DDF/D1@2' + ' Source right: .none.*(/DDF/D1@3)?$', }, 'D/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/D/D1@2' + ' Source right: .none.*(/D/D1@3)?$', }, 'DD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DD/D1@2' + ' Source right: .none.*(/DD/D1@3)?$', }, 'DDD/D1' : { 'Tree conflict' : - '^local delete, incoming delete upon update' + '^local dir delete, incoming dir delete upon update' + ' Source left: .dir.*/DDD/D1@2' + ' Source right: .none.*(/DDD/D1@3)?$', }, @@ -5599,7 +5599,6 @@ def update_moved_dir_dir_add(sbox): }) svntest.actions.run_and_verify_status(wc_dir, expected_status) -@XFail() @Issue(4037) def update_moved_dir_file_move(sbox): "update locally moved dir with incoming file move" @@ -5612,15 +5611,13 @@ def update_moved_dir_file_move(sbox): svntest.main.run_svn(False, 'update', '-r', '1', wc_dir) sbox.simple_move("A/B/E", "A/B/E2") - # The incoming move should auto-merge such that A/B/F/alpha appears - # as moved to A/B/E2/alpha -- this strategy prefers the local user's - # change as the solution to the conflict. - # ### Ideally, the user should be offered a set of alternative solutions. - # ### E.g. the user might prefer if A/B/E2/alpha disappeared and A/B/E/alpha - # ### appeared as moved to A/B/F/alpha. But the --accept option does not yet - # ### support tree conflicts. + # The incoming "move" creates a tree-conflict as an incoming change + # in a local move. We don't yet track moves on the server so we + # don't recognise the incoming change as a move. expected_output = svntest.wc.State(wc_dir, { - 'A/B/E2/alpha' : Item(status='A '), + 'A/B/E' : Item(status=' ', treeconflict='C'), + 'A/B/E/alpha' : Item(status=' ', treeconflict='D'), + 'A/B/F/alpha' : Item(status='A '), }) expected_disk = svntest.main.greek_state.copy() expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E') @@ -5628,13 +5625,16 @@ def update_moved_dir_file_move(sbox): 'A/B/E2' : Item(), 'A/B/E2/alpha' : Item(contents="This is the file 'alpha'.\n"), 'A/B/E2/beta' : Item(contents="This is the file 'beta'.\n"), + 'A/B/F/alpha' : Item(contents="This is the file 'alpha'.\n"), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 2) - expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ') + expected_status.remove('A/B/E/alpha') + expected_status.tweak('A/B/E', status='D ', treeconflict='C') + expected_status.tweak('A/B/E/beta', status='D ') expected_status.add({ - 'A/B/F/alpha' : Item(status='D '), + 'A/B/F/alpha' : Item(status=' ', wc_rev='2'), 'A/B/E2' : Item(status='A ', copied='+', wc_rev='-'), - 'A/B/E2/alpha' : Item(status='A ', copied='+', wc_rev='-'), + 'A/B/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'), 'A/B/E2/beta' : Item(status=' ', copied='+', wc_rev='-'), }) svntest.actions.run_and_verify_update(wc_dir, @@ -5644,6 +5644,20 @@ def update_moved_dir_file_move(sbox): None, None, None, None, None, 1) + # The incoming change is a delete as we don't yet track server-side + # moves. Resolving the tree-conflict as "mine-conflict" applies the + # delete to the move destination. This is effectively accepting the + # move from the server. + svntest.actions.run_and_verify_svn("resolve failed", None, [], + 'resolve', + '--recursive', + '--accept=mine-conflict', wc_dir) + + expected_status.tweak('A/B/E', treeconflict=None) + expected_status.remove('A/B/E2/alpha') + svntest.actions.run_and_verify_status(wc_dir, expected_status) + + @XFail() @Issue(3144,3630) def update_move_text_mod(sbox): Modified: subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py (original) +++ subversion/branches/ev2-export/subversion/tests/cmdline/wc_tests.py Tue Jan 8 23:46:00 2013 @@ -25,6 +25,7 @@ ###################################################################### # General modules +from __future__ import with_statement import shutil, stat, re, os, logging logger = logging.getLogger() @@ -117,6 +118,78 @@ def add_with_symlink_in_path(sbox): sbox.simple_append('A/B/kappa', 'xyz', True) sbox.simple_add('Z/B/kappa') +@Issue(4118) +@SkipUnless(svntest.main.is_posix_os) +def status_with_inaccessible_wc_db(sbox): + """inaccessible .svn/wc.db""" + + sbox.build(read_only = True) + os.chmod(sbox.ospath(".svn/wc.db"), 0) + svntest.actions.run_and_verify_svn( + "Status when wc.db is not accessible", None, + r"[^ ]+ E155016: The working copy database at '.*' is corrupt", + "st", sbox.wc_dir) + +@Issue(4118) +def status_with_corrupt_wc_db(sbox): + """corrupt .svn/wc.db""" + + sbox.build(read_only = True) + with open(sbox.ospath(".svn/wc.db"), 'wb') as fd: + fd.write('\0' * 17) + svntest.actions.run_and_verify_svn( + "Status when wc.db is corrupt", None, + r"[^ ]+ E155016: The working copy database at '.*' is corrupt", + "st", sbox.wc_dir) + +@Issue(4118) +def status_with_zero_length_wc_db(sbox): + """zero-length .svn/wc.db""" + + sbox.build(read_only = True) + os.close(os.open(sbox.ospath(".svn/wc.db"), os.O_RDWR | os.O_TRUNC)) + svntest.actions.run_and_verify_svn( + "Status when wc.db has zero length", None, + r"[^ ]+ E200030:", # SVN_ERR_SQLITE_ERROR + "st", sbox.wc_dir) + +@Issue(4118) +def status_without_wc_db(sbox): + """missing .svn/wc.db""" + + sbox.build(read_only = True) + os.remove(sbox.ospath(".svn/wc.db")) + svntest.actions.run_and_verify_svn( + "Status when wc.db is missing", None, + r"[^ ]+ E155016: The working copy database at '.*' is missing", + "st", sbox.wc_dir) + +@Issue(4118) +@Skip() # FIXME: Test fails in-tree because it finds the source WC root +def status_without_wc_db_and_entries(sbox): + """missing .svn/wc.db and .svn/entries""" + + sbox.build(read_only = True) + os.remove(sbox.ospath(".svn/wc.db")) + os.remove(sbox.ospath(".svn/entries")) + svntest.actions.run_and_verify_svn2( + "Status when wc.db and entries are missing", None, + r"[^ ]+ warning: W155007: '.*' is not a working copy", + 0, "st", sbox.wc_dir) + +@Issue(4118) +def status_with_missing_wc_db_and_maybe_valid_entries(sbox): + """missing .svn/wc.db, maybe valid .svn/entries""" + + sbox.build(read_only = True) + with open(sbox.ospath(".svn/entries"), 'ab') as fd: + fd.write('something\n') + os.remove(sbox.ospath(".svn/wc.db")) + svntest.actions.run_and_verify_svn( + "Status when wc.db is missing and .svn/entries might be valid", None, + r"[^ ]+ E155036:", # SVN_ERR_WC_UPGRADE_REQUIRED + "st", sbox.wc_dir) + ######################################################################## # Run the tests @@ -129,6 +202,12 @@ test_list = [ None, add_through_unversioned_symlink, add_through_versioned_symlink, add_with_symlink_in_path, + status_with_inaccessible_wc_db, + status_with_corrupt_wc_db, + status_with_zero_length_wc_db, + status_without_wc_db, + status_without_wc_db_and_entries, + status_with_missing_wc_db_and_maybe_valid_entries, ] if __name__ == '__main__': Modified: subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c (original) +++ subversion/branches/ev2-export/subversion/tests/libsvn_diff/diff-diff3-test.c Tue Jan 8 23:46:00 2013 @@ -2563,6 +2563,60 @@ test_identical_suffix(apr_pool_t *pool) #undef ORIGINAL_CONTENTS_PATTERN #undef INSERTED_LINE +/* The magic number used in this test, 1<<17, is + CHUNK_SIZE from ../../libsvn_diff/diff_file.c + */ +static svn_error_t * +test_token_compare(apr_pool_t *pool) +{ + apr_size_t chunk_size = 1 << 17; + const char *pattern = "\n\n\n\n\n\n\n\n"; + svn_stringbuf_t *original, *modified; + svn_diff_file_options_t *diff_opts = svn_diff_file_options_create(pool); + + diff_opts->ignore_space = svn_diff_file_ignore_space_all; + + original = svn_stringbuf_create_ensure(chunk_size, pool); + while (original->len < chunk_size - 8) + { + svn_stringbuf_appendcstr(original, pattern); + } + svn_stringbuf_appendcstr(original, " @@@\n"); + + modified = svn_stringbuf_create_ensure(chunk_size, pool); + while (modified->len < chunk_size - 8) + { + svn_stringbuf_appendcstr(modified, pattern); + } + svn_stringbuf_appendcstr(modified, " @@@\n"); + + /* regression test for reading exceeding the file size */ + SVN_ERR(two_way_diff("token-compare-original1", "token-compare-modified1", + original->data, modified->data, "", + diff_opts, pool)); + + svn_stringbuf_appendcstr(original, "aaaaaaa\n"); + svn_stringbuf_appendcstr(modified, "bbbbbbb\n"); + + /* regression test for comparison beyond the end-of-line */ + SVN_ERR(two_way_diff("token-compare-original2", "token-compare-modified2", + original->data, modified->data, + apr_psprintf(pool, + "--- token-compare-original2" NL + "+++ token-compare-modified2" NL + "@@ -%u,4 +%u,4 @@" NL + " \n" + " \n" + " @@@\n" + "-aaaaaaa\n" + "+bbbbbbb\n", + 1 +(unsigned int)chunk_size - 8 + 1 - 3, + 1 +(unsigned int)chunk_size - 8 + 1 - 3), + diff_opts, pool)); + + return SVN_NO_ERROR; +} + /* ========================================================================== */ struct svn_test_descriptor_t test_funcs[] = @@ -2596,5 +2650,7 @@ struct svn_test_descriptor_t test_funcs[ "offset of the normalized token"), SVN_TEST_PASS2(test_identical_suffix, "identical suffix starts at the boundary of a chunk"), + SVN_TEST_PASS2(test_token_compare, + "compare tokes at the chunk boundary"), SVN_TEST_NULL }; Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c (original) +++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/conflict-data-test.c Tue Jan 8 23:46:00 2013 @@ -337,6 +337,7 @@ test_serialize_prop_conflict(const svn_t svn_wc_conflict_version_create2("http://my-repos/svn", "uuid", "trunk", 12, svn_node_dir, pool), + NULL /* wc_only */, pool, pool)); SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel)); @@ -510,6 +511,7 @@ test_serialize_tree_conflict(const svn_t svn_wc_conflict_version_create2("http://my-repos/svn", "uuid", "trunk", 12, svn_node_dir, pool), + NULL /* wc_only */, pool, pool)); SVN_ERR(svn_wc__conflict_skel_is_complete(&complete, conflict_skel)); Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/op-depth-test.c Tue Jan 8 23:46:00 2013 @@ -5226,6 +5226,174 @@ nested_move_update(const svn_test_opts_t return SVN_NO_ERROR; } +static svn_error_t * +nested_move_commit(const svn_test_opts_t *opts, apr_pool_t *pool) +{ + svn_test__sandbox_t b; + + SVN_ERR(svn_test__sandbox_create(&b, "nested_move_commit", opts, pool)); + + /* r1: Create file 'f' */ + SVN_ERR(sbox_wc_mkdir(&b, "A")); + SVN_ERR(sbox_wc_mkdir(&b, "A/B")); + SVN_ERR(sbox_wc_mkdir(&b, "A/B/C")); + sbox_file_write(&b, "A/B/C/f", "r1 content\n"); + SVN_ERR(sbox_wc_add(&b, "A/B/C/f")); + SVN_ERR(sbox_wc_commit(&b, "")); + SVN_ERR(sbox_wc_update(&b, "", 1)); + + SVN_ERR(sbox_wc_move(&b, "A/B/C", "C2")); + + { + const char *moved_to; + const char *expected_to; + SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to, + b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"), + pool, pool)); + + expected_to = sbox_wc_path(&b, "C2"); + + if (strcmp(moved_to, expected_to) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved to %s, but was %s", + expected_to, moved_to); + } + { + const char *moved_from; + const char *expected_from; + SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &moved_from, NULL, + b.wc_ctx->db, sbox_wc_path(&b, "C2"), + pool, pool)); + + expected_from = sbox_wc_path(&b, "A/B/C"); + + if (strcmp(moved_from, expected_from) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved from %s, but was %s", + expected_from, moved_from); + } + + SVN_ERR(sbox_wc_move(&b, "A", "A2")); + { + nodes_row_t nodes[] = { + {0, "", "normal", 1, ""}, + {0, "A", "normal", 1, "A"}, + {0, "A/B", "normal", 1, "A/B"}, + {0, "A/B/C", "normal", 1, "A/B/C"}, + {0, "A/B/C/f", "normal", 1, "A/B/C/f"}, + {1, "A", "base-deleted", NO_COPY_FROM, "A2"}, + {1, "A/B", "base-deleted", NO_COPY_FROM}, + {1, "A/B/C", "base-deleted", NO_COPY_FROM}, + {1, "A/B/C/f", "base-deleted", NO_COPY_FROM}, + {1, "A2", "normal", 1, "A", MOVED_HERE}, + {1, "A2/B", "normal", 1, "A/B", MOVED_HERE}, + {1, "A2/B/C", "normal", 1, "A/B/C", MOVED_HERE}, + {1, "A2/B/C/f", "normal", 1, "A/B/C/f", MOVED_HERE}, + {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "C2"}, + {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM}, + {1, "C2", "normal", 1, "A/B/C", MOVED_HERE}, + {1, "C2/f", "normal", 1, "A/B/C/f", MOVED_HERE}, + {0} + }; + SVN_ERR(check_db_rows(&b, "", nodes)); + } + + { + const char *moved_to; + const char *expected_to; + SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to, + b.wc_ctx->db, sbox_wc_path(&b, "A/B/C"), + pool, pool)); + + expected_to = sbox_wc_path(&b, "A2" /* ### I would have expected "C2" */); + + if (strcmp(moved_to, expected_to) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved to %s, but was %s", + expected_to, moved_to); + } + { + const char *moved_from; + const char *expected_from; + SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &moved_from, NULL, + b.wc_ctx->db, sbox_wc_path(&b, "C2"), + pool, pool)); + + expected_from = sbox_wc_path(&b, "A2/B/C" + /* ### I would have expected "A/B/C" */); + + if (strcmp(moved_from, expected_from) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved from %s, but was %s", + expected_from, moved_from); + } + + { + apr_array_header_t *targets = apr_array_make(pool, 2, sizeof(const char *)); + + APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A"); + APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(&b, "A2"); + + SVN_ERR(sbox_wc_commit_ex(&b, targets, svn_depth_empty)); + } + + { + nodes_row_t nodes[] = { + {0, "", "normal", 1, ""}, + {0, "A", "not-present", 2, "A"}, + {0, "A2", "normal", 2, "A2"}, + {0, "A2/B", "normal", 2, "A2/B"}, + {0, "A2/B/C", "normal", 2, "A2/B/C"}, + {0, "A2/B/C/f", "normal", 2, "A2/B/C/f"}, + {3, "A2/B/C", "base-deleted", NO_COPY_FROM, "C2"}, + {3, "A2/B/C/f", "base-deleted", NO_COPY_FROM}, + + /* Currently these are recorded as a move but still + have the copy history from ^/A/B/C@1 */ + {1, "C2", "normal", 2, "A2/B/C", MOVED_HERE}, + {1, "C2/f", "normal", 2, "A2/B/C/f", MOVED_HERE}, + {0} + }; + SVN_ERR(check_db_rows(&b, "", nodes)); + } + + { + const char *moved_to; + const char *expected_to; + SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, NULL, &moved_to, + b.wc_ctx->db, sbox_wc_path(&b, "A2/B/C"), + pool, pool)); + + expected_to = sbox_wc_path(&b, "C2"); + + if (strcmp(moved_to, expected_to) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved to %s, but was %s", + expected_to, moved_to); + } + + { + const char *moved_from; + const char *expected_from; + SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, &moved_from, NULL, + b.wc_ctx->db, sbox_wc_path(&b, "C2"), + pool, pool)); + + expected_from = sbox_wc_path(&b, "A2/B/C"); + + if (strcmp(moved_from, expected_from) != 0) + return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, + "Expected moved from %s, but was %s", + expected_from, moved_from); + } + + + return SVN_NO_ERROR; +} + /* ---------------------------------------------------------------------- */ /* The list of test functions */ @@ -5327,5 +5495,7 @@ struct svn_test_descriptor_t test_funcs[ "update_prop_mod_into_moved"), SVN_TEST_OPTS_PASS(nested_move_update, "nested_move_update"), + SVN_TEST_OPTS_XFAIL(nested_move_commit, + "nested_move_commit"), SVN_TEST_NULL }; Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c (original) +++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.c Tue Jan 8 23:46:00 2013 @@ -287,15 +287,14 @@ sbox_wc_exclude(svn_test__sandbox_t *b, } svn_error_t * -sbox_wc_commit(svn_test__sandbox_t *b, const char *path) +sbox_wc_commit_ex(svn_test__sandbox_t *b, + apr_array_header_t *targets, + svn_depth_t depth) { svn_client_ctx_t *ctx; - apr_array_header_t *targets = apr_array_make(b->pool, 1, - sizeof(const char *)); - - APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path); SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool)); - return svn_client_commit6(targets, svn_depth_infinity, + ctx->wc_ctx = b->wc_ctx; + return svn_client_commit6(targets, depth, FALSE /* keep_locks */, FALSE /* keep_changelist */, TRUE /* commit_as_operations */, @@ -305,6 +304,16 @@ sbox_wc_commit(svn_test__sandbox_t *b, c } svn_error_t * +sbox_wc_commit(svn_test__sandbox_t *b, const char *path) +{ + apr_array_header_t *targets = apr_array_make(b->pool, 1, + sizeof(const char *)); + + APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path); + return sbox_wc_commit_ex(b, targets, svn_depth_infinity); +} + +svn_error_t * sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum) { svn_client_ctx_t *ctx; @@ -318,6 +327,7 @@ sbox_wc_update(svn_test__sandbox_t *b, c APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path); SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool)); + ctx->wc_ctx = b->wc_ctx; return svn_client_update4(&result_revs, paths, &revision, svn_depth_infinity, TRUE, FALSE, FALSE, FALSE, FALSE, ctx, b->pool); @@ -354,9 +364,16 @@ sbox_wc_move(svn_test__sandbox_t *b, con sizeof(const char *)); SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool)); + ctx->wc_ctx = b->wc_ctx; APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, src); - return svn_client_move6(paths, sbox_wc_path(b, dst), - FALSE, FALSE, NULL, NULL, NULL, ctx, b->pool); + return svn_client_move7(paths, sbox_wc_path(b, dst), + FALSE /* move_as_child */, + FALSE /* make_parents */, + TRUE /* allow_mixed_revisions */, + FALSE /* metadata_only */, + NULL /* revprop_table */, + NULL, NULL, /* commit callback */ + ctx, b->pool); } svn_error_t * @@ -371,6 +388,7 @@ sbox_wc_propset(svn_test__sandbox_t *b, svn_string_t *pval = value ? svn_string_create(value, b->pool) : NULL; SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool)); + ctx->wc_ctx = b->wc_ctx; APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path); return svn_client_propset_local(name, pval, paths, svn_depth_empty, TRUE /* skip_checks */, Modified: subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h (original) +++ subversion/branches/ev2-export/subversion/tests/libsvn_wc/utils.h Tue Jan 8 23:46:00 2013 @@ -122,6 +122,12 @@ sbox_wc_commit(svn_test__sandbox_t *b, c /* */ svn_error_t * +sbox_wc_commit_ex(svn_test__sandbox_t *b, + apr_array_header_t *targets, + svn_depth_t depth); + +/* */ +svn_error_t * sbox_wc_update(svn_test__sandbox_t *b, const char *path, svn_revnum_t revnum); /* */ Modified: subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c (original) +++ subversion/branches/ev2-export/tools/client-side/svn-bench/svn-bench.c Tue Jan 8 23:46:00 2013 @@ -222,7 +222,7 @@ const svn_opt_subcommand_desc2_t svn_cl_ " If locked, the letter 'O'. (Use 'svn info URL' to see details)\n" " Size (in bytes)\n" " Date and time of the last commit\n"), - {'r', 'v', 'R', opt_depth} }, + {'r', 'v', 'q', 'R', opt_depth} }, { "null-log", svn_cl__null_log, {0}, N_ ("Fetch the log messages for a set of revision(s) and/or path(s).\n" Modified: subversion/branches/ev2-export/tools/dev/fsfs-access-map.c URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/dev/fsfs-access-map.c?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/tools/dev/fsfs-access-map.c (original) +++ subversion/branches/ev2-export/tools/dev/fsfs-access-map.c Tue Jan 8 23:46:00 2013 @@ -272,15 +272,27 @@ parse_line(svn_stringbuf_t *line) /* determine function name, first parameter and return value */ char *func_end = strchr(line->data, '('); char *return_value = strrchr(line->data, ' '); + char *first_param_end; + apr_int64_t func_return = 0; - char *first_param_end = strchr(func_end, ','); + if (func_end == NULL || return_value == NULL) + return; + + first_param_end = strchr(func_end, ','); if (first_param_end == NULL) first_param_end = strchr(func_end, ')'); + if (first_param_end == NULL) + return; + *func_end++ = 0; *first_param_end = 0; ++return_value; + /* (try to) convert the return value into an integer. + * If that fails, continue anyway as defaulting to 0 will be safe for us. */ + svn_error_clear(svn_cstring_atoi64(&func_return, return_value)); + /* process those operations that we care about */ if (strcmp(line->data, "open") == 0) { @@ -288,12 +300,12 @@ parse_line(svn_stringbuf_t *line) *func_end++ = 0; *--first_param_end = 0; - open_file(func_end, atoi(return_value)); + open_file(func_end, (int)func_return); } else if (strcmp(line->data, "read") == 0) - read_file(atoi(func_end), atoi(return_value)); + read_file(atoi(func_end), func_return); else if (strcmp(line->data, "lseek") == 0) - seek_file(atoi(func_end), atoi(return_value)); + seek_file(atoi(func_end), func_return); else if (strcmp(line->data, "close") == 0) close_file(atoi(func_end)); } @@ -471,6 +483,12 @@ write_bitmap(apr_array_header_t *info, a if (xsize < APR_ARRAY_IDX(info, y, file_stats_t *)->read_map->nelts) xsize = APR_ARRAY_IDX(info, y, file_stats_t *)->read_map->nelts; + /* limit picture dimensions (16k pixels in each direction) */ + if (xsize >= 0x4000) + xsize = 0x3fff; + if (ysize >= 0x4000) + ysize = 0x3fff; + /* rows in BMP files must be aligned to 4 bytes */ row_size = APR_ALIGN(xsize * 3, 4); padding = row_size - xsize * 3; Modified: subversion/branches/ev2-export/tools/dist/release.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/dist/release.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/tools/dist/release.py (original) +++ subversion/branches/ev2-export/tools/dist/release.py Tue Jan 8 23:46:00 2013 @@ -91,7 +91,7 @@ secure_repos = 'https://svn.apache.org/r dist_repos = 'https://dist.apache.org/repos/dist' dist_dev_url = dist_repos + '/dev/subversion' dist_release_url = dist_repos + '/release/subversion' -KEYS = 'https://people.apache.org/keys/group/subversion-pmc.asc' +KEYS = 'https://people.apache.org/keys/group/subversion.asc' extns = ['zip', 'tar.gz', 'tar.bz2'] Modified: subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py?rev=1430634&r1=1430633&r2=1430634&view=diff ============================================================================== --- subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py (original) +++ subversion/branches/ev2-export/tools/server-side/svnpubsub/svnwcsub.py Tue Jan 8 23:46:00 2013 @@ -124,9 +124,10 @@ class WorkingCopy(object): def _get_match(self, svnbin, env): ### quick little hack to auto-checkout missing working copies - if not os.path.isdir(self.path) or is_emptydir(self.path): + if not os.path.isdir(self.path + "/.svn") or is_emptydir(self.path): logging.info("autopopulate %s from %s" % (self.path, self.url)) subprocess.check_call([svnbin, 'co', '-q', + '--force', '--non-interactive', '--config-option', 'config:miscellany:use-commit-times=on',
