You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/01/09 10:31:15 UTC
svn commit: r1556765 [11/12] - in /subversion/branches/fsfs-ucsnorm: ./
contrib/server-side/fsfsfixer/fixer/ subversion/bindings/javahl/native/
subversion/bindings/javahl/native/jniwrapper/
subversion/bindings/javahl/src/org/apache/subversion/javahl/ s...
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/lock_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/lock_tests.py Thu Jan 9 09:31:10 2014
@@ -1309,7 +1309,7 @@ def unlock_wrong_token(sbox):
### The error message returned is actually this, but let's worry about that
### another day...
svntest.actions.run_and_verify_svn2(
- None, None, ".*((No lock on path)|(400 Bad Request))", 0,
+ None, None, ".*(No lock on path)", 0,
'unlock', file_path)
#----------------------------------------------------------------------
@@ -1365,7 +1365,7 @@ def unlocked_lock_of_other_user(sbox):
# now try to unlock with user jconstant, should fail but exit 0.
if sbox.repo_url.startswith("http"):
- expected_err = ".*403 Forbidden.*"
+ expected_err = "svn: warning: W160039: .*[Uu]nlock of .*403 Forbidden.*"
else:
expected_err = "svn: warning: W160039: User '%s' is trying to use a lock owned by "\
"'%s'.*" % (svntest.main.wc_author2, svntest.main.wc_author)
@@ -1460,8 +1460,7 @@ def lock_path_not_in_head(sbox):
'-m', 'Some deletions', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r1', wc_dir)
expected_lock_fail_err_re = "svn: warning: W160042: " \
- "((Path .* doesn't exist in HEAD revision)" \
- "|(L(ock|OCK) request (on '.*' )?failed: 405 Method Not Allowed))"
+ "(Path .* doesn't exist in HEAD revision)"
# Issue #3524 These lock attemtps were triggering an assert over ra_serf:
#
# working_copies\lock_tests-37>svn lock A\D
@@ -1521,7 +1520,6 @@ def verify_path_escaping(sbox):
#----------------------------------------------------------------------
# Issue #3674: Replace + propset of locked file fails over DAV
-@XFail(svntest.main.is_ra_type_dav)
@Issue(3674)
def replace_and_propset_locked_path(sbox):
"test replace + propset of locked file"
@@ -1554,11 +1552,9 @@ def replace_and_propset_locked_path(sbox
# Replace A/D/G and A/D/G/rho, propset on A/D/G/rho.
svntest.actions.run_and_verify_svn(None, None, [],
'rm', G_path)
- # Recreate path for single-db
- if not os.path.exists(G_path):
- os.mkdir(G_path)
+
svntest.actions.run_and_verify_svn(None, None, [],
- 'add', G_path)
+ 'mkdir', G_path)
svntest.main.file_append(rho_path, "This is the new file 'rho'.\n")
svntest.actions.run_and_verify_svn(None, None, [],
'add', rho_path)
@@ -1685,7 +1681,7 @@ def block_unlock_if_pre_unlock_hook_fail
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Make sure the unlock operation fails as pre-unlock hook blocks it.
- expected_unlock_fail_err_re = ".*error text|.*500 Internal Server Error"
+ expected_unlock_fail_err_re = ".*error text"
svntest.actions.run_and_verify_svn2(None, None, expected_unlock_fail_err_re,
1, 'unlock', pi_path)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1876,11 +1872,11 @@ def drop_locks_on_parent_deletion(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/B',
- 'A/B/E',
- 'A/B/E/alpha',
- 'A/B/F',
- 'A/B/lambda',
- wc_rev='3')
+ 'A/B/E',
+ 'A/B/E/alpha',
+ 'A/B/F',
+ 'A/B/lambda',
+ wc_rev='3')
expected_status.remove('A/B/E/beta')
svntest.actions.run_and_verify_commit(wc_dir,
@@ -1888,7 +1884,7 @@ def drop_locks_on_parent_deletion(sbox):
expected_status,
None,
wc_dir)
-
+
def copy_with_lock(sbox):
"""copy with lock on source"""
@@ -1911,15 +1907,57 @@ def copy_with_lock(sbox):
'A/B/E2/beta' : Item(status=' ', wc_rev=2),
})
- # This is really a regression test for httpd: 2.2.25 and 2.4.6 have
- # a bug that causes mod_dav to check for locks on the copy source
- # and so the commit fails.
+ # This is really a regression test for httpd: 2.2.25 and 2.4.6, and
+ # earlier, have a bug that causes mod_dav to check for locks on the
+ # copy source and so the commit fails.
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
wc_dir)
-
+
+def lock_hook_messages(sbox):
+ "verify (un)lock message is transferred correctly"
+
+ sbox.build(create_wc = False)
+ repo_dir = sbox.repo_dir
+
+ iota_url = sbox.repo_url + "/iota"
+ mu_url = sbox.repo_url + "/A/mu"
+
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
+ iota_url)
+
+ error_msg = "Text with <angle brackets> & ampersand"
+ svntest.actions.create_failing_hook(repo_dir, "pre-lock", error_msg)
+ svntest.actions.create_failing_hook(repo_dir, "pre-unlock", error_msg)
+
+ _, _, actual_stderr = svntest.actions.run_and_verify_svn(
+ None, [], svntest.verify.AnyOutput,
+ 'lock', mu_url)
+ if len(actual_stderr) > 2:
+ actual_stderr = actual_stderr[-2:]
+ expected_err = [
+ 'svn: E165001: ' + svntest.actions.hook_failure_message('pre-lock'),
+ error_msg + "\n",
+ ]
+ svntest.verify.compare_and_display_lines(None, 'STDERR',
+ expected_err, actual_stderr)
+
+
+ _, _, actual_stderr = svntest.actions.run_and_verify_svn(
+ None, [], svntest.verify.AnyOutput,
+ 'unlock', iota_url)
+ if len(actual_stderr) > 2:
+ actual_stderr = actual_stderr[-2:]
+ expected_err = [
+ 'svn: E165001: ' + svntest.actions.hook_failure_message('pre-unlock'),
+ error_msg + "\n",
+ ]
+ svntest.verify.compare_and_display_lines(None, 'STDERR',
+ expected_err, actual_stderr)
+
+
########################################################################
# Run the tests
@@ -1974,6 +2012,7 @@ test_list = [ None,
commit_stolen_lock,
drop_locks_on_parent_deletion,
copy_with_lock,
+ lock_hook_messages,
]
if __name__ == '__main__':
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/move_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/move_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/move_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/move_tests.py Thu Jan 9 09:31:10 2014
@@ -1553,6 +1553,29 @@ def copy_move_commit(sbox):
sbox.simple_move('A/D/GG', 'A/D/GG-moved')
sbox.simple_commit('A/D/GG-moved')
+def move_to_from_external(sbox):
+ "move to and from an external"
+
+ sbox.build()
+ sbox.simple_propset('svn:externals', '^/A/D/G GG', '')
+ sbox.simple_update()
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'move',
+ sbox.ospath('GG/tau'),
+ sbox.ospath('tau'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'move',
+ sbox.ospath('iota'),
+ sbox.ospath('GG/tau'))
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'ci', '-m', 'Commit both',
+ sbox.ospath(''),
+ sbox.ospath('GG'))
+
+
#######################################################################
# Run the tests
@@ -1569,6 +1592,7 @@ test_list = [ None,
move_many_update_add,
move_del_moved,
copy_move_commit,
+ move_to_from_external,
]
if __name__ == '__main__':
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/prop_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/prop_tests.py Thu Jan 9 09:31:10 2014
@@ -808,7 +808,6 @@ def copy_inherits_special_props(sbox):
# non-Posix platforms, we won't have to skip here:
@Skip(is_non_posix_and_non_windows_os)
@Issue(3086)
-@XFail(svntest.main.is_ra_type_dav)
def revprop_change(sbox):
"set, get, and delete a revprop change"
@@ -1634,7 +1633,6 @@ def props_over_time(sbox):
# XFail the same reason revprop_change() is.
@SkipUnless(svntest.main.server_enforces_date_syntax)
-@XFail(svntest.main.is_ra_type_dav)
@Issue(3086)
def invalid_propvalues(sbox):
"test handling invalid svn:* property values"
@@ -1740,9 +1738,9 @@ def post_revprop_change_hook(sbox):
svntest.actions.create_failing_hook(repo_dir, 'post-revprop-change',
error_msg)
- # serf/neon/mod_dav_svn give SVN_ERR_RA_DAV_REQUEST_FAILED
+ # serf/mod_dav_svn give SVN_ERR_RA_DAV_PROPPATCH_FAILED
# file/svn give SVN_ERR_REPOS_HOOK_FAILURE
- expected_error = 'svn: (E175002|E165001).*post-revprop-change hook failed'
+ expected_error = 'svn: (E175008|E165001).*post-revprop-change hook failed'
svntest.actions.run_and_verify_svn(None, [], expected_error,
'ps', '--revprop', '-r0', 'p', 'v',
@@ -2639,10 +2637,23 @@ def xml_unsafe_author(sbox):
svntest.actions.run_and_verify_info(expected_info, wc_dir)
# mod_dav_svn sends svn:author (via PROPFIND for DAV)
+ # Since r1553367 this works correctly on ra_serf, since we now request
+ # a single property value which somehow triggers different behavior
svntest.actions.run_and_verify_svn(None, ['foo\bbar'], [],
'propget', '--revprop', '-r', '1',
'svn:author', '--strict', wc_dir)
+ # But a proplist of this property value still fails via DAV.
+ expected_output = [
+ 'Unversioned properties on revision 1:\n',
+ ' svn:author\n',
+ ' svn:date\n',
+ ' svn:log\n'
+ ]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'proplist', '--revprop', '-r', '1',
+ wc_dir)
+
########################################################################
# Run the tests
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/relocate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/relocate_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/relocate_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/relocate_tests.py Thu Jan 9 09:31:10 2014
@@ -42,7 +42,7 @@ Item = svntest.wc.StateItem
from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
from externals_tests import change_external
-from switch_tests import do_routine_switching
+from svntest.deeptrees import do_routine_switching
#----------------------------------------------------------------------
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnadmin_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnadmin_tests.py Thu Jan 9 09:31:10 2014
@@ -1940,6 +1940,7 @@ def mergeinfo_race(sbox):
@Issue(4213)
+@Skip(svntest.main.is_fs_type_fsx)
def recover_old(sbox):
"recover --pre-1.4-compatible"
svntest.main.safe_rmtree(sbox.repo_dir, 1)
@@ -2183,24 +2184,15 @@ def verify_denormalized_names(sbox):
expected_output_regex_list = [
".*Verified revision 0.",
- # A/{Eacute}
- "WARNING 0x0003: Denormalized directory name 'A/.*'",
- # A/{icircumflex}{odiaeresis}ta
- "WARNING 0x0003: Denormalized file name 'A/.*ta'",
".*Verified revision 1.",
".*Verified revision 2.",
".*Verified revision 3.",
# A/{Eacute}/{aring}lpha
- "WARNING 0x0003: Denormalized file name 'A/.*/.*lpha'",
- "WARNING 0x0004: Duplicate representation of path 'A/.*/.*lpha'",
+ "WARNING 0x0003: Duplicate representation of path 'A/.*/.*lpha'",
".*Verified revision 4.",
".*Verified revision 5.",
- # Q/{aring}lpha
- "WARNING 0x0005: Denormalized path '/Q/.*lpha'"
- # A/{Eacute}
- " in svn:mergeinfo property of 'A/.*'",
# Q/{aring}lpha
- "WARNING 0x0006: Duplicate representation of path '/Q/.*lpha'"
+ "WARNING 0x0004: Duplicate representation of path '/Q/.*lpha'"
# A/{Eacute}
" in svn:mergeinfo property of 'A/.*'",
".*Verified revision 6.",
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnmucc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnmucc_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnmucc_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnmucc_tests.py Thu Jan 9 09:31:10 2014
@@ -310,22 +310,21 @@ def basic_svnmucc(sbox):
# Expected cannot be younger error
xtest_svnmucc(sbox.repo_url,
- ['svnmucc: E205000: Copy source revision cannot be younger ' +
- 'than base revision',
+ ['svnmucc: E160006: No such revision 42',
], #---------
'-m', 'log msg',
'cp', '42', 'a', 'b')
# Expected already exists error
xtest_svnmucc(sbox.repo_url,
- ["svnmucc: E125002: 'foo' already exists",
+ ["svnmucc: E160020: Path 'foo' already exists",
], #---------
'-m', 'log msg',
'cp', '17', 'a', 'foo')
# Expected copy_src already exists error
xtest_svnmucc(sbox.repo_url,
- ["svnmucc: E125002: 'a/bar' (from 'foo/bar:17') already exists",
+ ["svnmucc: E160020: Path 'a/bar' already exists",
], #---------
'-m', 'log msg',
'cp', '17', 'foo', 'a',
@@ -333,7 +332,7 @@ def basic_svnmucc(sbox):
# Expected not found error
xtest_svnmucc(sbox.repo_url,
- ["svnmucc: E125002: 'a' not found",
+ ["svnmucc: E160013: Path 'a' not found in revision 17",
], #---------
'-m', 'log msg',
'cp', '17', 'a', 'b')
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnsync_authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnsync_authz_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnsync_authz_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svnsync_authz_tests.py Thu Jan 9 09:31:10 2014
@@ -56,7 +56,7 @@ Item = svntest.wc.StateItem
def basic_authz(sbox):
"verify that unreadable content is not synced"
- sbox.build("svnsync-basic-authz")
+ sbox.build(create_wc = False)
write_restrictive_svnserve_conf(sbox.repo_dir)
@@ -99,7 +99,7 @@ def basic_authz(sbox):
def copy_from_unreadable_dir(sbox):
"verify that copies from unreadable dirs work"
- sbox.build("svnsync-copy-from-unreadable-dir")
+ sbox.build()
B_url = sbox.repo_url + '/A/B'
P_url = sbox.repo_url + '/A/P'
@@ -207,7 +207,7 @@ def copy_from_unreadable_dir(sbox):
def copy_with_mod_from_unreadable_dir(sbox):
"verify copies with mods from unreadable dirs"
- sbox.build("svnsync-copy-with-mod-from-unreadable-dir")
+ sbox.build()
# Make a copy of the B directory.
svntest.actions.run_and_verify_svn(None,
@@ -315,7 +315,7 @@ def copy_with_mod_from_unreadable_dir(sb
def copy_with_mod_from_unreadable_dir_and_copy(sbox):
"verify copies with mods from unreadable dirs +copy"
- sbox.build("svnsync-copy-with-mod-from-unreadable-dir-and-copy")
+ sbox.build()
# Make a copy of the B directory.
svntest.actions.run_and_verify_svn(None,
@@ -396,6 +396,9 @@ def copy_with_mod_from_unreadable_dir_an
def identity_copy(sbox):
"copy UTF-8 svn:* props identically"
+
+ sbox.build(create_wc = False)
+
orig_lc_all = locale.setlocale(locale.LC_ALL)
other_locales = [ "English.1252", "German.1252", "French.1252",
"en_US.ISO-8859-1", "en_GB.ISO-8859-1", "de_DE.ISO-8859-1",
@@ -420,7 +423,7 @@ def identity_copy(sbox):
def specific_deny_authz(sbox):
"verify if specifically denied paths dont sync"
- sbox.build("specific-deny-authz")
+ sbox.build()
dest_sbox = sbox.clone_dependent()
build_repos(dest_sbox)
@@ -440,18 +443,19 @@ def specific_deny_authz(sbox):
# For mod_dav_svn's parent path setup we need per-repos permissions in
# the authz file...
if sbox.repo_url.startswith('http'):
+ args = tuple(s.authz_name() for s in [sbox, sbox, sbox, dest_sbox])
svntest.main.file_write(sbox.authz_file,
- "[specific-deny-authz:/]\n"
+ "[%s:/]\n"
"* = r\n"
"\n"
- "[specific-deny-authz:/A]\n"
+ "[%s:/A]\n"
"* = \n"
"\n"
- "[specific-deny-authz:/A_COPY/B/lambda]\n"
+ "[%s:/A_COPY/B/lambda]\n"
"* = \n"
"\n"
- "[specific-deny-authz-1:/]\n"
- "* = rw\n")
+ "[%s:/]\n"
+ "* = rw\n" % args)
# Otherwise we can just go with the permissions needed for the source
# repository.
else:
@@ -481,7 +485,7 @@ def copy_delete_unreadable_child(sbox):
"copy, then rm at-src-unreadable child"
# Prepare the source: Greek tree (r1), cp+rm (r2).
- sbox.build("copy-delete-unreadable-child")
+ sbox.build(create_wc = False)
svntest.actions.run_and_verify_svnmucc(None, None, [],
'-m', 'r2',
'-U', sbox.repo_url,
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/deeptrees.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/deeptrees.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/deeptrees.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/deeptrees.py Thu Jan 9 09:31:10 2014
@@ -196,11 +196,7 @@ deep_trees_after_leaf_del = wc.State('',
# deep trees state after a call to deep_trees_leaf_del with no commit
def deep_trees_after_leaf_del_no_ci(wc_dir):
- if svntest.main.wc_is_singledb(wc_dir):
- return deep_trees_after_leaf_del
- else:
- return deep_trees_empty_dirs
-
+ return deep_trees_after_leaf_del
def deep_trees_tree_del(base):
"""Helper function for deep trees test cases. Delete top-level dirs."""
@@ -240,31 +236,9 @@ deep_trees_after_tree_del = wc.State('',
'DDD' : Item(),
})
-# deep trees state without any files
-deep_trees_empty_dirs = wc.State('', {
- 'F' : Item(),
- 'D' : Item(),
- 'D/D1' : Item(),
- 'DF' : Item(),
- 'DF/D1' : Item(),
- 'DD' : Item(),
- 'DD/D1' : Item(),
- 'DD/D1/D2' : Item(),
- 'DDF' : Item(),
- 'DDF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'DDD' : Item(),
- 'DDD/D1' : Item(),
- 'DDD/D1/D2' : Item(),
- 'DDD/D1/D2/D3' : Item(),
- })
-
# deep trees state after a call to deep_trees_tree_del with no commit
def deep_trees_after_tree_del_no_ci(wc_dir):
- if svntest.main.wc_is_singledb(wc_dir):
- return deep_trees_after_tree_del
- else:
- return deep_trees_empty_dirs
+ return deep_trees_after_tree_del
def deep_trees_tree_del_repos(base):
"""Helper function for deep trees test cases. Delete top-level dirs,
@@ -1018,3 +992,192 @@ def deep_trees_run_tests_scheme_for_merg
raise
+### Bummer. It would be really nice to have easy access to the URL
+### member of our entries files so that switches could be testing by
+### examining the modified ancestry. But status doesn't show this
+### information. Hopefully in the future the cmdline binary will have
+### a subcommand for dumping multi-line detailed information about
+### versioned things. Until then, we'll stick with the traditional
+### verification methods.
+###
+### gjs says: we have 'svn info' now
+
+def get_routine_status_state(wc_dir):
+ """get the routine status list for WC_DIR at the completion of an
+ initial call to do_routine_switching()"""
+
+ # Construct some paths for convenience
+ ADH_path = os.path.join(wc_dir, 'A', 'D', 'H')
+ chi_path = os.path.join(ADH_path, 'chi')
+ omega_path = os.path.join(ADH_path, 'omega')
+ psi_path = os.path.join(ADH_path, 'psi')
+ pi_path = os.path.join(ADH_path, 'pi')
+ tau_path = os.path.join(ADH_path, 'tau')
+ rho_path = os.path.join(ADH_path, 'rho')
+
+ # Now generate a state
+ state = svntest.actions.get_virginal_state(wc_dir, 1)
+ state.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/F', 'A/B/lambda')
+ state.add({
+ 'A/B/pi' : Item(status=' ', wc_rev=1),
+ 'A/B/tau' : Item(status=' ', wc_rev=1),
+ 'A/B/rho' : Item(status=' ', wc_rev=1),
+ })
+
+ return state
+
+#----------------------------------------------------------------------
+
+def get_routine_disk_state(wc_dir):
+ """get the routine disk list for WC_DIR at the completion of an
+ initial call to do_routine_switching()"""
+
+ disk = svntest.main.greek_state.copy()
+
+ # iota has the same contents as gamma
+ disk.tweak('iota', contents=disk.desc['A/D/gamma'].contents)
+
+ # A/B/* no longer exist, but have been replaced by copies of A/D/G/*
+ disk.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/F', 'A/B/lambda')
+ disk.add({
+ 'A/B/pi' : Item("This is the file 'pi'.\n"),
+ 'A/B/rho' : Item("This is the file 'rho'.\n"),
+ 'A/B/tau' : Item("This is the file 'tau'.\n"),
+ })
+
+ return disk
+
+#----------------------------------------------------------------------
+
+def do_routine_switching(wc_dir, repo_url, verify):
+ """perform some routine switching of the working copy WC_DIR for
+ other tests to use. If VERIFY, then do a full verification of the
+ switching, else don't bother."""
+
+ ### Switch the file `iota' to `A/D/gamma'.
+
+ # Construct some paths for convenience
+ iota_path = os.path.join(wc_dir, 'iota')
+ gamma_url = repo_url + '/A/D/gamma'
+
+ if verify:
+ # Create expected output tree
+ expected_output = svntest.wc.State(wc_dir, {
+ 'iota' : Item(status='U '),
+ })
+
+ # Create expected disk tree (iota will have gamma's contents)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('iota',
+ contents=expected_disk.desc['A/D/gamma'].contents)
+
+ # Create expected status tree
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('iota', switched='S')
+
+ # Do the switch and check the results in three ways.
+ svntest.actions.run_and_verify_switch(wc_dir, iota_path, gamma_url,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None,
+ False, '--ignore-ancestry')
+ else:
+ svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
+ gamma_url, iota_path)
+
+ ### Switch the directory `A/B' to `A/D/G'.
+
+ # Construct some paths for convenience
+ AB_path = os.path.join(wc_dir, 'A', 'B')
+ ADG_url = repo_url + '/A/D/G'
+
+ if verify:
+ # Create expected output tree
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/B/E' : Item(status='D '),
+ 'A/B/F' : Item(status='D '),
+ 'A/B/lambda' : Item(status='D '),
+ 'A/B/pi' : Item(status='A '),
+ 'A/B/tau' : Item(status='A '),
+ 'A/B/rho' : Item(status='A '),
+ })
+
+ # Create expected disk tree (iota will have gamma's contents,
+ # A/B/* will look like A/D/G/*)
+ expected_disk = get_routine_disk_state(wc_dir)
+
+ # Create expected status
+ expected_status = get_routine_status_state(wc_dir)
+ expected_status.tweak('iota', 'A/B', switched='S')
+
+ # Do the switch and check the results in three ways.
+ svntest.actions.run_and_verify_switch(wc_dir, AB_path, ADG_url,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None,
+ False, '--ignore-ancestry')
+ else:
+ svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
+ ADG_url, AB_path)
+
+
+#----------------------------------------------------------------------
+
+def commit_routine_switching(wc_dir, verify):
+ "Commit some stuff in a routinely-switched working copy."
+
+ # Make some local mods
+ iota_path = os.path.join(wc_dir, 'iota')
+ Bpi_path = os.path.join(wc_dir, 'A', 'B', 'pi')
+ Gpi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
+ Z_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
+ zeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z', 'zeta')
+
+ svntest.main.file_append(iota_path, "apple")
+ svntest.main.file_append(Bpi_path, "melon")
+ svntest.main.file_append(Gpi_path, "banana")
+ os.mkdir(Z_path)
+ svntest.main.file_append(zeta_path, "This is the file 'zeta'.\n")
+ svntest.main.run_svn(None, 'add', Z_path)
+
+ # Try to commit. We expect this to fail because, if all the
+ # switching went as expected, A/B/pi and A/D/G/pi point to the
+ # same URL. We don't allow this.
+ svntest.actions.run_and_verify_commit(
+ wc_dir, None, None,
+ "svn: E195003: Cannot commit both .* as they refer to the same URL$",
+ wc_dir)
+
+ # Okay, that all taken care of, let's revert the A/D/G/pi path and
+ # move along. Afterward, we should be okay to commit. (Sorry,
+ # holsta, that banana has to go...)
+ svntest.main.run_svn(None, 'revert', Gpi_path)
+
+ # Create expected output tree.
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/D/G/Z' : Item(verb='Adding'),
+ 'A/D/G/Z/zeta' : Item(verb='Adding'),
+ 'iota' : Item(verb='Sending'),
+ 'A/B/pi' : Item(verb='Sending'),
+ })
+
+ # Created expected status tree.
+ expected_status = get_routine_status_state(wc_dir)
+ expected_status.tweak('iota', 'A/B', switched='S')
+ expected_status.tweak('iota', 'A/B/pi', wc_rev=2, status=' ')
+ expected_status.add({
+ 'A/D/G/Z' : Item(status=' ', wc_rev=2),
+ 'A/D/G/Z/zeta' : Item(status=' ', wc_rev=2),
+ })
+
+ # Commit should succeed
+ if verify:
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None, wc_dir)
+ else:
+ svntest.main.run_svn(None,
+ 'ci', '-m', 'log msg', wc_dir)
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/sandbox.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/svntest/sandbox.py Thu Jan 9 09:31:10 2014
@@ -63,23 +63,9 @@ class Sandbox:
self.repo_dir = svntest.main.pristine_greek_repos_dir
self.repo_url = svntest.main.pristine_greek_repos_url
- ### TODO: Move this into to the build() method
- # For dav tests we need a single authz file which must be present,
- # so we recreate it each time a sandbox is created with some default
- # contents, making sure that an empty file is never present
if self.repo_url.startswith("http"):
- # this dir doesn't exist out of the box, so we may have to make it
- if not os.path.exists(svntest.main.work_dir):
- os.makedirs(svntest.main.work_dir)
self.authz_file = os.path.join(svntest.main.work_dir, "authz")
- tmp_authz_file = os.path.join(svntest.main.work_dir, "authz-" + self.name)
- open(tmp_authz_file, 'w').write("[/]\n* = rw\n")
- shutil.move(tmp_authz_file, self.authz_file)
self.groups_file = os.path.join(svntest.main.work_dir, "groups")
-
- # For svnserve tests we have a per-repository authz file, and it
- # doesn't need to be there in order for things to work, so we don't
- # have any default contents.
elif self.repo_url.startswith("svn"):
self.authz_file = os.path.join(self.repo_dir, "conf", "authz")
self.groups_file = os.path.join(self.repo_dir, "conf", "groups")
@@ -108,9 +94,24 @@ class Sandbox:
and check out a WC from it (unless CREATE_WC is false). Change the
sandbox's name to NAME. See actions.make_repo_and_wc() for details."""
self._set_name(name, read_only)
+ self._ensure_authz()
svntest.actions.make_repo_and_wc(self, create_wc, read_only, minor_version)
self._is_built = True
+ def _ensure_authz(self):
+ "make sure the repository is accessible"
+
+ if self.repo_url.startswith("http"):
+ default_authz = "[/]\n* = rw\n"
+
+ if (svntest.main.options.parallel == 0
+ and (not os.path.isfile(self.authz_file)
+ or open(self.authz_file,'r').read() != default_authz)):
+
+ tmp_authz_file = os.path.join(svntest.main.work_dir, "authz-" + self.name)
+ open(tmp_authz_file, 'w').write(default_authz)
+ shutil.move(tmp_authz_file, self.authz_file)
+
def authz_name(self, repo_dir=None):
"return this sandbox's name for use in an authz file"
repo_dir = repo_dir or self.repo_dir
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/switch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/switch_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/switch_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/switch_tests.py Thu Jan 9 09:31:10 2014
@@ -41,198 +41,8 @@ Wimp = svntest.testcase.Wimp_deco
Item = svntest.wc.StateItem
from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
-
-
-### Bummer. It would be really nice to have easy access to the URL
-### member of our entries files so that switches could be testing by
-### examining the modified ancestry. But status doesn't show this
-### information. Hopefully in the future the cmdline binary will have
-### a subcommand for dumping multi-line detailed information about
-### versioned things. Until then, we'll stick with the traditional
-### verification methods.
-###
-### gjs says: we have 'svn info' now
-
-def get_routine_status_state(wc_dir):
- """get the routine status list for WC_DIR at the completion of an
- initial call to do_routine_switching()"""
-
- # Construct some paths for convenience
- ADH_path = os.path.join(wc_dir, 'A', 'D', 'H')
- chi_path = os.path.join(ADH_path, 'chi')
- omega_path = os.path.join(ADH_path, 'omega')
- psi_path = os.path.join(ADH_path, 'psi')
- pi_path = os.path.join(ADH_path, 'pi')
- tau_path = os.path.join(ADH_path, 'tau')
- rho_path = os.path.join(ADH_path, 'rho')
-
- # Now generate a state
- state = svntest.actions.get_virginal_state(wc_dir, 1)
- state.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/F', 'A/B/lambda')
- state.add({
- 'A/B/pi' : Item(status=' ', wc_rev=1),
- 'A/B/tau' : Item(status=' ', wc_rev=1),
- 'A/B/rho' : Item(status=' ', wc_rev=1),
- })
-
- return state
-
-#----------------------------------------------------------------------
-
-def get_routine_disk_state(wc_dir):
- """get the routine disk list for WC_DIR at the completion of an
- initial call to do_routine_switching()"""
-
- disk = svntest.main.greek_state.copy()
-
- # iota has the same contents as gamma
- disk.tweak('iota', contents=disk.desc['A/D/gamma'].contents)
-
- # A/B/* no longer exist, but have been replaced by copies of A/D/G/*
- disk.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/F', 'A/B/lambda')
- disk.add({
- 'A/B/pi' : Item("This is the file 'pi'.\n"),
- 'A/B/rho' : Item("This is the file 'rho'.\n"),
- 'A/B/tau' : Item("This is the file 'tau'.\n"),
- })
-
- return disk
-
-#----------------------------------------------------------------------
-
-def do_routine_switching(wc_dir, repo_url, verify):
- """perform some routine switching of the working copy WC_DIR for
- other tests to use. If VERIFY, then do a full verification of the
- switching, else don't bother."""
-
- ### Switch the file `iota' to `A/D/gamma'.
-
- # Construct some paths for convenience
- iota_path = os.path.join(wc_dir, 'iota')
- gamma_url = repo_url + '/A/D/gamma'
-
- if verify:
- # Create expected output tree
- expected_output = svntest.wc.State(wc_dir, {
- 'iota' : Item(status='U '),
- })
-
- # Create expected disk tree (iota will have gamma's contents)
- expected_disk = svntest.main.greek_state.copy()
- expected_disk.tweak('iota',
- contents=expected_disk.desc['A/D/gamma'].contents)
-
- # Create expected status tree
- expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
- expected_status.tweak('iota', switched='S')
-
- # Do the switch and check the results in three ways.
- svntest.actions.run_and_verify_switch(wc_dir, iota_path, gamma_url,
- expected_output,
- expected_disk,
- expected_status,
- None, None, None, None, None,
- False, '--ignore-ancestry')
- else:
- svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
- gamma_url, iota_path)
-
- ### Switch the directory `A/B' to `A/D/G'.
-
- # Construct some paths for convenience
- AB_path = os.path.join(wc_dir, 'A', 'B')
- ADG_url = repo_url + '/A/D/G'
-
- if verify:
- # Create expected output tree
- expected_output = svntest.wc.State(wc_dir, {
- 'A/B/E' : Item(status='D '),
- 'A/B/F' : Item(status='D '),
- 'A/B/lambda' : Item(status='D '),
- 'A/B/pi' : Item(status='A '),
- 'A/B/tau' : Item(status='A '),
- 'A/B/rho' : Item(status='A '),
- })
-
- # Create expected disk tree (iota will have gamma's contents,
- # A/B/* will look like A/D/G/*)
- expected_disk = get_routine_disk_state(wc_dir)
-
- # Create expected status
- expected_status = get_routine_status_state(wc_dir)
- expected_status.tweak('iota', 'A/B', switched='S')
-
- # Do the switch and check the results in three ways.
- svntest.actions.run_and_verify_switch(wc_dir, AB_path, ADG_url,
- expected_output,
- expected_disk,
- expected_status,
- None, None, None, None, None,
- False, '--ignore-ancestry')
- else:
- svntest.main.run_svn(None, 'switch', '--ignore-ancestry',
- ADG_url, AB_path)
-
-
-#----------------------------------------------------------------------
-
-def commit_routine_switching(wc_dir, verify):
- "Commit some stuff in a routinely-switched working copy."
-
- # Make some local mods
- iota_path = os.path.join(wc_dir, 'iota')
- Bpi_path = os.path.join(wc_dir, 'A', 'B', 'pi')
- Gpi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
- Z_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z')
- zeta_path = os.path.join(wc_dir, 'A', 'D', 'G', 'Z', 'zeta')
-
- svntest.main.file_append(iota_path, "apple")
- svntest.main.file_append(Bpi_path, "melon")
- svntest.main.file_append(Gpi_path, "banana")
- os.mkdir(Z_path)
- svntest.main.file_append(zeta_path, "This is the file 'zeta'.\n")
- svntest.main.run_svn(None, 'add', Z_path)
-
- # Try to commit. We expect this to fail because, if all the
- # switching went as expected, A/B/pi and A/D/G/pi point to the
- # same URL. We don't allow this.
- svntest.actions.run_and_verify_commit(
- wc_dir, None, None,
- "svn: E195003: Cannot commit both .* as they refer to the same URL$",
- wc_dir)
-
- # Okay, that all taken care of, let's revert the A/D/G/pi path and
- # move along. Afterward, we should be okay to commit. (Sorry,
- # holsta, that banana has to go...)
- svntest.main.run_svn(None, 'revert', Gpi_path)
-
- # Create expected output tree.
- expected_output = svntest.wc.State(wc_dir, {
- 'A/D/G/Z' : Item(verb='Adding'),
- 'A/D/G/Z/zeta' : Item(verb='Adding'),
- 'iota' : Item(verb='Sending'),
- 'A/B/pi' : Item(verb='Sending'),
- })
-
- # Created expected status tree.
- expected_status = get_routine_status_state(wc_dir)
- expected_status.tweak('iota', 'A/B', switched='S')
- expected_status.tweak('iota', 'A/B/pi', wc_rev=2, status=' ')
- expected_status.add({
- 'A/D/G/Z' : Item(status=' ', wc_rev=2),
- 'A/D/G/Z/zeta' : Item(status=' ', wc_rev=2),
- })
-
- # Commit should succeed
- if verify:
- svntest.actions.run_and_verify_commit(wc_dir,
- expected_output,
- expected_status,
- None, wc_dir)
- else:
- svntest.main.run_svn(None,
- 'ci', '-m', 'log msg', wc_dir)
-
+from svntest.deeptrees import do_routine_switching, commit_routine_switching, \
+ get_routine_disk_state, get_routine_status_state
######################################################################
# Tests
@@ -2280,8 +2090,6 @@ disk_after_leaf_edit = svntest.deeptrees
disk_after_leaf_del = svntest.deeptrees.deep_trees_after_leaf_del
disk_after_tree_del = svntest.deeptrees.deep_trees_after_tree_del
-disk_empty_dirs = svntest.deeptrees.deep_trees_empty_dirs
-
deep_trees_conflict_output = svntest.deeptrees.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
svntest.deeptrees.deep_trees_conflict_output_skipped
@@ -2315,11 +2123,15 @@ def tree_conflicts_on_switch_1_1(sbox):
'DDF/D1/D2' : Item(status=' ', treeconflict='U'),
'DDF/D1/D2/gamma' : Item(status=' ', treeconflict='U')
})
-
- expected_disk = disk_empty_dirs.copy()
- expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
+
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
# The files delta, epsilon, and zeta are incoming additions, but since
# they are all within locally deleted trees they should also be schedule
@@ -2402,7 +2214,14 @@ def tree_conflicts_on_switch_1_2(sbox):
'DF/D1/beta' : Item(status=' ', treeconflict='D'),
})
- expected_disk = disk_empty_dirs.copy()
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = deep_trees_status_local_tree_del.copy()
@@ -2425,13 +2244,6 @@ def tree_conflicts_on_switch_1_2(sbox):
'DDD/D1/D2/D3',
'DDF/D1/D2/gamma',
'DF/D1/beta')
- ### Why does the deep trees state not include files?
- expected_disk.remove('D/D1',
- 'DD/D1/D2',
- 'DDD/D1/D2/D3')
- expected_disk.remove('DF/D1', 'DD/D1',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2')
expected_info = {
'F/alpha' : {
@@ -2580,7 +2392,14 @@ def tree_conflicts_on_switch_2_2(sbox):
### when dirs_same_p() is implemented)
expected_output = deep_trees_conflict_output
- expected_disk = disk_empty_dirs.copy()
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = svntest.deeptrees.deep_trees_virginal_state.copy()
expected_status.add({'' : Item(),
@@ -2605,15 +2424,6 @@ def tree_conflicts_on_switch_2_2(sbox):
'DDD/D1/D2/D3',
'DDF/D1/D2',
'DDF/D1/D2/gamma',)
- expected_disk.remove('D/D1',
- 'DD/D1',
- 'DD/D1/D2',
- 'DF/D1',
- 'DDD/D1',
- 'DDD/D1/D2',
- 'DDD/D1/D2/D3',
- 'DDF/D1',
- 'DDF/D1/D2',)
expected_info = {
'F/alpha' : {
@@ -2672,7 +2482,14 @@ def tree_conflicts_on_switch_3(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = disk_empty_dirs.copy()
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = deep_trees_status_local_tree_del.copy()
expected_status.tweak('', switched='S')
@@ -2694,15 +2511,6 @@ def tree_conflicts_on_switch_3(sbox):
'DDD/D1/D2/D3',
'DDF/D1/D2',
'DDF/D1/D2/gamma',)
- expected_disk.remove('D/D1',
- 'DD/D1',
- 'DD/D1/D2',
- 'DF/D1',
- 'DDD/D1',
- 'DDD/D1/D2',
- 'DDD/D1/D2/D3',
- 'DDF/D1',
- 'DDF/D1/D2',)
expected_info = {
'F/alpha' : {
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/tree_conflict_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/tree_conflict_tests.py Thu Jan 9 09:31:10 2014
@@ -654,7 +654,6 @@ def up_sw_dir_del_onto_del(sbox):
# Adding branch1\dC\D
#
# Committed revision 4.
-@XFail(svntest.main.is_ra_type_dav)
@Issue(3314)
def up_sw_dir_add_onto_add(sbox):
"up/sw dir: add onto add"
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/update_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/update_tests.py Thu Jan 9 09:31:10 2014
@@ -4189,8 +4189,6 @@ disk_after_leaf_edit = svntest.deeptrees
disk_after_leaf_del = svntest.deeptrees.deep_trees_after_leaf_del
disk_after_tree_del = svntest.deeptrees.deep_trees_after_tree_del
-disk_empty_dirs = svntest.deeptrees.deep_trees_empty_dirs
-
deep_trees_conflict_output = svntest.deeptrees.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
svntest.deeptrees.deep_trees_conflict_output_skipped
@@ -4223,11 +4221,14 @@ def tree_conflicts_on_update_1_1(sbox):
'DF/D1/beta' : Item(status=' ', treeconflict='U'),
})
- expected_disk = disk_empty_dirs.copy()
- expected_disk.remove('D/D1', 'DF/D1', 'DD/D1', 'DD/D1/D2',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2', 'DDD/D1/D2/D3')
-
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
# The files delta, epsilon, and zeta are incoming additions, but since
# they are all within locally deleted trees they should also be schedule
# for deletion.
@@ -4307,7 +4308,14 @@ def tree_conflicts_on_update_1_2(sbox):
'DDF/D1/D2/gamma' : Item(status=' ', treeconflict='D'),
})
- expected_disk = disk_empty_dirs.copy()
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = deep_trees_status_local_tree_del.copy()
@@ -4330,14 +4338,6 @@ def tree_conflicts_on_update_1_2(sbox):
'DDF/D1/D2/gamma',
'DF/D1/beta')
- ### Why does the deep trees state not include files?
- expected_disk.remove('D/D1',
- 'DD/D1/D2',
- 'DDD/D1/D2/D3',
- 'DF/D1', 'DD/D1',
- 'DDF/D1', 'DDF/D1/D2',
- 'DDD/D1', 'DDD/D1/D2')
-
expected_info = {
'F/alpha' : {
'Tree conflict' :
@@ -4486,7 +4486,14 @@ def tree_conflicts_on_update_2_2(sbox):
### when dirs_same_p() is implemented)
expected_output = deep_trees_conflict_output
- expected_disk = disk_empty_dirs.copy()
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = svntest.deeptrees.deep_trees_virginal_state.copy()
expected_status.add({'' : Item()})
@@ -4519,16 +4526,6 @@ def tree_conflicts_on_update_2_2(sbox):
'DDF/D1/D2',
'DDF/D1/D2/gamma',)
- expected_disk.remove('D/D1',
- 'DD/D1',
- 'DD/D1/D2',
- 'DF/D1',
- 'DDD/D1',
- 'DDD/D1/D2',
- 'DDD/D1/D2/D3',
- 'DDF/D1',
- 'DDF/D1/D2',)
-
expected_info = {
'F/alpha' : {
'Tree conflict' :
@@ -4659,8 +4656,14 @@ def tree_conflicts_on_update_3(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = disk_empty_dirs.copy()
-
+ expected_disk = svntest.wc.State('', {
+ 'F' : Item(),
+ 'D' : Item(),
+ 'DF' : Item(),
+ 'DD' : Item(),
+ 'DDF' : Item(),
+ 'DDD' : Item(),
+ })
expected_status = deep_trees_status_local_tree_del.copy()
# Expect the incoming tree deletes and the local tree deletes to mean
@@ -4681,16 +4684,6 @@ def tree_conflicts_on_update_3(sbox):
'DDF/D1/D2',
'DDF/D1/D2/gamma',)
- expected_disk.remove('D/D1',
- 'DD/D1',
- 'DD/D1/D2',
- 'DF/D1',
- 'DDD/D1',
- 'DDD/D1/D2',
- 'DDD/D1/D2/D3',
- 'DDF/D1',
- 'DDF/D1/D2',)
-
expected_info = {
'F/alpha' : {
'Tree conflict' :
@@ -6568,7 +6561,6 @@ def move_update_props(sbox):
@Issues(3288)
@SkipUnless(svntest.main.is_os_windows)
-@XFail(svntest.main.is_ra_type_dav)
def windows_update_backslash(sbox):
"test filename with backslashes inside"
@@ -6576,17 +6568,43 @@ def windows_update_backslash(sbox):
wc_dir = sbox.wc_dir
+ mucc_url = sbox.repo_url
+
+ if mucc_url.startswith('http'):
+ # Apache Httpd doesn't allow creating paths with '\\' in them on Windows
+ # AH00026: found %2f (encoded '/') in URI (decoded='/svn-test-work/repositories/authz_tests-30/!svn/ver/2/A/completely\\unusable\\dir'), returning 404
+ #
+ # Let's use file:// to work around.
+ mucc_url = 'file:///' + os.path.abspath(sbox.repo_dir).replace('\\', '/')
+
svntest.actions.run_and_verify_svnmucc(None, None, [],
- '-U', sbox.repo_url,
+ '-U', mucc_url,
'-m', '',
'mkdir', 'A/completely\\unusable\\dir')
# No error and a proper skip + recording in the working copy would also
# be a good result. This just verifies current behavior.
- expected_error = 'svn: E155000: .* is not valid.*'
- svntest.actions.run_and_verify_svn(wc_dir, None, expected_error, 'up',
- wc_dir)
+ if sbox.repo_url.startswith('http'):
+ # Apache Httpd doesn't allow paths with '\\' in them on Windows, so the
+ # test if a user is allowed to read them returns a failure. This makes
+ # mod_dav_svn report the path as server excluded (aka absent), which
+ # doesn't produce output when updating.
+ expected_output = [
+ "Updating '%s':\n" % wc_dir,
+ "At revision 2.\n"
+ ]
+ expected_err = []
+ else:
+ expected_output = None
+ expected_err = 'svn: E155000: .* is not valid.*'
+
+ svntest.actions.run_and_verify_svn(wc_dir, expected_output, expected_err,
+ 'up', wc_dir)
+
+ if sbox.repo_url.startswith('http'):
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
def update_moved_away(sbox):
"update subtree of moved away"
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/upgrade_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/upgrade_tests.py Thu Jan 9 09:31:10 2014
@@ -109,8 +109,7 @@ def check_format(sbox, expected_format):
raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" %
(found_format, expected_format, root))
- if svntest.main.wc_is_singledb(sbox.wc_dir):
- dirs[:] = []
+ dirs[:] = []
if dot_svn in dirs:
dirs.remove(dot_svn)
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/client-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_client/client-test.c Thu Jan 9 09:31:10 2014
@@ -769,6 +769,61 @@ test_foreign_repos_copy(const svn_test_o
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_suggest_mergesources(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ const char *repos_url;
+ svn_client_ctx_t *ctx;
+ svn_client_mtcc_t *mtcc;
+ apr_array_header_t *results;
+ svn_opt_revision_t peg_rev;
+ svn_opt_revision_t head_rev;
+ const char *wc_dir;
+
+ peg_rev.kind = svn_opt_revision_unspecified;
+
+ /* Create a filesytem and repository containing the Greek tree. */
+ SVN_ERR(create_greek_repos(&repos_url, "mergesources", opts, pool));
+
+ SVN_ERR(svn_client_create_context(&ctx, pool));
+
+ SVN_ERR(svn_client_mtcc_create(&mtcc, repos_url, -1, ctx, pool, pool));
+ SVN_ERR(svn_client_mtcc_add_copy("A", 1, "AA", mtcc, pool));
+ SVN_ERR(svn_client_mtcc_commit(NULL, NULL, NULL, mtcc, pool));
+
+ SVN_ERR(svn_client_suggest_merge_sources(
+ &results,
+ svn_path_url_add_component2(repos_url, "AA", pool),
+ &peg_rev, ctx, pool));
+ SVN_TEST_ASSERT(results != NULL);
+ SVN_TEST_ASSERT(results->nelts >= 1);
+ SVN_TEST_STRING_ASSERT(APR_ARRAY_IDX(results, 0, const char *),
+ svn_path_url_add_component2(repos_url, "A", pool));
+
+ /* And now test the same thing with a minimal working copy */
+ wc_dir = svn_test_data_path("mergesources-wc", pool);
+ svn_test_add_dir_cleanup(wc_dir);
+
+ head_rev.kind = svn_opt_revision_head;
+ SVN_ERR(svn_client_checkout3(NULL,
+ svn_path_url_add_component2(repos_url, "AA", pool),
+ wc_dir,
+ &head_rev, &head_rev, svn_depth_empty,
+ FALSE, FALSE, ctx, pool));
+
+
+ SVN_ERR(svn_client_suggest_merge_sources(&results,
+ wc_dir,
+ &peg_rev, ctx, pool));
+ SVN_TEST_ASSERT(results != NULL);
+ SVN_TEST_ASSERT(results->nelts >= 1);
+ SVN_TEST_STRING_ASSERT(APR_ARRAY_IDX(results, 0, const char *),
+ svn_path_url_add_component2(repos_url, "A", pool));
+
+ return SVN_NO_ERROR;
+}
+
/* ========================================================================== */
@@ -789,5 +844,7 @@ struct svn_test_descriptor_t test_funcs[
SVN_TEST_OPTS_PASS(test_16k_add, "test adding 16k files"),
#endif
SVN_TEST_OPTS_PASS(test_youngest_common_ancestor, "test youngest_common_ancestor"),
+ SVN_TEST_OPTS_PASS(test_suggest_mergesources,
+ "test svn_client_suggest_merge_sources"),
SVN_TEST_NULL
};
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs/fs-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs/fs-test.c Thu Jan 9 09:31:10 2014
@@ -44,6 +44,7 @@
#include "../svn_test_fs.h"
#include "../../libsvn_delta/delta.h"
+#include "../../libsvn_fs/fs-loader.h"
#define SET_STR(ps, s) ((ps)->data = (s), (ps)->len = strlen(s))
@@ -5091,11 +5092,11 @@ commit_timestamp(const svn_test_opts_t *
opts, pool));
/* Commit with a specified svn:date. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, rev, pool));
+ SVN_ERR(svn_fs_begin_txn2(&txn, fs, rev, SVN_FS_TXN_CLIENT_DATE, pool));
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
SVN_ERR(svn_fs_make_dir(txn_root, "/foo", pool));
SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_DATE, date, pool));
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, FALSE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
@@ -5104,10 +5105,33 @@ commit_timestamp(const svn_test_opts_t *
/* Commit that overwrites the specified svn:date. */
SVN_ERR(svn_fs_begin_txn(&txn, fs, rev, pool));
+ {
+ /* Setting the internal property doesn't enable svn:date behaviour. */
+ apr_array_header_t *props = apr_array_make(pool, 3, sizeof(svn_prop_t));
+ svn_prop_t prop, other_prop1, other_prop2;
+ svn_string_t *val;
+
+ prop.name = SVN_FS__PROP_TXN_CLIENT_DATE;
+ prop.value = svn_string_create("1", pool);
+ other_prop1.name = "foo";
+ other_prop1.value = svn_string_create("fooval", pool);
+ other_prop2.name = "bar";
+ other_prop2.value = svn_string_create("barval", pool);
+ APR_ARRAY_PUSH(props, svn_prop_t) = other_prop1;
+ APR_ARRAY_PUSH(props, svn_prop_t) = prop;
+ APR_ARRAY_PUSH(props, svn_prop_t) = other_prop2;
+ SVN_ERR(svn_fs_change_txn_props(txn, props, pool));
+ SVN_ERR(svn_fs_txn_prop(&val, txn, other_prop1.name, pool));
+ SVN_TEST_ASSERT(val && !strcmp(val->data, other_prop1.value->data));
+ SVN_ERR(svn_fs_txn_prop(&val, txn, other_prop2.name, pool));
+ SVN_TEST_ASSERT(val && !strcmp(val->data, other_prop2.value->data));
+
+ SVN_ERR(svn_fs_change_txn_prop(txn, prop.name, prop.value, pool));
+ }
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
SVN_ERR(svn_fs_make_dir(txn_root, "/bar", pool));
SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_DATE, date, pool));
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
@@ -5115,13 +5139,13 @@ commit_timestamp(const svn_test_opts_t *
SVN_TEST_ASSERT(svn_date && strcmp(svn_date->data, date->data));
/* Commit with a missing svn:date. */
- SVN_ERR(svn_fs_begin_txn(&txn, fs, rev, pool));
+ SVN_ERR(svn_fs_begin_txn2(&txn, fs, rev, SVN_FS_TXN_CLIENT_DATE, pool));
SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
SVN_ERR(svn_fs_make_dir(txn_root, "/zag", pool));
SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_DATE, NULL, pool));
SVN_ERR(svn_fs_txn_prop(&svn_date, txn, SVN_PROP_REVISION_DATE, pool));
SVN_TEST_ASSERT(!svn_date);
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, FALSE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
@@ -5135,7 +5159,7 @@ commit_timestamp(const svn_test_opts_t *
SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_DATE, NULL, pool));
SVN_ERR(svn_fs_txn_prop(&svn_date, txn, SVN_PROP_REVISION_DATE, pool));
SVN_TEST_ASSERT(!svn_date);
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
SVN_ERR(svn_fs_revision_proplist(&proplist, fs, rev, pool));
svn_date = apr_hash_get(proplist, SVN_PROP_REVISION_DATE,
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c Thu Jan 9 09:31:10 2014
@@ -1024,7 +1024,7 @@ upgrade_txns_to_log_addressing(const svn
svn_pool_clear(iterpool);
SVN_ERR(svn_fs_open_txn(&txn, fs, txn_name, iterpool));
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, iterpool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, iterpool));
}
/* Further changes to fill the shard */
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_repos/repos-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_repos/repos-test.c Thu Jan 9 09:31:10 2014
@@ -3444,7 +3444,7 @@ test_config_pool(const svn_test_opts_t *
SVN_ERR(svn_fs_make_file(root, "dir/config", pool));
SVN_ERR(svn_test__set_file_contents(root, "dir/config",
cfg_buffer1->data, pool));
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
/* reading the config from the repo should still give cfg1 */
SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
@@ -3462,7 +3462,7 @@ test_config_pool(const svn_test_opts_t *
SVN_ERR(svn_fs_copy(rev_root, "dir", root, "another-dir", pool));
SVN_ERR(svn_test__set_file_contents(root, "dir/config",
cfg_buffer2->data, pool));
- SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+ SVN_ERR(svn_fs_commit_txn(NULL, &rev, txn, pool));
/* reading the config from the repo should give cfg2 now */
SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/packed-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/packed-data-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/packed-data-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/packed-data-test.c Thu Jan 9 09:31:10 2014
@@ -31,7 +31,6 @@
#include <stdio.h>
#include <string.h>
#include <apr_pools.h>
-#include <apr_poll.h>
#include "../svn_test.h"
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/priority-queue-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/priority-queue-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/priority-queue-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_subr/priority-queue-test.c Thu Jan 9 09:31:10 2014
@@ -35,7 +35,7 @@
#include "../svn_test.h"
#include "svn_error.h"
-#include "svn_sorts.h"
+#include "private/svn_sorts_private.h"
/* priority queue test:
* items in the queue are simple integers, in ascending order */
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/db-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/db-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/db-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/db-test.c Thu Jan 9 09:31:10 2014
@@ -338,13 +338,16 @@ create_open(svn_wc__db_t **db,
apr_pool_t *pool)
{
SVN_ERR(svn_dirent_get_absolute(local_abspath,
- svn_dirent_join("fake-wc", subdir, pool),
+ svn_dirent_join(
+ svn_test_data_path("db-test", pool),
+ subdir, pool),
pool));
- SVN_ERR(svn_wc__db_open(db, NULL, FALSE, TRUE, pool, pool));
- SVN_ERR(svn_test__create_fake_wc(*local_abspath, TESTING_DATA, pool, pool));
svn_test_add_dir_cleanup(*local_abspath);
+ SVN_ERR(svn_wc__db_open(db, NULL, FALSE, TRUE, pool, pool));
+ SVN_ERR(svn_test__create_fake_wc(*local_abspath, TESTING_DATA, pool, pool));
+
return SVN_NO_ERROR;
}
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/op-depth-test.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/libsvn_wc/op-depth-test.c Thu Jan 9 09:31:10 2014
@@ -41,9 +41,10 @@
#include "utils.h"
-#include "private/svn_wc_private.h"
-#include "private/svn_sqlite.h"
#include "private/svn_dep_compat.h"
+#include "private/svn_sorts_private.h"
+#include "private/svn_sqlite.h"
+#include "private/svn_wc_private.h"
#include "../../libsvn_wc/wc.h"
#include "../../libsvn_wc/wc_db.h"
#include "../../libsvn_wc/workqueue.h"
Propchange: subversion/branches/fsfs-ucsnorm/tools/dev/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Jan 9 09:31:10 2014
@@ -1,4 +1,3 @@
.libs
fsfs-access-map
-fsfs-reorg
logdata.py