You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pr...@apache.org on 2013/06/05 11:22:51 UTC
svn commit: r1489765 [19/22] - in /subversion/branches/verify-keep-going: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
contrib/hook-scripts/ contrib/server-side/fsfsfixer/
contrib/server-side/fsfsfixer/fixer/ notes/ subversion...
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/export_tests.py Wed Jun 5 09:22:43 2013
@@ -918,6 +918,52 @@ def export_file_overwrite_with_force(sbo
iota_url, tmpdir)
svntest.actions.verify_disk(tmpdir, expected_disk)
+def export_custom_keywords(sbox):
+ """export with custom keywords"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # 248=SVN_KEYWORD_MAX_LEN-7 where 7 is '$', 'Q', 'q', ':', ' ', ' ', '$'
+ alpha_content = ('[$Qq: %s $ $Pp: %s $]\n'
+ % (sbox.repo_url[:248],
+ (sbox.repo_url + '/A/B/E/alpha')[:248]))
+
+ sbox.simple_append('A/B/E/alpha', '[$Qq$ $Pp$]\n', truncate=True)
+ sbox.simple_propset('svn:keywords', 'Qq=%R Pp=%u', 'A/B/E/alpha')
+ sbox.simple_commit()
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/B/E/alpha', contents=alpha_content)
+ svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+ # Export a tree
+ export_target = sbox.add_wc_path('export')
+ expected_output = svntest.wc.State(export_target, {
+ '' : Item(status='A '),
+ 'alpha' : Item(status='A '),
+ 'beta' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'alpha': Item(contents=alpha_content),
+ 'beta' : Item(contents="This is the file 'beta'.\n"),
+ })
+ svntest.actions.run_and_verify_export(sbox.repo_url + '/A/B/E',
+ export_target,
+ expected_output,
+ expected_disk)
+
+ # Export a file
+ export_file = os.path.join(export_target, 'alpha')
+ os.remove(export_file)
+ expected_output = ['A %s\n' % export_file, 'Export complete.\n']
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'export', '--force',
+ sbox.repo_url + '/A/B/E/alpha',
+ export_target)
+
+ if open(export_file).read() != ''.join(alpha_content):
+ raise svntest.Failure("wrong keyword expansion")
+
########################################################################
# Run the tests
@@ -951,6 +997,7 @@ test_list = [ None,
export_externals_with_native_eol,
export_to_current_dir,
export_file_overwrite_with_force,
+ export_custom_keywords,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/externals_tests.py Wed Jun 5 09:22:43 2013
@@ -2556,7 +2556,7 @@ def commit_include_externals(sbox):
# Assume everything r4, except what is pegged
- expected_status.tweak(wc_rev='4')
+ expected_status.tweak(wc_rev='4')
expected_status.tweak('Xpegged/xiota', 'Xpegged/xE', 'Xpegged/xE/alpha',
'Xpegged/xE/beta', wc_rev=1)
@@ -2781,7 +2781,7 @@ def include_immediate_dir_externals(sbox
#
# >svn st
# X X\XE
- #
+ #
# Performing status on external item at 'X\XE':
# M C:\SVN\src-trunk\...\externals_tests-37\X\XE
# M C:\SVN\src-trunk\...\externals_tests-37\X\XE\alpha
@@ -3048,15 +3048,15 @@ def duplicate_targets(sbox):
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'pg',
'svn:externals', wc_dir)
-@Issue(4225)
+@Issue(4225)
def list_include_externals(sbox):
"list with --include-externals"
-
+
externals_test_setup(sbox)
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
-
+
svntest.actions.run_and_verify_svn(None, None, [],
'checkout',
repo_url, wc_dir)
@@ -3073,7 +3073,7 @@ def list_include_externals(sbox):
return string
expected_stdout = verify.UnorderedOutput([
- "E/" + "\n",
+ "E/" + "\n",
"F/" + "\n",
"lambda" + "\n",
list_external_string("gamma", B_url ) + "\n",
@@ -3081,7 +3081,7 @@ def list_include_externals(sbox):
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
"OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_path)
-
+
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
"OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_url)
@@ -3094,10 +3094,10 @@ def list_include_externals(sbox):
"chi" + "\n",
"omega" + "\n",
"psi" + "\n"])
-
+
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
"OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_path)
-
+
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
"OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_url)
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/import_tests.py Wed Jun 5 09:22:43 2013
@@ -554,7 +554,7 @@ def import_inherited_ignores(sbox):
svntest.actions.run_and_verify_svn(None, [], [], 'import',
'--config-dir', config_dir,
os.path.join(import_tree_dir,
- 'DIR6', 'file6.foo'),
+ 'DIR6', 'file6.foo'),
sbox.repo_url + '/A/B/E/file6.foo',
'-m', 'This import should fail!')
@@ -563,7 +563,7 @@ def import_inherited_ignores(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'import', '--no-ignore',
'--config-dir', config_dir,
os.path.join(import_tree_dir,
- 'DIR6', 'file6.foo'),
+ 'DIR6', 'file6.foo'),
sbox.repo_url + '/A/B/E/file6.foo',
'-m', 'import')
expected_output = svntest.verify.UnorderedOutput(
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/info_tests.py Wed Jun 5 09:22:43 2013
@@ -544,7 +544,7 @@ def relpath_escaping(sbox):
'URL' : '.*/path.*with.*space.*',
'Relative URL' : '.*/path.*with.*space.*',
}
-
+
svntest.actions.run_and_verify_info([expected], sbox.ospath(name))
info = svntest.actions.run_and_parse_info(sbox.ospath(name), sbox.ospath(name2))
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/iprop_tests.py Wed Jun 5 09:22:43 2013
@@ -99,7 +99,7 @@ def iprops_basic_working(sbox):
D_path, expected_iprops, expected_explicit_props)
### Propget Directory Targets
-
+
# Propget directory target with only explicit props.
expected_iprops = {}
expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'}
@@ -315,7 +315,7 @@ def iprops_switched_subtrees(sbox):
svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A',
sbox.repo_url + '/branch2', '-m', 'Make branch2')
-
+
# Create a root property and two branch properties
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.')
@@ -430,7 +430,7 @@ def iprops_pegged_wc_targets(sbox):
sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.')
sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.')
sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D')
- svntest.main.file_write(alpha_path, "Edit in r2.\n")
+ svntest.main.file_write(alpha_path, "Edit in r2.\n")
svntest.main.run_svn(None, 'commit', '-m', 'Add some properties',
wc_dir)
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/lock_tests.py Wed Jun 5 09:22:43 2013
@@ -1779,14 +1779,14 @@ def locks_stick_over_switch(sbox):
switched_status.tweak('iota', writelocked='K')
switched_status.tweak('A', switched='S')
- svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
+ svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
repo_url + '/AA',
expected_output, None, switched_status)
# And now switch back to verify that the locks reappear
expected_output = svntest.wc.State(wc_dir, {
})
- svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
+ svntest.actions.run_and_verify_switch(wc_dir, sbox.ospath('A'),
repo_url + '/A',
expected_output, None, expected_status)
@@ -1815,6 +1815,31 @@ def lock_unlock_deleted(sbox):
expected_status.tweak('A/mu', writelocked=None)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
+@Issue(4369)
+def commit_stolen_lock(sbox):
+ "commit with a stolen lock"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu', 'zig-zag')
+ sbox.simple_lock('A/mu')
+
+ expected_output = '\'mu\' locked by user \'jrandom\'.'
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'lock', '--force',
+ sbox.repo_url + '/A/mu')
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', status='M ', writelocked='T')
+ err_re = "(.*E160037: Cannot verify lock on path '/A/mu')|" + \
+ "(.*E160038: '/.*/A/mu': no lock token available)"
+ svntest.actions.run_and_verify_commit(wc_dir,
+ [],
+ expected_status,
+ err_re,
+ wc_dir)
+
########################################################################
# Run the tests
@@ -1866,6 +1891,7 @@ test_list = [ None,
lock_multi_wc,
locks_stick_over_switch,
lock_unlock_deleted,
+ commit_stolen_lock,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/log_tests.py Wed Jun 5 09:22:43 2013
@@ -2220,7 +2220,7 @@ def log_diff_moved(sbox):
sbox.simple_move('A/mu2', 'A/mu3')
svntest.main.file_append(sbox.ospath('A/mu3'), "now mu3\n")
sbox.simple_commit()
-
+
mu_at_1 = sbox.repo_url + '/A/mu@1'
mu3_at_3 = sbox.repo_url + '/A/mu3@3'
@@ -2296,13 +2296,13 @@ def log_search(sbox):
log_chain = parse_log_output(output)
check_log_chain(log_chain, [7, 6, 3])
- # search is case-insensitive
+ # search is case-sensitive
exit_code, output, err = svntest.actions.run_and_verify_svn(
None, None, [], 'log', '--search',
'FOR REVISION [367]')
log_chain = parse_log_output(output)
- check_log_chain(log_chain, [7, 6, 3])
+ check_log_chain(log_chain, [])
# multi-pattern search
exit_code, output, err = svntest.actions.run_and_verify_svn(
@@ -2365,6 +2365,133 @@ def merge_sensitive_log_with_search(sbox
}
check_merge_results(log_chain, expected_merges)
+#----------------------------------------------------------------------
+# Test for issue #4355 'svn_client_log5 broken with multiple revisions
+# which span a rename'.
+@Issue(4355)
+@SkipUnless(server_has_mergeinfo)
+def log_multiple_revs_spanning_rename(sbox):
+ "log for multiple revs which span a rename"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ msg_file=os.path.join(sbox.repo_dir, 'log-msg')
+ msg_file=os.path.abspath(msg_file)
+ mu_path1 = os.path.join(wc_dir, 'A', 'mu')
+ mu_path2 = os.path.join(wc_dir, 'trunk', 'mu')
+ trunk_path = os.path.join(wc_dir, 'trunk')
+
+ # r2 - Change a file.
+ msg=""" Log message for revision 2
+ but with multiple lines
+ to test the code"""
+ svntest.main.file_write(msg_file, msg)
+ svntest.main.file_append(mu_path1, "2")
+ svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+
+ # r3 - Rename that file's parent.
+ svntest.main.run_svn(None, 'up', wc_dir)
+ sbox.simple_move('A', 'trunk')
+ svntest.main.run_svn(None, 'ci', '-m', "Log message for revision 3",
+ wc_dir)
+
+ # r4 - Change the file again.
+ msg=""" Log message for revision 4
+ but with multiple lines
+ to test the code"""
+ svntest.main.file_write(msg_file, msg)
+ svntest.main.file_append(mu_path2, "4")
+ svntest.main.run_svn(None, 'ci', '-F', msg_file, wc_dir)
+ svntest.main.run_svn(None, 'up', wc_dir)
+
+ # Check that log can handle a revision range that spans a rename.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r2:4', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,4])
+
+ # Check that log can handle discrete revisions that don't span a rename.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c3,4', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [3,4])
+
+ # Check that log can handle discrete revisions that span a rename.
+ #
+ # Previously this failed with:
+ #
+ # >svn log ^/trunk -c2,3,1
+ # ------------------------------------------------------------------------
+ # r2 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 3 lines
+ #
+ # Log message for revision 2
+ # but with multiple lines
+ # to test the code
+ # ------------------------------------------------------------------------
+ # r3 | jrandom | 2013-04-18 19:58:47 -0400 (Thu, 18 Apr 2013) | 1 line
+ #
+ # Log message for revision 3
+ # ..\..\..\subversion\svn\log-cmd.c:868,
+ # ..\..\..\subversion\libsvn_client\log.c:641,
+ # ..\..\..\subversion\libsvn_repos\log.c:1931,
+ # ..\..\..\subversion\libsvn_repos\log.c:1358,
+ # ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+ # ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+ # (apr_err=SVN_ERR_FS_NOT_FOUND)
+ # svn: E160013: File not found: revision 1, path '/trunk'
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c2,3,1', sbox.repo_url + '/trunk/mu')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,1])
+
+ # Should work with a WC target too.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-c2,3,1', mu_path2)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2,3,1])
+
+ # Discreet revision *ranges* which span a rename should work too.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-r4:2', sbox.repo_url + '/trunk')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4,3,2])
+
+ # As above, but revision ranges from younger to older. Previously this
+ # failed with:
+ #
+ # >svn log ^/trunk -r1:1 -r2:4
+ # ------------------------------------------------------------------------
+ # r1 | jrandom | 2013-04-18 19:58:46 -0400 (Thu, 18 Apr 2013) | 1 line
+ #
+ # Log message for revision 1.
+ # ..\..\..\subversion\svn\log-cmd.c:868,
+ # ..\..\..\subversion\libsvn_client\log.c:678,
+ # ..\..\..\subversion\libsvn_repos\log.c:1931,
+ # ..\..\..\subversion\libsvn_repos\log.c:1358,
+ # ..\..\..\subversion\libsvn_fs\fs-loader.c:979,
+ # ..\..\..\subversion\libsvn_fs_fs\tree.c:3205:
+ # (apr_err=SVN_ERR_FS_NOT_FOUND)
+ # svn: E160013: File not found: revision 4, path '/A'
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-r2:4', sbox.repo_url + '/trunk')
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,2,3,4])
+
+ # Discrete revs with WC-only opt revs shouldn't cause any problems.
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rPREV', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,3])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rCOMMITTED', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4])
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-r1', '-rBASE', trunk_path)
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [1,4])
########################################################################
# Run the tests
@@ -2411,6 +2538,7 @@ test_list = [ None,
log_diff_moved,
log_search,
merge_sensitive_log_with_search,
+ log_multiple_revs_spanning_rename,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py Wed Jun 5 09:22:43 2013
@@ -837,9 +837,9 @@ def subtree_to_and_fro(sbox):
"|( A_COPY\n)"
"|( Missing ranges: /A:5\n)"
"|(\n)"
- "|(.*apr_err.*)", # In case of debug build
+ "|" + svntest.main.stack_trace_regexp,
None,
- True) # Match *all* lines of stdout
+ True) # Match *all* lines of stdout
#----------------------------------------------------------------------
# Automatic merges ignore subtree mergeinfo gaps older than the last rev
@@ -888,7 +888,7 @@ def merge_to_reverse_cherry_subtree_to_m
# Try an automatic sync merge from ^/A to A_COPY. Revision 5 should be
# merged to A_COPY/B as its subtree mergeinfo reveals that rev is missing,
# like so:
- #
+ #
# >svn merge ^/A A_COPY
# --- Merging r5 into 'A_COPY\B':
# U A_COPY\B\E\beta
@@ -1166,7 +1166,7 @@ def effective_sync_results_in_reintegrat
# This should work because since the resolution of
# http://subversion.tigris.org/issues/show_bug.cgi?id=3577
# if B is *effectively* synced with A, then B can be reintegrated
- # to A.
+ # to A.
sbox.simple_update()
expected_output = [
"--- Merging differences between repository URLs into '" +
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py Wed Jun 5 09:22:43 2013
@@ -63,7 +63,7 @@ def run_reintegrate_expect_error(src_url
unless stdout and stderr both match and the exit code is non-zero.
Every line of stderr must match the regex EXPECTED_STDERR.
"""
- expected_stderr += "|(.*apr_err.*)" # In case of debug build
+ expected_stderr += "|" + svntest.main.stack_trace_regexp
# The actions.run_and_verify_* methods are happy if one line of the error
# matches the regex, but we want to check that every line matches.
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tests.py Wed Jun 5 09:22:43 2013
@@ -1834,7 +1834,7 @@ def merge_into_missing(sbox):
})
expected_mergeinfo_output = wc.State(F_path, {
})
-
+
svntest.actions.run_and_verify_merge(F_path, '1', '2', F_url, None,
expected_output,
expected_mergeinfo_output,
@@ -4481,8 +4481,9 @@ def obey_reporter_api_semantics_while_do
#----------------------------------------------------------------------
def set_up_branch(sbox, branch_only = False, nbr_of_branches = 1):
'''Starting with standard greek tree, copy 'A' NBR_OF_BRANCHES times
- to A_COPY, A_COPY_2, A_COPY_3, and so on. Then make four modifications
- (setting file contents to "New content") under A:
+ to A_COPY, A_COPY_2, A_COPY_3, and so on. Then, unless BRANCH_ONLY is
+ true, make four modifications (setting file contents to "New content")
+ under A:
r(2 + NBR_OF_BRANCHES) - A/D/H/psi
r(3 + NBR_OF_BRANCHES) - A/D/G/rho
r(4 + NBR_OF_BRANCHES) - A/B/E/beta
@@ -6505,7 +6506,18 @@ def foreign_repos_does_not_update_mergei
def avoid_reflected_revs(sbox):
"avoid repeated merges for cyclic merging"
- ## See http://subversion.tigris.org/issues/show_bug.cgi?id=2897. ##
+ # See <http://subversion.tigris.org/issues/show_bug.cgi?id=2897>.
+ #
+ # This test cherry-picks some changes (all of them, in fact) from the
+ # parent branch 'A' to the child branch 'A_COPY', and then tries to
+ # reintegrate 'A_COPY' to 'A' (explicitly specifying a revision range
+ # on the source branch). It expects the changes that are unique to the
+ # branch 'A_COPY' to be merged to 'A'.
+ #
+ # A --1----[3]---[5]----------?
+ # \ \_____\___ /
+ # \ \ \ /
+ # A_COPY 2-[---4-----6--7--8]-
# Create a WC with a single branch
sbox.build()
@@ -16268,7 +16280,7 @@ def merge_with_os_deleted_subtrees(sbox)
err_re = "svn: E195016: Merge tracking not allowed with missing subtrees; " + \
"try restoring these items first:" + \
"|(\n)" + \
- "|(.*apr_err.*\n)" # In case of debug build
+ "|" + svntest.main.stack_trace_regexp
# Case 1: Infinite depth merge into infinite depth WC target.
# Every missing subtree under the target should be reported as missing.
@@ -17487,8 +17499,8 @@ def merge_source_with_replacement(sbox):
psi_COPY_path = sbox.ospath('A_COPY/D/H/psi')
rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
-
- # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
wc_disk, wc_status = set_up_branch(sbox)
# r7 Delete A, replace it with A@5, effectively reverting the change
@@ -17590,7 +17602,7 @@ def reverse_merge_with_rename(sbox):
rho_COPY_path = sbox.ospath('A_COPY/D/G/rho')
omega_COPY_path = sbox.ospath('A_COPY/D/H/omega')
- # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
wc_disk, wc_status = set_up_branch(sbox)
# r7 - Rename ^/A to ^/trunk.
@@ -17805,7 +17817,7 @@ def merge_with_added_subtrees_with_merge
# vvvvvvvvvvvvvvvvvvvv
# U A_COPY_2\C\X\Y\Z
# ^^^^^^^^^^^^^^^^^^^^
- #
+ #
# >svn pl -vR A_COPY_2
# Properties on 'A_COPY_2':
# svn:mergeinfo
@@ -18182,7 +18194,7 @@ def merge_target_selection(sbox):
svntest.actions.run_and_verify_svn(None, expected_output, [],
'merge', '^/dir', '-c', '4', 'binary-file')
-@Issue(3405)
+@Issue(3405) # seems to be the wrong issue number
def merge_properties_on_adds(sbox):
"merged directory properties are added"
@@ -18247,7 +18259,7 @@ def merge_properties_on_adds(sbox):
# For fun, also check the status: 'svn status' suppresses the M from AM.
# G = sbox.ospath('G')
- #
+ #
# expected_status = wc.State('G', {
# '' : Item(status=' M', wc_rev='2'),
# 'pi' : Item(status=' ', wc_rev='2'),
@@ -18792,7 +18804,7 @@ def single_editor_drive_merge_notificati
D_copy_path + "':\n",
" U " + D_copy_path + "\n",
"--- Eliding mergeinfo from '" + D_copy_path + "':\n",
- " U " + D_copy_path + "\n"])
+ " U " + D_copy_path + "\n"])
svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
'-r9:2', sbox.repo_url + '/A',
A_copy_path)
@@ -18993,6 +19005,156 @@ def conflicted_split_merge_with_resolve(
prop_resolved=1, expect_error=False)
try_merge(target, 8, ['-r6:3', '-r10:7'], expect, '7')
+#----------------------------------------------------------------------
+# Test for issue 4367 'merge to shallow WC, repeat merge to infinite
+# depth WC is broken'.
+@SkipUnless(server_has_mergeinfo)
+@Issues(4367)
+def merge_to_empty_target_merge_to_infinite_target(sbox):
+ "repeat merge to infinite depth WC conflicts"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ wc_disk, wc_status = set_up_branch(sbox, branch_only=True)
+ A_COPY_path = sbox.ospath('A_COPY')
+ C_COPY_path = sbox.ospath('A_COPY/C')
+ E_path = sbox.ospath('A/B/E')
+ J_path = sbox.ospath('A/C/J')
+ K_path = sbox.ospath('A/C/J/K')
+ nu1_path = sbox.ospath('A/C/J/nu1')
+ nu2_path = sbox.ospath('A/C/J/K/nu2')
+ L_path = sbox.ospath('A/B/L')
+ nu3_path = sbox.ospath('A/B/L/nu3')
+
+ B1_path = sbox.ospath('A/B/B1')
+ B1a_path = sbox.ospath('A/B/B1/B1a')
+ test1_path = sbox.ospath('A/B/B1/test.txt')
+ test2_path = sbox.ospath('A/B/B1/B1a/test.txt')
+
+ C1_path = sbox.ospath('A/C/C1')
+ test3_path = sbox.ospath('A/C/C1/test.txt')
+
+ # r3 - Add some subtrees:
+ # A /A/B/B1
+ # A /A/B/B1/B1a
+ # A /A/B/B1/B1a/test.txt
+ # A /A/B/B1/test.txt
+ svntest.main.run_svn(None, 'mkdir', B1_path)
+ svntest.main.run_svn(None, 'mkdir', B1a_path)
+ svntest.main.file_append(test1_path, "New file.\n")
+ svntest.main.file_append(test2_path, "New file.\n")
+ svntest.main.run_svn(None, 'add', test1_path, test2_path)
+ sbox.simple_commit()
+
+ # r4 - Add some another subtree.
+ # A /A/C/C1
+ # A /A/C/C1/test.txt
+ svntest.main.run_svn(None, 'mkdir', C1_path)
+ svntest.main.file_append(test3_path, "New file.\n")
+ svntest.main.run_svn(None, 'add', test3_path)
+ sbox.simple_commit()
+
+ # r5 - Delete part of the subtree added in r3.
+ # D /A/B/B1/B1a
+ svntest.main.run_svn(None, 'del', B1a_path)
+ sbox.simple_commit()
+
+ # r6 - Set depth of A_COPY to empty, merge all available revs from ^/A.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=empty', A_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=infinity', C_COPY_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'merge', '^/A',
+ A_COPY_path)
+ sbox.simple_commit()
+
+ # Update A_COPY back to depth infinity and retry the prior merge.
+ svntest.actions.run_and_verify_svn(None, None, [], 'up',
+ '--set-depth=infinity', A_COPY_path)
+
+ expected_output = wc.State(A_COPY_path, {
+ 'B/B1' : Item(status='A '),
+ 'B/B1/test.txt' : Item(status='A '),
+ 'B/B1/B1a' : Item(status='D ', prev_status='A '),
+ 'B/B1/B1a/test.txt' : Item(status='A '),
+ })
+ expected_mergeinfo_output = wc.State(A_COPY_path, {
+ '' : Item(status=' U'),
+ 'B' : Item(status=' G'),
+ })
+ expected_elision_output = wc.State(A_COPY_path, {
+ 'B' : Item(status=' U'),
+ })
+ expected_status = wc.State(A_COPY_path, {
+ '' : Item(status=' M'),
+ 'B' : Item(status=' '),
+ 'mu' : Item(status=' '),
+ 'B/B1' : Item(status='A ', copied='+'),
+ 'B/B1/test.txt' : Item(status=' ', copied='+'),
+ 'B/B1/B1a' : Item(status='D ', copied='+'),
+ 'B/B1/B1a/test.txt' : Item(status='D ', copied='+'),
+ 'B/E' : Item(status=' '),
+ 'B/E/alpha' : Item(status=' '),
+ 'B/E/beta' : Item(status=' '),
+ 'B/lambda' : Item(status=' '),
+ 'B/F' : Item(status=' '),
+ 'C' : Item(status=' '),
+ 'C/C1' : Item(status=' '),
+ 'C/C1/test.txt' : Item(status=' '),
+ 'D' : Item(status=' '),
+ 'D/G' : Item(status=' '),
+ 'D/G/pi' : Item(status=' '),
+ 'D/G/rho' : Item(status=' '),
+ 'D/G/tau' : Item(status=' '),
+ 'D/gamma' : Item(status=' '),
+ 'D/H' : Item(status=' '),
+ 'D/H/chi' : Item(status=' '),
+ 'D/H/psi' : Item(status=' '),
+ 'D/H/omega' : Item(status=' '),
+ })
+ expected_status.tweak(wc_rev=6)
+ expected_status.tweak('B/B1', 'B/B1/test.txt', 'B/B1/B1a',
+ 'B/B1/B1a/test.txt', wc_rev='-')
+ expected_disk = wc.State('', {
+ '' : Item(props={SVN_PROP_MERGEINFO : '/A:2-6'}),
+ 'B' : Item(),
+ 'mu' : Item("This is the file 'mu'.\n"),
+ 'B/B1' : Item(),
+ 'B/B1/test.txt' : Item("New file.\n"),
+ 'B/E' : Item(),
+ 'B/E/alpha' : Item("This is the file 'alpha'.\n"),
+ 'B/E/beta' : Item("This is the file 'beta'.\n"),
+ 'B/lambda' : Item("This is the file 'lambda'.\n"),
+ 'B/F' : Item(),
+ 'C' : Item(props={SVN_PROP_MERGEINFO : '/A/C:2-5'}),
+ 'C/C1' : Item(),
+ 'C/C1/test.txt' : Item("New file.\n"),
+ 'D' : Item(),
+ 'D/G' : Item(),
+ 'D/G/pi' : Item("This is the file 'pi'.\n"),
+ 'D/G/rho' : Item("This is the file 'rho'.\n"),
+ 'D/G/tau' : Item("This is the file 'tau'.\n"),
+ 'D/gamma' : Item("This is the file 'gamma'.\n"),
+ 'D/H' : Item(),
+ 'D/H/chi' : Item("This is the file 'chi'.\n"),
+ 'D/H/psi' : Item("This is the file 'psi'.\n"),
+ 'D/H/omega' : Item("This is the file 'omega'.\n"),
+ })
+ expected_skip = wc.State(A_COPY_path, { })
+ svntest.actions.run_and_verify_merge(A_COPY_path, None, None,
+ sbox.repo_url + '/A', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, None, None, None,
+ None, 1, 0)
+
+ # Commit the merge.
+ #sbox.simple_commit()
+
########################################################################
# Run the tests
@@ -19137,6 +19299,7 @@ test_list = [ None,
multiple_editor_drive_merge_notifications,
single_editor_drive_merge_notifications,
conflicted_split_merge_with_resolve,
+ merge_to_empty_target_merge_to_infinite_target,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_tree_conflict_tests.py Wed Jun 5 09:22:43 2013
@@ -1329,7 +1329,7 @@ def tree_conflicts_merge_edit_onto_missi
})
# Currently this test fails because some parts of the merge
- # start succeeding.
+ # start succeeding.
svntest.deeptrees.deep_trees_run_tests_scheme_for_merge(sbox,
[ DeepTreesTestCase(
"local_tree_missing_incoming_leaf_edit",
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/move_tests.py Wed Jun 5 09:22:43 2013
@@ -95,14 +95,14 @@ def build_incoming_changes_file(sbox, so
sbox.simple_propdel("foo", dest)
sbox.simple_commit(message="Delete property on destination of moved file")
- # r13 = Remove destination again (not needed for any test just cleanup).
+ # r13 = Remove destination again (not needed for any test just cleanup).
sbox.simple_rm(dest)
sbox.simple_commit(message="Remove destination (cleanup)")
# r14 = Add property on source of moved file.
sbox.simple_propset("foo", "bar", source)
sbox.simple_commit(message="Add property on source of moved file")
-
+
# r15 = Modify property on source of moved file.
sbox.simple_propset("foo", "baz", source)
sbox.simple_commit(message="Modify property on source of moved file")
@@ -141,11 +141,11 @@ def move_file_test(sbox, source, dest, m
source_path = sbox.ospath(source)
dest_path = sbox.ospath(dest)
- # Deal with if there's no resolves key, as in we're not going to
+ # Deal with if there's no resolves key, as in we're not going to
# do a resolve.
if not 'resolves' in test or not test['resolves']:
test['resolves'] = {None: None}
-
+
# Do the test for every type of resolve provided.
for resolve_accept in test['resolves'].keys():
@@ -157,7 +157,7 @@ def move_file_test(sbox, source, dest, m
# execute the move
move_func(test['start_rev'])
- # update to end_rev, which will create a conflict
+ # update to end_rev, which will create a conflict
# TODO: Limit the property checks to only when we're doing something with
# properties.
svntest.actions.run_and_verify_update(wc_dir, test['up_output'],
@@ -177,7 +177,7 @@ def move_file_test(sbox, source, dest, m
if not 'output' in resolve:
resolve['output'] = None
if not 'error' in resolve:
- resolve['error'] = []
+ resolve['error'] = []
if not 'disk' in resolve:
resolve['disk'] = None
if 'revert_paths' in resolve:
@@ -197,7 +197,7 @@ def move_file_test(sbox, source, dest, m
if resolve['disk']:
svntest.actions.verify_disk(wc_dir, resolve['disk'], True)
- # revert to preprare for the next test
+ # revert to preprare for the next test
svntest.actions.run_and_verify_revert(revert_paths, '-R', wc_dir)
# tests is an array of test dictionaries that move_file_test above will take
@@ -240,11 +240,11 @@ def build_simple_file_move_tests(sbox, s
mc['output'] = svntest.verify.ExpectedOutput(
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
- mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
mc['status'].tweak(source, status='D ', moved_to=dest)
mc['status'].add({dest: Item(status='A ', moved_from=source,
copied='+', wc_rev='-')})
- mc['disk'] = test['up_disk'].copy()
+ mc['disk'] = test['up_disk'].copy()
mc['disk'].tweak(dest, contents="This is the file 'lambda'.\nmodified\n")
# theirs-conflict doesn't work
tc = {}
@@ -259,10 +259,10 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % source_path,
]
)
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ')
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
- working['disk'] = test['up_disk']
+ working['disk'] = test['up_disk']
test['resolves'] = {'mine-conflict': mc, 'theirs-conflict': tc,
'working': working}
test['revert_paths'] = [source_path, dest_path]
@@ -301,7 +301,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
# move is broken now
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
working['status'].remove(source)
working['disk'] = test['up_disk']
@@ -346,7 +346,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
# XXX: Not sure this status is really correct here
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='! ')
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
working['disk'] = test['up_disk']
@@ -389,7 +389,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -435,7 +435,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -503,7 +503,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -547,7 +547,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -560,7 +560,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property addition to dest (r7-10)
test = {}
test['start_rev'] = 7
- test['end_rev'] = 10
+ test['end_rev'] = 10
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -591,7 +591,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -604,7 +604,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property modification to dest (r7-11)
test = {}
test['start_rev'] = 7
- test['end_rev'] = 11
+ test['end_rev'] = 11
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -635,7 +635,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -648,7 +648,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property deletion to dest (r7-12)
test = {}
test['start_rev'] = 7
- test['end_rev'] = 12
+ test['end_rev'] = 12
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -679,7 +679,7 @@ def build_simple_file_move_tests(sbox, s
"Resolved conflicted state of '%s'\n" % dest_path, match_all=False
)
# working converts the move into a replacement
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ', moved_to=dest)
working['status'].add({dest: Item(status='R ', moved_from=source,
copied='+', wc_rev='-')})
@@ -692,7 +692,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property addition to source (r13-14)
test = {}
test['start_rev'] = 13
- test['end_rev'] = 14
+ test['end_rev'] = 14
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -714,7 +714,7 @@ def build_simple_file_move_tests(sbox, s
mc['output'] = svntest.verify.ExpectedOutput(
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
- mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
mc['status'].tweak(source, status='D ', moved_to=dest)
mc['status'].add({dest: Item(status='A ', moved_from=source,
copied='+', wc_rev='-')})
@@ -733,7 +733,7 @@ def build_simple_file_move_tests(sbox, s
]
)
# XXX: working breaks the move? Is that right?
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ')
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
working['disk'] = test['up_disk']
@@ -745,7 +745,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property modification to source (r14-15)
test = {}
test['start_rev'] = 14
- test['end_rev'] = 15
+ test['end_rev'] = 15
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -767,7 +767,7 @@ def build_simple_file_move_tests(sbox, s
mc['output'] = svntest.verify.ExpectedOutput(
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
- mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
mc['status'].tweak(source, status='D ', moved_to=dest)
mc['status'].add({dest: Item(status='A ', moved_from=source,
copied='+', wc_rev='-')})
@@ -786,7 +786,7 @@ def build_simple_file_move_tests(sbox, s
]
)
# XXX: working breaks the move? Is that right?
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ')
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
working['disk'] = test['up_disk']
@@ -798,7 +798,7 @@ def build_simple_file_move_tests(sbox, s
# move and update with incoming property deletion to source (r15-16)
test = {}
test['start_rev'] = 15
- test['end_rev'] = 16
+ test['end_rev'] = 16
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -820,7 +820,7 @@ def build_simple_file_move_tests(sbox, s
mc['output'] = svntest.verify.ExpectedOutput(
"Resolved conflicted state of '%s'\n" % source_path, match_all=False
)
- mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ mc['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
mc['status'].tweak(source, status='D ', moved_to=dest)
mc['status'].add({dest: Item(status='A ', moved_from=source,
copied='+', wc_rev='-')})
@@ -839,7 +839,7 @@ def build_simple_file_move_tests(sbox, s
]
)
# XXX: working breaks the move? Is that right?
- working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
+ working['status'] = svntest.actions.get_virginal_state(wc_dir, test['end_rev'])
working['status'].tweak(source, status='D ')
working['status'].add({dest: Item(status='A ', copied='+', wc_rev='-')})
working['disk'] = test['up_disk']
@@ -853,7 +853,7 @@ def build_simple_file_move_tests(sbox, s
# showed no conflict at all on udpate.
test = {}
test['start_rev'] = 16
- test['end_rev'] = 17
+ test['end_rev'] = 17
test['start_output'] = None
test['start_disk'] = None
test['start_status'] = None
@@ -905,9 +905,9 @@ def build_simple_file_move_func(sbox, so
def move_func(rev):
# execute the move
svntest.actions.run_and_verify_svn(None, None, [], "move",
- source_path, dest_path)
+ source_path, dest_path)
if move_func.extra_mv_tests:
- mv_status = svntest.actions.get_virginal_state(wc_dir, rev)
+ mv_status = svntest.actions.get_virginal_state(wc_dir, rev)
mv_status.tweak(source, status='D ', moved_to=dest)
mv_status.add({dest: Item(status='A ', moved_from=source,
copied='+', wc_rev='-')})
@@ -1192,6 +1192,48 @@ value3>>>>>>> (incoming property value)
svntest.actions.verify_disk(wc_dir, expected_disk, True)
+@Issue(4356)
+def move_missing(sbox):
+ "move a missing directory"
+
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ svntest.main.safe_rmtree(sbox.ospath('A/D/G'))
+
+ expected_err = '.*Can\'t move \'.*G\' to \'.*R\':.*'
+
+ # This move currently fails halfway between adding the dest and
+ # deleting the source
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
+ 'mv', sbox.ospath('A/D/G'),
+ sbox.ospath('R'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/D/G', 'A/D/G/tau', 'A/D/G/pi', 'A/D/G/rho',
+ status='! ', entry_status=' ')
+
+ expected_status.add({
+ 'R' : Item(status='! ', wc_rev='-',
+ entry_status='A ', entry_copied='+'),
+ 'R/pi' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ 'R/tau' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ 'R/rho' : Item(status='! ', wc_rev='-',
+ entry_status=' ', entry_copied='+'),
+ })
+
+ # Verify that the status processing doesn't crash
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # The issue is a crash when the destination is present
+ os.mkdir(sbox.ospath('R'))
+ expected_status.tweak('R', status='A ', copied='+')
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+
#######################################################################
# Run the tests
@@ -1202,6 +1244,7 @@ test_list = [ None,
shallower_move_file_test,
deeper_move_file_test,
property_merge,
+ move_missing,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/patch_tests.py Wed Jun 5 09:22:43 2013
@@ -4617,6 +4617,46 @@ def patch_lacking_trailing_eol_on_contex
expected_output, expected_disk,
expected_status, expected_skip)
+def patch_with_custom_keywords(sbox):
+ """patch with custom keywords"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_append('A/mu', '$Qq$\nAB\nZZ\n', truncate=True)
+ sbox.simple_propset('svn:keywords', 'Qq=%R', 'A/mu')
+ sbox.simple_commit()
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu',
+ contents='$Qq: %s $\nAB\nZZ\n' % sbox.repo_url)
+ svntest.actions.verify_disk(sbox.wc_dir, expected_disk)
+
+ unidiff_patch = [
+ "Index: A/mu\n",
+ "===================================================================\n",
+ "--- A/mu\t(revision 2)\n",
+ "+++ A/mu\t(working copy)\n",
+ "@@ -1,3 +1,3 @@\n",
+ " $Qq$\n",
+ "-AB\n",
+ "+ABAB\n",
+ " ZZ\n"
+ ]
+
+ patch_file_path = make_patch_path(sbox)
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [ 'U %s\n' % sbox.ospath('A/mu') ]
+ expected_disk.tweak('A/mu',
+ contents='$Qq: %s $\nABAB\nZZ\n' % sbox.repo_url)
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', wc_rev=2)
+ expected_status.tweak('A/mu', status='M ')
+ expected_skip = wc.State('', { })
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output, expected_disk,
+ expected_status, expected_skip)
+
########################################################################
#Run the tests
@@ -4669,6 +4709,7 @@ test_list = [ None,
patch_empty_file,
patch_apply_no_fuz,
patch_lacking_trailing_eol_on_context,
+ patch_with_custom_keywords,
]
if __name__ == '__main__':
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/prop_tests.py Wed Jun 5 09:22:43 2013
@@ -2603,7 +2603,7 @@ def peg_rev_base_working(sbox):
sbox.build()
wc_dir = sbox.wc_dir
-
+
# set up a local prop mod
svntest.actions.set_prop('ordinal', 'ninth\n', sbox.ospath('iota'))
sbox.simple_commit(message='r2')
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/revert_tests.py Wed Jun 5 09:22:43 2013
@@ -792,7 +792,7 @@ def status_of_missing_dir_after_revert(s
svntest.main.safe_rmtree(A_D_G_path)
expected_status.tweak('A/D/G', status='! ')
-
+
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# When using single-db, we can get back to the virginal state.
@@ -1599,13 +1599,13 @@ def revert_nonexistent(sbox):
@Issue(4168)
def revert_obstructing_wc(sbox):
"revert with an obstructing working copy"
-
+
sbox.build(create_wc=False, read_only=True)
wc_dir = sbox.wc_dir
-
+
expected_output = svntest.wc.State(wc_dir, {})
- expected_disk = svntest.wc.State(wc_dir, {})
-
+ expected_disk = svntest.wc.State(wc_dir, {})
+
# Checkout wc as depth empty
svntest.actions.run_and_verify_checkout(sbox.repo_url, wc_dir,
expected_output, expected_disk,
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/stat_tests.py Wed Jun 5 09:22:43 2013
@@ -1528,7 +1528,7 @@ def status_depth_update(sbox):
#----------------------------------------------------------------------
def status_depth_update_local_modifications(sbox):
"run 'status --depth=X -u' with local changes"
-
+
sbox.build()
wc_dir = sbox.wc_dir
A_path = sbox.ospath('A')
@@ -1978,7 +1978,7 @@ def status_not_present(sbox):
sbox.ospath('no-file'))
# Skip this test is a .svn dir exists in the root directory
-@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name()))
+@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name()))
def status_unversioned_dir(sbox):
"status on unversioned dir"
sbox.build(read_only = True, create_wc = False)
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnadmin_tests.py Wed Jun 5 09:22:43 2013
@@ -548,6 +548,8 @@ def verify_windows_paths_in_repos(sbox):
exit_code, output, errput = svntest.main.run_svnadmin("verify",
sbox.repo_dir)
+ if errput:
+ raise SVNUnexpectedStderr(errput)
# unfortunately, FSFS needs to do more checks than BDB resulting in
# different progress output
@@ -557,13 +559,13 @@ def verify_windows_paths_in_repos(sbox):
'STDERR', ["* Verifying repository metadata ...\n",
"* Verified revision 0.\n",
"* Verified revision 1.\n",
- "* Verified revision 2.\n"], errput)
+ "* Verified revision 2.\n"], output)
else:
svntest.verify.compare_and_display_lines(
"Error while running 'svnadmin verify'.",
'STDERR', ["* Verified revision 0.\n",
"* Verified revision 1.\n",
- "* Verified revision 2.\n"], errput)
+ "* Verified revision 2.\n"], output)
#----------------------------------------------------------------------
@@ -1062,8 +1064,10 @@ def verify_with_invalid_revprops(sbox):
exit_code, output, errput = svntest.main.run_svnadmin("verify",
sbox.repo_dir)
+ if errput:
+ raise SVNUnexpectedStderr(errput)
if svntest.verify.verify_outputs(
- "Output of 'svnadmin verify' is unexpected.", None, errput, None,
+ "Output of 'svnadmin verify' is unexpected.", None, output, None,
".*Verified revision 0*"):
raise svntest.Failure
@@ -1621,7 +1625,8 @@ def hotcopy_incremental_packed(sbox):
# Pack revisions 0 and 1.
svntest.actions.run_and_verify_svnadmin(
- None, None, [], "pack", os.path.join(cwd, sbox.repo_dir))
+ None, ['Packing revisions in shard 0...done.\n'], [], "pack",
+ os.path.join(cwd, sbox.repo_dir))
# Commit 5 more revs, hotcopy and pack after each commit.
for i in [1, 2, 3, 4, 5]:
@@ -1637,8 +1642,12 @@ def hotcopy_incremental_packed(sbox):
if i < 5:
sbox.simple_mkdir("newdir-%i" % i)
sbox.simple_commit()
+ if not i % 2:
+ expected_output = ['Packing revisions in shard %d...done.\n' % (i/2)]
+ else:
+ expected_output = []
svntest.actions.run_and_verify_svnadmin(
- None, None, [], "pack", os.path.join(cwd, sbox.repo_dir))
+ None, expected_output, [], "pack", os.path.join(cwd, sbox.repo_dir))
def locking(sbox):
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnauthz_tests.py Wed Jun 5 09:22:43 2013
@@ -90,7 +90,7 @@ def svnauthz_validate_file_test(sbox):
(authz_fd, authz_path) = tempfile.mkstemp()
authz_content = "[/]\n* = rw\n"
svntest.main.file_write(authz_path, authz_content)
-
+
# Valid authz file
svntest.actions.run_and_verify_svnauthz("Valid authz file", None, None,
0, False, "validate", authz_path)
@@ -162,7 +162,7 @@ def svnauthz_validate_txn_test(sbox):
repr([('validate', 'A/authz')]))
svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
- # Create an authz file
+ # Create an authz file
authz_content = "[/]\n* = rw\n"
authz_path = os.path.join(wc_dir, 'A/authz')
svntest.main.file_write(authz_path, authz_content)
@@ -249,7 +249,7 @@ def svnauthz_accessof_file_test(sbox):
"--path", "/jokes", "--username",
"groucho")
- # User groucho specified on /jokes with the repo comedy will be rw
+ # User groucho specified on /jokes with the repo comedy will be rw
svntest.actions.run_and_verify_svnauthz("User access on path with repo",
["rw\n"], None, 0, False, "accessof",
authz_path, "--path", "/jokes",
@@ -318,13 +318,13 @@ def svnauthz_accessof_repo_test(sbox):
"--path", "/jokes", "--username",
"groucho")
- # User groucho specified on /jokes with the repo comedy will be rw
+ # User groucho specified on /jokes with the repo comedy will be rw
svntest.actions.run_and_verify_svnauthz("User access on path with repo",
["rw\n"], None, 0, False, "accessof",
authz_url, "--path", "/jokes",
"--username", "groucho",
"--repository", "comedy")
-
+
def svnauthz_accessof_groups_file_test(sbox):
"test 'svnauthz accessof --groups-file' on files"
@@ -359,7 +359,7 @@ def svnauthz_accessof_groups_file_test(s
["no\n"], None,
0, False, "accessof", authz_path,
"--groups-file", groups_path,
- "--username", "groucho")
+ "--username", "groucho")
# Anonymous access specified on /jokes with the repo comedy will be no.
svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
@@ -449,7 +449,7 @@ def svnauthz_accessof_groups_repo_test(s
["no\n"], None,
0, False, "accessof", authz_url,
"--groups-file", groups_url,
- "--username", "groucho")
+ "--username", "groucho")
# Anonymous access specified on /jokes with the repo comedy will be no.
svntest.actions.run_and_verify_svnauthz("Anonymous access on path with repo",
@@ -592,7 +592,7 @@ def svnauthz_accessof_is_file_test(sbox)
"--username", "groucho",
"--is", "no")
- # User groucho specified on /jokes with the repo comedy will be rw
+ # User groucho specified on /jokes with the repo comedy will be rw
# Test --is rw returns 0.
svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
None, None, 0, False, "accessof",
@@ -623,7 +623,7 @@ def svnauthz_accessof_is_file_test(sbox)
match_all=False
)
svntest.actions.run_and_verify_svnauthz("--is with invalid authz file",
- None, expected_out, 1, False,
+ None, expected_out, 1, False,
"accessof", authz_path, "--path",
"/jokes", "--username", "groucho",
"--repository", "comedy", "--is",
@@ -761,7 +761,7 @@ def svnauthz_accessof_is_repo_test(sbox)
"--username", "groucho",
"--is", "no")
- # User groucho specified on /jokes with the repo comedy will be rw
+ # User groucho specified on /jokes with the repo comedy will be rw
# Test --is rw returns 0.
svntest.actions.run_and_verify_svnauthz("User access on path w/ repo --is rw",
None, None, 0, False, "accessof",
@@ -818,7 +818,7 @@ def svnauthz_accessof_txn_test(sbox):
'--is rw A/authz')]))
svntest.main.create_python_hook_script(pre_commit_hook, hook_instance)
- # Create an authz file
+ # Create an authz file
authz_content = "[/]\n* = rw\n"
authz_path = os.path.join(wc_dir, 'A/authz')
svntest.main.file_write(authz_path, authz_content)
@@ -875,9 +875,9 @@ def svnauthz_accessof_txn_test(sbox):
def svnauthz_compat_mode_file_test(sbox):
"test 'svnauthz-validate' compatability mode file"
-
- # Create an authz file
+
+ # Create an authz file
(authz_fd, authz_path) = tempfile.mkstemp()
authz_content = "[/]\n* = rw\n"
svntest.main.file_write(authz_path, authz_content)
@@ -912,7 +912,7 @@ def svnauthz_compat_mode_repo_test(sbox)
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
- # Create an authz file
+ # Create an authz file
authz_content = "[/]\n* = rw\n"
authz_path = os.path.join(wc_dir, 'A/authz')
svntest.main.file_write(authz_path, authz_content)
@@ -944,7 +944,7 @@ def svnauthz_compat_mode_repo_test(sbox)
authz_path)
# Check a non-existant url.
- # Exit code really should be 2 since this is an operational error.
+ # Exit code really should be 2 since this is an operational error.
svntest.actions.run_and_verify_svnauthz(
"svnauthz-validate on non-existant file", None, None, 2, True,
repo_url + "/zilch"
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svndumpfilter_tests.py Wed Jun 5 09:22:43 2013
@@ -677,7 +677,7 @@ def accepts_deltas(sbox):
load_and_verify_dumpstream(sbox, [], [], expected_revs, True, dump_out,
'--ignore-uuid')
-
+
@Issue(4234)
def dumpfilter_targets_expect_leading_slash_prefixes(sbox):
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svneditor.bat Wed Jun 5 09:22:43 2013
@@ -19,7 +19,7 @@ rem specific language governing permissi
rem under the License.
rem
rem
-rem the svneditor.py script is expected to be in the same directory as the
+rem the svneditor.py script is expected to be in the same directory as the
rem .bat file
rem SVN_TEST_PYTHON set by svntest/main.py
"%SVN_TEST_PYTHON%" "%~dp0\svneditor.py" %*
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnmucc_tests.py Wed Jun 5 09:22:43 2013
@@ -375,7 +375,7 @@ def too_many_log_messages(sbox):
svntest.main.file_append(msg_file, 'some log message')
err_msg = ["svnmucc: E205000: --message (-m), --file (-F), and "
"--with-revprop=svn:log are mutually exclusive"]
-
+
xtest_svnmucc(sbox.repo_url, err_msg,
'--non-interactive',
'-m', 'log msg',
@@ -397,11 +397,11 @@ def too_many_log_messages(sbox):
'-F', msg_file,
'--with-revprop', 'svn:log=proppy log message',
'mkdir', 'A/subdir')
-
+
@Issues(3418)
def no_log_msg_non_interactive(sbox):
"test non-interactive without a log message"
-
+
sbox.build(create_wc=False)
xtest_svnmucc(sbox.repo_url,
["svnmucc: E205001: Cannot invoke editor to get log message "
@@ -409,7 +409,7 @@ def no_log_msg_non_interactive(sbox):
], #---------
'--non-interactive',
'mkdir', 'A/subdir')
-
+
######################################################################
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svnrdump_tests.py Wed Jun 5 09:22:43 2013
@@ -367,7 +367,7 @@ def copy_bad_line_endings_load(sbox):
"load: inconsistent line endings in svn:* props"
run_load_test(sbox, "copy-bad-line-endings.dump",
expected_dumpfile_name="copy-bad-line-endings.expected.dump")
-
+
def copy_bad_line_endings2_dump(sbox):
"dump: non-LF line endings in svn:* props"
run_dump_test(sbox, "copy-bad-line-endings2.dump",
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/actions.py Wed Jun 5 09:22:43 2013
@@ -1628,7 +1628,7 @@ def run_and_verify_inherited_prop_xml(pa
expected_iprops = {}
for x in expected_inherited_props:
if sandbox.is_url(x):
- expected_iprops[x] = expected_inherited_props[x]
+ expected_iprops[x] = expected_inherited_props[x]
else:
expected_iprops[os.path.abspath(x)] = expected_inherited_props[x]
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py Wed Jun 5 09:22:43 2013
@@ -53,7 +53,7 @@ import svntest
from svntest import Failure
from svntest import Skip
-SVN_VER_MINOR = 8
+SVN_VER_MINOR = 9
######################################################################
#
@@ -135,6 +135,8 @@ wc_passwd = 'rayjandom'
# scenarios
wc_author2 = 'jconstant' # use the same password as wc_author
+stack_trace_regexp = r'(?:.*subversion[\\//].*\.c:[0-9]*,$|.*apr_err=.*)'
+
# Set C locale for command line programs
os.environ['LC_ALL'] = 'C'
@@ -520,13 +522,13 @@ def run_command_stdin(command, error_exp
*varargs)
def _line_contains_repos_diskpath(line):
- # ### Note: this assumes that either svn-test-work isn't a symlink,
+ # ### Note: this assumes that either svn-test-work isn't a symlink,
# ### or the diskpath isn't realpath()'d somewhere on the way from
# ### the server's configuration and the client's stderr. We could
# ### check for both the symlinked path and the realpath.
return \
os.path.join('cmdline', 'svn-test-work', 'repositories') in line \
- or os.path.join('cmdline', 'svn-test-work', 'local_tmp', 'repos') in line
+ or os.path.join('cmdline', 'svn-test-work', 'local_tmp', 'repos') in line
for lines, name in [[stdout_lines, "stdout"], [stderr_lines, "stderr"]]:
if is_ra_type_file() or 'svnadmin' in command or 'svnlook' in command:
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/sandbox.py Wed Jun 5 09:22:43 2013
@@ -362,6 +362,13 @@ class Sandbox:
DEST is a relpath relative to the WC."""
open(self.ospath(dest), truncate and 'w' or 'a').write(contents)
+ def simple_lock(self, *targets):
+ """Lock TARGETS in the WC.
+ TARGETS are relpaths relative to the WC."""
+ assert len(targets) > 0
+ targets = self.ospaths(targets)
+ svntest.main.run_svn(False, 'lock', *targets)
+
def is_url(target):
return (target.startswith('^/')
@@ -389,7 +396,7 @@ def _cleanup_test_path(path, retrying=Fa
logger.info("CLEANUP: %s", path)
try:
- svntest.main.safe_rmtree(path)
+ svntest.main.safe_rmtree(path, retrying)
except:
logger.info("WARNING: cleanup failed, will try again later")
_deferred_test_paths.append(path)
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/update_tests.py Wed Jun 5 09:22:43 2013
@@ -6015,7 +6015,7 @@ def update_edit_delete_obstruction(sbox)
'A/D/H' : Item(status=' ', treeconflict='U'),
'A/D/H/chi' : Item(status=' ', treeconflict='D'),
'A/B' : Item(prev_status=' ', prev_treeconflict='D', # Replacement
- status=' ', treeconflict='A'),
+ status=' ', treeconflict='A'),
'iota' : Item(status='A ', prev_status='D '), # Replacement
})
@@ -6277,7 +6277,7 @@ def update_removes_switched(sbox):
'C' : Item(status=' ', wc_rev='3'),
'mu' : Item(status=' ', wc_rev='3'),
})
-
+
# And this final update brings back the node, as it was before switching.
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
Modified: subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/branches/verify-keep-going/subversion/tests/cmdline/upgrade_tests.py Wed Jun 5 09:22:43 2013
@@ -1278,6 +1278,153 @@ def upgrade_from_1_7_conflict(sbox):
# a working copy used to cause a pointless 'upgrade required' error.
svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+def do_iprops_upgrade(nonrootfile, rootfile, sbox):
+
+ wc_dir = sbox.wc_dir
+
+ replace_sbox_with_tarfile(sbox, nonrootfile)
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+ 'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+ expected_output = []
+ expected_disk = svntest.wc.State('', {
+ 'E' : Item(),
+ 'E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'E/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'F' : Item(),
+ 'lambda' : Item(contents="This is the file 'lambda'.\n"),
+ })
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '' : Item(),
+ 'E' : Item(switched='S'),
+ 'E/alpha' : Item(),
+ 'E/beta' : Item(),
+ 'F' : Item(),
+ 'lambda' : Item(),
+ })
+ expected_status.tweak(status=' ', wc_rev=2)
+
+ # No inherited props after upgrade until an update
+ expected_iprops = {}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+ # Update populates the inherited props
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/A' : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ wc_dir, expected_iprops, expected_explicit_props)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/X' : {'pX' : 'vX'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('E'), expected_iprops, expected_explicit_props)
+
+ # Now try with a repository root working copy
+ replace_sbox_with_tarfile(sbox, rootfile)
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
+ 'file:///tmp/repo', sbox.repo_url, wc_dir)
+
+ # Unswitched inherited props available after upgrade
+ expected_iprops = {wc_dir : {'p' : 'v'},
+ sbox.ospath('A') : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+ # Switched inherited props not populated until update after upgrade
+ expected_iprops = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+ expected_disk = svntest.wc.State('', {
+ 'A' : Item(),
+ 'A/B' : Item(),
+ 'A/B/E' : Item(),
+ })
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '' : Item(),
+ 'A' : Item(),
+ 'A/B' : Item(),
+ 'A/B/E' : Item(switched='S'),
+ })
+ expected_status.tweak(status=' ', wc_rev=2)
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ expected_iprops = {wc_dir : {'p' : 'v'},
+ sbox.ospath('A') : {'pA' : 'vA'}}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B'), expected_iprops, expected_explicit_props)
+
+ expected_iprops = {sbox.repo_url : {'p' : 'v'},
+ sbox.repo_url + '/X' : {'pX' : 'vX'}}
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(
+ sbox.ospath('A/B/E'), expected_iprops, expected_explicit_props)
+
+def iprops_upgrade(sbox):
+ "inherited properties after upgrade from 1.7"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'X')
+ sbox.simple_propset('p', 'v', '')
+ sbox.simple_propset('pA', 'vA', 'A')
+ sbox.simple_propset('pX', 'vX', 'X')
+ sbox.simple_commit()
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+ do_iprops_upgrade('iprops_upgrade_nonroot.tar.bz2',
+ 'iprops_upgrade_root.tar.bz2',
+ sbox)
+
+def iprops_upgrade1_6(sbox):
+ "inherited properties after upgrade from 1.6"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'X')
+ sbox.simple_propset('p', 'v', '')
+ sbox.simple_propset('pA', 'vA', 'A')
+ sbox.simple_propset('pX', 'vX', 'X')
+ sbox.simple_commit()
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ '8f4d0ebe-2ebf-4f62-ad11-804fd88c2382')
+
+ do_iprops_upgrade('iprops_upgrade_nonroot1_6.tar.bz2',
+ 'iprops_upgrade_root1_6.tar.bz2',
+ sbox)
+
+def changelist_upgrade_1_6(sbox):
+ "upgrade from 1.6 with changelist"
+
+ sbox.build(create_wc = False)
+ svntest.main.run_svnadmin('setuuid', sbox.repo_dir,
+ 'aa4c97bd-2e1a-4e55-a1e5-3db22cff2673')
+ replace_sbox_with_tarfile(sbox, 'changelist_upgrade_1_6.tar.bz2')
+ svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
+ exit_code, output, errput = svntest.main.run_svn(None, 'info', sbox.wc_dir,
+ '--depth', 'infinity',
+ '--changelist', 'foo')
+ paths = [x for x in output if x[:6] == 'Path: ']
+ expected_paths = ['Path: %s\n' % sbox.ospath('A/D/gamma')]
+ if paths != expected_paths:
+ raise svntest.Failure("changelist not matched")
+
########################################################################
# Run the tests
@@ -1330,6 +1477,9 @@ test_list = [ None,
upgrade_missing_replaced,
upgrade_not_present_replaced,
upgrade_from_1_7_conflict,
+ iprops_upgrade,
+ iprops_upgrade1_6,
+ changelist_upgrade_1_6,
]
Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_client/client-test.c Wed Jun 5 09:22:43 2013
@@ -400,7 +400,7 @@ test_patch(const svn_test_opts_t *opts,
SVN_ERR(svn_io_file_write(patch_file, unidiff_patch[i], &len, pool));
SVN_TEST_ASSERT(len == strlen(unidiff_patch[i]));
}
- SVN_ERR(svn_io_file_flush_to_disk(patch_file, pool));
+ SVN_ERR(svn_io_file_flush(patch_file, pool));
/* Apply the patch. */
pcb.patched_tempfiles = apr_hash_make(pool);
Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/random-test.c Wed Jun 5 09:22:43 2013
@@ -500,6 +500,8 @@ random_combine_test(apr_pool_t *pool)
{
apr_uint32_t seed;
svn_error_t *err = do_random_combine_test(pool, &seed);
+ if (err)
+ fprintf(stderr, "SEED: %lu\n", (unsigned long)seed);
return err;
}
Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h?rev=1489765&r1=1489764&r2=1489765&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_delta/range-index-test.h Wed Jun 5 09:22:43 2013
@@ -27,7 +27,7 @@
#include "../../libsvn_delta/compose_delta.c"
static range_index_node_t *prev_node, *prev_prev_node;
-static apr_off_t
+static apr_size_t
walk_range_index(range_index_node_t *node, const char **msg)
{
apr_off_t ret;
@@ -70,19 +70,18 @@ print_node_data(range_index_node_t *node
{
if (-node->target_offset == ndx)
{
- printf(" * Node: [%3"APR_OFF_T_FMT
- ",%3"APR_OFF_T_FMT
- ") = %-5"APR_OFF_T_FMT"%s\n",
+ printf(" * Node: [%3"APR_SIZE_T_FMT
+ ",%3"APR_SIZE_T_FMT
+ ") = %-5"APR_SIZE_T_FMT"%s\n",
node->offset, node->limit, -node->target_offset, msg);
}
else
{
- printf(" Node: [%3"APR_OFF_T_FMT
- ",%3"APR_OFF_T_FMT
- ") = %"APR_OFF_T_FMT"\n",
+ printf(" Node: [%3"APR_SIZE_T_FMT
+ ",%3"APR_SIZE_T_FMT
+ ") = %"APR_SIZE_T_FMT"\n",
node->offset, node->limit,
- (node->target_offset < 0
- ? -node->target_offset : node->target_offset));
+ node->target_offset);
}
}
@@ -154,13 +153,13 @@ random_range_index_test(apr_pool_t *pool
ndx = create_range_index(pool);
for (i = 1; i <= iterations; ++i)
{
- apr_off_t offset = svn_test_rand(&seed) % 47;
- apr_off_t limit = offset + svn_test_rand(&seed) % 16 + 1;
+ apr_size_t offset = svn_test_rand(&seed) % 47;
+ apr_size_t limit = offset + svn_test_rand(&seed) % 16 + 1;
range_list_node_t *list, *r;
- apr_off_t ret;
+ apr_size_t ret;
const char *msg2;
- printf("%3d: Inserting [%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT") ...",
+ printf("%3d: Inserting [%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT") ...",
i, offset, limit);
splay_range_index(offset, ndx);
list = build_range_list(offset, limit, ndx);
@@ -170,7 +169,7 @@ random_range_index_test(apr_pool_t *pool
if (ret == 0)
{
for (r = list; r; r = r->next)
- printf(" %s[%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT")",
+ printf(" %s[%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT")",
(r->kind == range_from_source ?
(++src_cp, "S") : (++tgt_cp, "T")),
r->offset, r->limit);