You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2013/01/09 00:46:03 UTC
svn commit: r1430634 [7/7] - in /subversion/branches/ev2-export: ./
build/win32/ doc/ subversion/bindings/cxxhl/src/
subversion/bindings/swig/ruby/test/ subversion/include/
subversion/include/private/ subversion/libsvn_client/
subversion/libsvn_delta/ ...
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',