You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2018/11/28 21:25:35 UTC
svn commit: r1847678 [20/25] - in /subversion/branches/swig-py3: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/ build/win32/
contrib/client-side/ contrib/client-side/svn_load_dirs/
contrib/client-side/svnmerge/ contrib/hook-scri...
Modified: subversion/branches/swig-py3/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/svnsync/svnsync.c?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/svnsync/svnsync.c (original)
+++ subversion/branches/swig-py3/subversion/svnsync/svnsync.c Wed Nov 28 21:25:32 2018
@@ -89,17 +89,17 @@ enum svnsync__opt {
svnsync_opt_config_dir, \
svnsync_opt_config_options
-static const svn_opt_subcommand_desc2_t svnsync_cmd_table[] =
+static const svn_opt_subcommand_desc3_t svnsync_cmd_table[] =
{
- { "initialize", initialize_cmd, { "init" },
- N_("usage: svnsync initialize DEST_URL SOURCE_URL\n"
- "\n"
+ { "initialize", initialize_cmd, { "init" }, {N_(
+ "usage: svnsync initialize DEST_URL SOURCE_URL\n"
+ "\n"), N_(
"Initialize a destination repository for synchronization from\n"
"another repository.\n"
- "\n"
+ "\n"), N_(
"If the source URL is not the root of a repository, only the\n"
"specified part of the repository will be synchronized.\n"
- "\n"
+ "\n"), N_(
"The destination URL must point to the root of a repository which\n"
"has been configured to allow revision property changes. In\n"
"the general case, the destination repository must contain no\n"
@@ -109,65 +109,70 @@ static const svn_opt_subcommand_desc2_t
"their counterparts in the source repository. (This is useful\n"
"when initializing a copy of a repository as a mirror of that same\n"
"repository, for example.)\n"
- "\n"
+ "\n"), N_(
"You should not commit to, or make revision property changes in,\n"
"the destination repository by any method other than 'svnsync'.\n"
"In other words, the destination repository should be a read-only\n"
- "mirror of the source repository.\n"),
+ "mirror of the source repository.\n"
+ )},
{ SVNSYNC_OPTS_DEFAULT, svnsync_opt_source_prop_encoding, 'q',
svnsync_opt_allow_non_empty, svnsync_opt_disable_locking,
svnsync_opt_steal_lock, 'M' } },
- { "synchronize", synchronize_cmd, { "sync" },
- N_("usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
- "\n"
+ { "synchronize", synchronize_cmd, { "sync" }, {N_(
+ "usage: svnsync synchronize DEST_URL [SOURCE_URL]\n"
+ "\n"), N_(
"Transfer all pending revisions to the destination from the source\n"
"with which it was initialized.\n"
- "\n"
+ "\n"), N_(
"If SOURCE_URL is provided, use that as the source repository URL,\n"
"ignoring what is recorded in the destination repository as the\n"
"source URL. Specifying SOURCE_URL is recommended in particular\n"
"if untrusted users/administrators may have write access to the\n"
- "DEST_URL repository.\n"),
+ "DEST_URL repository.\n"
+ )},
{ SVNSYNC_OPTS_DEFAULT, svnsync_opt_source_prop_encoding, 'q',
svnsync_opt_disable_locking, svnsync_opt_steal_lock, 'M' } },
- { "copy-revprops", copy_revprops_cmd, { 0 },
- N_("usage:\n"
- "\n"
+ { "copy-revprops", copy_revprops_cmd, { 0 }, {N_(
+ "usage:\n"
+ "\n"), N_(
" 1. svnsync copy-revprops DEST_URL [SOURCE_URL]\n"
" 2. svnsync copy-revprops DEST_URL REV[:REV2]\n"
- "\n"
+ "\n"), N_(
"Copy the revision properties in a given range of revisions to the\n"
"destination from the source with which it was initialized. If the\n"
"revision range is not specified, it defaults to all revisions in\n"
"the DEST_URL repository. Note also that the 'HEAD' revision is the\n"
"latest in DEST_URL, not necessarily the latest in SOURCE_URL.\n"
- "\n"
+ "\n"), N_(
"If SOURCE_URL is provided, use that as the source repository URL,\n"
"ignoring what is recorded in the destination repository as the\n"
"source URL. Specifying SOURCE_URL is recommended in particular\n"
"if untrusted users/administrators may have write access to the\n"
"DEST_URL repository.\n"
- "\n"
+ "\n"), N_(
"Unless you need to trigger the destination repositoy's revprop\n"
"change hooks for all revision properties, it is recommended to use\n"
"the --skip-unchanged option for best performance.\n"
- "\n"
- "Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"),
+ "\n"), N_(
+ "Form 2 is deprecated syntax, equivalent to specifying \"-rREV[:REV2]\".\n"
+ )},
{ SVNSYNC_OPTS_DEFAULT, svnsync_opt_source_prop_encoding, 'q', 'r',
svnsync_opt_disable_locking, svnsync_opt_steal_lock,
svnsync_opt_skip_unchanged, 'M' } },
- { "info", info_cmd, { 0 },
- N_("usage: svnsync info DEST_URL\n"
- "\n"
+ { "info", info_cmd, { 0 }, {N_(
+ "usage: svnsync info DEST_URL\n"
+ "\n"), N_(
"Print information about the synchronization destination repository\n"
- "located at DEST_URL.\n"),
+ "located at DEST_URL.\n"
+ )},
{ SVNSYNC_OPTS_DEFAULT } },
- { "help", help_cmd, { "?", "h" },
- N_("usage: svnsync help [SUBCOMMAND...]\n"
- "\n"
- "Describe the usage of this program or its subcommands.\n"),
+ { "help", help_cmd, { "?", "h" }, {N_(
+ "usage: svnsync help [SUBCOMMAND...]\n"
+ "\n"), N_(
+ "Describe the usage of this program or its subcommands.\n"
+ )},
{ 0 } },
- { NULL, NULL, { 0 }, NULL, { 0 } }
+ { NULL, NULL, { 0 }, {NULL}, { 0 } }
};
static const apr_getopt_option_t svnsync_options[] =
@@ -1937,7 +1942,7 @@ help_cmd(apr_getopt_t *os, void *baton,
SVN_ERR(svn_ra_print_modules(version_footer, pool));
- SVN_ERR(svn_opt_print_help4(os, "svnsync",
+ SVN_ERR(svn_opt_print_help5(os, "svnsync",
opt_baton ? opt_baton->version : FALSE,
opt_baton ? opt_baton->quiet : FALSE,
/*###opt_state ? opt_state->verbose :*/ FALSE,
@@ -1960,7 +1965,7 @@ help_cmd(apr_getopt_t *os, void *baton,
static svn_error_t *
sub_main(int *exit_code, int argc, const char *argv[], apr_pool_t *pool)
{
- const svn_opt_subcommand_desc2_t *subcommand = NULL;
+ const svn_opt_subcommand_desc3_t *subcommand = NULL;
apr_array_header_t *received_opts;
opt_baton_t opt_baton;
svn_config_t *config;
@@ -2189,7 +2194,7 @@ sub_main(int *exit_code, int argc, const
}
if (opt_baton.help)
- subcommand = svn_opt_get_canonical_subcommand2(svnsync_cmd_table, "help");
+ subcommand = svn_opt_get_canonical_subcommand3(svnsync_cmd_table, "help");
/* The --non-interactive and --force-interactive options are mutually
* exclusive. */
@@ -2269,8 +2274,8 @@ sub_main(int *exit_code, int argc, const
if (opt_baton.version)
{
/* Use the "help" subcommand to handle "--version". */
- static const svn_opt_subcommand_desc2_t pseudo_cmd =
- { "--version", help_cmd, {0}, "",
+ static const svn_opt_subcommand_desc3_t pseudo_cmd =
+ { "--version", help_cmd, {0}, {""},
{svnsync_opt_version, /* must accept its own option */
'q', /* --quiet */
} };
@@ -2290,7 +2295,7 @@ sub_main(int *exit_code, int argc, const
SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++],
pool));
- subcommand = svn_opt_get_canonical_subcommand2(svnsync_cmd_table,
+ subcommand = svn_opt_get_canonical_subcommand3(svnsync_cmd_table,
first_arg);
if (subcommand == NULL)
{
@@ -2308,11 +2313,11 @@ sub_main(int *exit_code, int argc, const
if (opt_id == 'h' || opt_id == '?')
continue;
- if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, NULL))
+ if (! svn_opt_subcommand_takes_option4(subcommand, opt_id, NULL))
{
const char *optstr;
const apr_getopt_option_t *badopt =
- svn_opt_get_option_from_code2(opt_id, svnsync_options, subcommand,
+ svn_opt_get_option_from_code3(opt_id, svnsync_options, subcommand,
pool);
svn_opt_format_option(&optstr, badopt, FALSE, pool);
if (subcommand->name[0] == '-')
Modified: subversion/branches/swig-py3/subversion/svnversion/svnversion.c
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/svnversion/svnversion.c?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/svnversion/svnversion.c (original)
+++ subversion/branches/swig-py3/subversion/svnversion/svnversion.c Wed Nov 28 21:25:32 2018
@@ -38,7 +38,7 @@
static svn_error_t *
version(svn_boolean_t quiet, apr_pool_t *pool)
{
- return svn_opt_print_help4(NULL, "svnversion", TRUE, quiet, FALSE,
+ return svn_opt_print_help5(NULL, "svnversion", TRUE, quiet, FALSE,
NULL, NULL, NULL, NULL, NULL, NULL, pool);
}
Propchange: subversion/branches/swig-py3/subversion/tests/afl/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Nov 28 21:25:32 2018
@@ -1,3 +1,4 @@
*.lo
.libs
afl-x509
+afl-svndiff
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/authz_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/authz_tests.py Wed Nov 28 21:25:32 2018
@@ -168,7 +168,7 @@ def authz_read_access(sbox):
fws_url = B_url + '/folder with spaces'
fws_empty_folder_url = fws_url + '/empty folder'
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -280,7 +280,7 @@ def authz_write_access(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E220004: Access denied.*"
@@ -367,7 +367,7 @@ def authz_checkout_test(sbox):
# 1st part: disable all read access, checkout should fail
# write an authz file with *= on /
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -502,7 +502,7 @@ def authz_log_and_tracing_test(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
# write an authz file with *=rw on /
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -533,7 +533,7 @@ def authz_log_and_tracing_test(sbox):
# now disable read access on the first version of rho, keep the copy in
# /A/D readable.
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -551,7 +551,7 @@ def authz_log_and_tracing_test(sbox):
'log', '-r', '2', '--limit', '1',
wc_dir)
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err2 = expected_err
else:
expected_err2 = ".*svn: E220001: ((Unreadable path encountered; " \
@@ -593,7 +593,7 @@ def authz_log_and_tracing_test(sbox):
svntest.actions.run_and_verify_svn(None, expected_err2,
'cat', '-r', '2', D_url+'/rho')
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err2 = expected_err
else:
expected_err2 = ".*svn: E220001: Unreadable path encountered; access denied.*"
@@ -624,7 +624,7 @@ def authz_aliases(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -669,9 +669,9 @@ def authz_validate(sbox):
write_authz_file(sbox, { "/" : "* = r",
"/A/B" : "@undefined_group = rw" })
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
- elif sbox.repo_url.startswith("svn"):
+ elif svntest.main.is_ra_type_svn():
expected_err = ".*Invalid authz configuration"
else:
expected_err = ".*@undefined_group.*"
@@ -688,9 +688,9 @@ devs1 = @admins, dev1
devs2 = @admins, dev2
devs = @devs1, dev3, dev4""" })
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
- elif sbox.repo_url.startswith("svn"):
+ elif svntest.main.is_ra_type_svn():
expected_err = ".*Invalid authz configuration"
else:
expected_err = ".*Circular dependency.*"
@@ -726,7 +726,7 @@ def authz_locking(sbox):
write_authz_file(sbox, {"/": "", "/A": "jrandom = rw"})
write_restrictive_svnserve_conf(sbox.repo_dir)
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: warning: W170001: Authorization failed.*"
@@ -781,7 +781,7 @@ def authz_locking(sbox):
svntest.actions.run_and_verify_info([{'Lock Token' : None}],
sbox.ospath('A/mu'))
- if sbox.repo_url.startswith('http'):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: warning: W160039: .*([Aa]uth.*perf|[Ff]orbidden).*"
else:
expected_err = ".*svn: warning: W170001: Authorization failed.*"
@@ -863,7 +863,7 @@ def authz_svnserve_anon_access_read(sbox
# is not really a branch (it's the same URL), but we only care about
# authz here, not the semantics of the merge. (Merges had been
# failing in authz, for the reasons summarized in
- # http://subversion.tigris.org/issues/show_bug.cgi?id=2712#desc13.)
+ # https://issues.apache.org/jira/browse/SVN-2712#desc13.)
svntest.actions.run_and_verify_svn(None, [],
'merge', '-c', '2',
B_url, B_path)
@@ -981,7 +981,7 @@ def multiple_matches(sbox):
sbox.build(create_wc = False)
root_url = sbox.repo_url
write_restrictive_svnserve_conf(sbox.repo_dir)
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -1137,7 +1137,7 @@ def case_sensitive_authz(sbox):
# error messages
expected_error_for_commit = ".*Commit failed.*"
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_error_for_cat = ".*[Ff]orbidden.*"
else:
expected_error_for_cat = ".*svn: E170001: Authorization failed.*"
@@ -1663,6 +1663,37 @@ def remove_access_after_commit(sbox):
expected_status,
[], True)
+@XFail()
+@Skip(svntest.main.is_ra_type_file)
+def inverted_group_membership(sbox):
+ "access rights for user in inverted group"
+
+ # Bug reported here: https://lists.apache.org/thread.html/6cc7b22b211827ff946373407a516a3ab4d866fe03cdc85d22ff276b@%3Cdev.subversion.apache.org%3E
+
+ sbox.build(create_wc = False)
+
+ svntest.actions.enable_revprop_changes(sbox.repo_dir)
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+ write_authz_file(sbox,
+ {"/" : ("$anonymous =\n"
+ "~@readonly = rw\n"
+ "@readonly = r\n")},
+ {"groups": "readonly = %s\n" % svntest.main.wc_author2})
+
+ expected_output = svntest.verify.UnorderedOutput(['A/\n', 'iota\n'])
+
+ # User mentioned in the @readonly group can read ...
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ 'list',
+ '--username', svntest.main.wc_author2,
+ sbox.repo_url)
+
+ # ... but the access control entry for the inverted group isn't applied.
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ 'list',
+ '--username', svntest.main.wc_author,
+ sbox.repo_url)
+
########################################################################
# Run the tests
@@ -1700,6 +1731,7 @@ test_list = [ None,
authz_file_external_to_authz,
authz_log_censor_revprops,
remove_access_after_commit,
+ inverted_group_membership,
]
serial_only = True
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/basic_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/basic_tests.py Wed Nov 28 21:25:32 2018
@@ -3024,16 +3024,19 @@ def peg_rev_on_non_existent_wc_path(sbox
# setup some history
sbox.simple_move('A', 'A2')
sbox.simple_move('A2/mu', 'A2/mu2')
- open(sbox.ospath('A2/mu2'), 'w').write('r2\n')
+ with open(sbox.ospath('A2/mu2'), 'w') as f:
+ f.write('r2\n')
sbox.simple_commit(message='r2')
#
sbox.simple_move('A2/mu2', 'A2/mu3')
sbox.simple_move('A2', 'A3')
- open(sbox.ospath('A3/mu3'), 'w').write('r3\n')
+ with open(sbox.ospath('A3/mu3'), 'w') as f:
+ f.write('r3\n')
sbox.simple_commit(message='r3')
#
sbox.simple_move('A3/mu3', 'A3/mu4')
- open(sbox.ospath('A3/mu4'), 'w').write('r4\n')
+ with open(sbox.ospath('A3/mu4'), 'w') as f:
+ f.write('r4\n')
sbox.simple_move('A3', 'A4')
sbox.simple_commit(message='r4')
@@ -3047,6 +3050,15 @@ def peg_rev_on_non_existent_wc_path(sbox
'cat', '-r2', sbox.ospath('mu3') + '@3')
+@Issue(4532)
+def diff_previous_revision_of_r0(sbox):
+ """diff -rPREV on WC at revision 0"""
+
+ sbox.build(empty=True)
+ svntest.actions.run_and_verify_svn(None, 'svn: E195002: ',
+ 'diff', '-rPREV', sbox.ospath(''))
+
+
# With 'svn mkdir --parents' the target directory may already exist on disk.
# In that case it was wrongly performing a recursive 'add' on its contents.
def mkdir_parents_target_exists_on_disk(sbox):
@@ -3121,24 +3133,27 @@ def filtered_ls(sbox):
sbox.build(read_only=True)
path = sbox.repo_url + "/A/D"
- # check plain info
- expected = [ "H/omega\n",
- "gamma\n" ]
-
- exit_code, output, error = svntest.actions.run_and_verify_svn(
- expected, [], 'ls', path, '--depth=infinity', '--search=*a')
-
- # check case-insensitivity
- exit_code, output, error = svntest.actions.run_and_verify_svn(
- expected, [], 'ls', path, '--depth=infinity', '--search=*A')
-
- expected = [ "H/\n" ]
- exit_code, output, error = svntest.actions.run_and_verify_svn(
- expected, [], 'ls', path, '--depth=infinity', '--search=h')
-
- # we don't match full paths
- exit_code, output, error = svntest.actions.run_and_verify_svn(
- [], [], 'ls', path, '--depth=infinity', '--search=*/*')
+ # with and without externals, because without externals on a 1.10+ server
+ # a server-side code path is used
+ for extra_opts in [ [], ['--include-externals'] ]:
+
+ expected = [ "H/omega\n",
+ "gamma\n" ]
+
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ expected, [], 'ls', path, '--depth=infinity', '--search=*a', *extra_opts)
+
+ # check case-insensitivity
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ expected, [], 'ls', path, '--depth=infinity', '--search=*A', *extra_opts)
+
+ expected = [ "H/\n" ]
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ expected, [], 'ls', path, '--depth=infinity', '--search=h', *extra_opts)
+
+ # we don't match full paths
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ [], [], 'ls', path, '--depth=infinity', '--search=*/*', *extra_opts)
@Issue(4700)
@XFail(svntest.main.is_fs_type_fsx)
@@ -3197,6 +3212,36 @@ def null_prop_update_last_changed_revisi
'info', sbox.path('iota'),
'--show-item', 'last-changed-revision')
+@Skip(svntest.main.is_os_windows)
+def filtered_ls_top_level_path(sbox):
+ "filtered 'svn ls' top level path"
+
+ sbox.build(read_only=True, create_wc=False)
+ d_path = sbox.repo_url + "/A/B"
+ f_path = sbox.repo_url + "/A/B/lambda"
+
+ d_expected = svntest.verify.RegexListOutput([
+ r".* \./", # expect '*B*' to match its name which is 'B'
+ r".* E/beta",
+ r".* lambda" ])
+ f_expected = [ "lambda\n" ]
+
+ # with and without externals, because without externals on a 1.10+ server
+ # a server-side code path is used
+ for extra_opts in [ [], ['--include-externals'] ]:
+
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ d_expected, [], 'ls', '-v', d_path, '-R', '--search=*B*', *extra_opts)
+
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ f_expected, [], 'ls', f_path, '--search=lambda', *extra_opts)
+
+ # we don't match full paths, even for the top level path
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ [], [], 'ls', '-v', d_path, '-R', '--search=*/*', *extra_opts)
+ exit_code, output, error = svntest.actions.run_and_verify_svn(
+ [], [], 'ls', f_path, '--search=*/*', *extra_opts)
+
########################################################################
# Run the tests
@@ -3266,11 +3311,13 @@ test_list = [ None,
rm_missing_with_case_clashing_ondisk_item,
delete_conflicts_one_of_many,
peg_rev_on_non_existent_wc_path,
+ diff_previous_revision_of_r0,
mkdir_parents_target_exists_on_disk,
plaintext_password_storage_disabled,
filtered_ls,
null_update_last_changed_revision,
null_prop_update_last_changed_revision,
+ filtered_ls_top_level_path,
]
if __name__ == '__main__':
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/blame_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/blame_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/blame_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/blame_tests.py Wed Nov 28 21:25:32 2018
@@ -958,7 +958,8 @@ def blame_youngest_to_oldest(sbox):
sbox.simple_commit() #r3
# Delete a line.
- open(iota_moved, 'w').write(line)
+ with open(iota_moved, 'w') as f:
+ f.write(line)
sbox.simple_commit() #r4
expected_output = [
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/commit_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/commit_tests.py Wed Nov 28 21:25:32 2018
@@ -2823,7 +2823,8 @@ def commit_add_subadd(sbox):
# prepare targets file
targets = "A/D A/D/H A/D/H/chi A/D/H/omega A/D/H/psi".split()
- open(targets_file, 'w').write("\n".join(targets))
+ with open(targets_file, 'w') as f:
+ f.write("\n".join(targets))
# r2: rm A/D
sbox.simple_rm('A/D')
@@ -3113,6 +3114,39 @@ def commit_xml(sbox):
sbox.simple_append('index.html', '<Q></R>', True)
sbox.simple_commit()
+@Issue(4722)
+def commit_issue4722_checksum(sbox):
+ "commit that triggered checksum failure"
+
+ sbox.build()
+
+ # This bug only ever affected FSFS in 1.9.7. The test could be
+ # considered a bit "fragile" as any change to the on-disk
+ # representation may well make it pass trivially. On the other hand
+ # it should still pass irrespective of that representation, and for
+ # all other repository types.
+
+ # Enough data to allow the bug to occur
+ with open(sbox.ospath('f'), 'w') as fp:
+ for i in range(0, 2001):
+ fp.write('abcdefghijklmnopqrstuvwxyz')
+ sbox.simple_add('f')
+ sbox.simple_commit()
+
+ # Just the right data to trigger the bug
+ with open(sbox.ospath('f'), 'w') as fp:
+ for i in range(0, 8713):
+ fp.write(str(i))
+ fp.write("11111")
+ sbox.simple_commit()
+
+ # Trigger deduplication which is when the bug occurred
+ with open(sbox.ospath('f'), 'w') as fp:
+ for i in range(0, 2001):
+ fp.write('abcdefghijklmnopqrstuvwxyz')
+ sbox.simple_commit()
+
+
########################################################################
# Run the tests
@@ -3190,6 +3224,7 @@ test_list = [ None,
commit_mergeinfo_ood,
mkdir_conflict_proper_error,
commit_xml,
+ commit_issue4722_checksum,
]
if __name__ == '__main__':
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/copy_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/copy_tests.py Wed Nov 28 21:25:32 2018
@@ -1021,6 +1021,76 @@ def repos_to_wc(sbox):
os.path.join(D_dir, 'B'))
#----------------------------------------------------------------------
+def foreign_repos_to_wc(sbox):
+ "foreign repository to WC copy"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ def move_url(repo_url, source, dest):
+ svntest.main.run_svn(False, 'move', '-m', svntest.main.make_log_msg(),
+ repo_url + '/' + source,
+ repo_url + '/' + dest)
+
+ # Scenarios:
+ # (parent-path-under-'A/', base-name, child-paths, mergeinfo-inheritance)
+ scenarios = [
+ ('B', 'E', ['alpha','beta'], 'explicit'),
+ ('B', 'F', [], 'inherited'),
+ ('D/G', 'pi', [], 'explicit'),
+ ('D/G', 'rho', [], 'inherited'),
+ ]
+
+ # Add some mergeinfo, which should be discarded by a foreign repo copy.
+ # On each path of interest, add either explicit or inherited mergeinfo:
+ # the implementation handles these cases differently.
+ # (We commit these initially in the original repo just for convenience: as
+ # we already have a WC. Really they only need to be in the 'other' repo.)
+ for parent, name, children, mi_inheritance in scenarios:
+ if mi_inheritance == 'explicit':
+ sbox.simple_propset(SVN_PROP_MERGEINFO,
+ '/branch/' + name + ':1', 'A/' + parent + '/' + name)
+ else:
+ sbox.simple_propset(SVN_PROP_MERGEINFO,
+ '/branch/' + name + ':1', 'A/' + parent)
+ sbox.simple_commit()
+
+ # We have a standard repository and working copy. Now we create a
+ # second repository with the same greek tree, but different UUID.
+ repo_dir = sbox.repo_dir
+ other_repo_dir, other_repo_url = sbox.add_repo_path('other')
+ svntest.main.copy_repos(repo_dir, other_repo_dir, 2, 1)
+ move_url(other_repo_url, 'A', 'A2')
+ move_url(other_repo_url, 'A2', 'A3')
+
+ # URL->wc copy:
+ # copy a file and a directory from a foreign repository.
+ # we should get some scheduled additions *without history*.
+ peg_rev = '3'
+ op_rev = '2'
+
+ for parent, name, children, mi_inheritance in scenarios:
+ src_url = other_repo_url + '/A2/' + parent + '/' + name
+ src_url_resolved = src_url.replace('/A2/', '/A/')
+
+ expected_output = svntest.verify.UnorderedOutput([
+ '--- Copying from foreign repository URL \'%s\':\n' % src_url_resolved,
+ 'A %s\n' % sbox.ospath(name),
+ ] + [
+ 'A %s\n' % sbox.ospath(name + '/' + child)
+ for child in children
+ ])
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ 'copy', '-r' + op_rev,
+ src_url + '@' + peg_rev,
+ wc_dir)
+
+ # Validate the mergeinfo of the copy destination (we expect none)
+ svntest.actions.run_and_verify_svn([], '.*W200017: Property.*not found',
+ 'propget', SVN_PROP_MERGEINFO,
+ sbox.ospath(name))
+
+#----------------------------------------------------------------------
# Issue 1084: ra_svn move/copy bug
@Issue(1084)
def copy_to_root(sbox):
@@ -3504,6 +3574,50 @@ def copy_make_parents_wc_wc(sbox):
expected_output,
expected_status)
+
+#----------------------------------------------------------------------
+# Test copying and creating parents in the wc with dst directory being
+# precreated and unversioned
+
+def copy_make_parents_wc_wc_existing_unversioned_dst(sbox):
+ "svn cp --parents WC_PATH WC_PATH (ex. unver. dst)"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ iota_path = sbox.ospath('iota')
+ new_iota_path = sbox.ospath('X/Y/Z/iota')
+ os.makedirs(os.path.dirname(new_iota_path))
+
+ # Copy iota
+ svntest.actions.run_and_verify_svn(None, [],
+ 'cp', '--parents',
+ iota_path, new_iota_path)
+
+ # Create expected output
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X' : Item(verb='Adding'),
+ 'X/Y' : Item(verb='Adding'),
+ 'X/Y/Z' : Item(verb='Adding'),
+ 'X/Y/Z/iota' : Item(verb='Adding'),
+ })
+
+ # Create expected status tree
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+
+ # Add the moved files
+ expected_status.add({
+ 'X' : Item(status=' ', wc_rev=2),
+ 'X/Y' : Item(status=' ', wc_rev=2),
+ 'X/Y/Z' : Item(status=' ', wc_rev=2),
+ 'X/Y/Z/iota' : Item(status=' ', wc_rev=2),
+ })
+
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status)
+
+
#----------------------------------------------------------------------
# Test copying and creating parents from the repo to the wc
@@ -3546,6 +3660,49 @@ def copy_make_parents_repo_wc(sbox):
#----------------------------------------------------------------------
+# Test copying and creating parents from the repo to the wc with dst
+# directory being precreated and unversioned
+
+def copy_make_parents_repo_wc_existing_unversioned_dst(sbox):
+ "svn cp --parents URL WC_PATH with (ex. unver. dst)"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ iota_url = sbox.repo_url + '/iota'
+ new_iota_path = sbox.ospath('X/Y/Z/iota')
+ os.makedirs(os.path.dirname(new_iota_path))
+
+ # Copy iota
+ svntest.actions.run_and_verify_svn(None, [],
+ 'cp', '--parents',
+ iota_url, new_iota_path)
+
+ # Create expected output
+ expected_output = svntest.wc.State(wc_dir, {
+ 'X' : Item(verb='Adding'),
+ 'X/Y' : Item(verb='Adding'),
+ 'X/Y/Z' : Item(verb='Adding'),
+ 'X/Y/Z/iota' : Item(verb='Adding'),
+ })
+
+ # Create expected status tree
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+
+ # Add the moved files
+ expected_status.add({
+ 'X' : Item(status=' ', wc_rev=2),
+ 'X/Y' : Item(status=' ', wc_rev=2),
+ 'X/Y/Z' : Item(status=' ', wc_rev=2),
+ 'X/Y/Z/iota' : Item(status=' ', wc_rev=2),
+ })
+
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status)
+
+
+#----------------------------------------------------------------------
# Test copying and creating parents from the wc to the repo
def copy_make_parents_wc_repo(sbox):
@@ -3651,70 +3808,49 @@ def URI_encoded_repos_to_wc(sbox):
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_disk = svntest.main.greek_state.copy()
+ def path_join(head, tail):
+ if not head: return tail
+ if not tail: return head
+ return head + '/' + tail
+
+ def greek_file_item(path):
+ if path[-1:].islower():
+ basename = re.sub('.*/', '', path)
+ return Item("This is the file '" + basename + "'.\n")
+ return Item()
+
+ A_paths = [
+ "",
+ "B",
+ "B/lambda",
+ "B/E",
+ "B/E/alpha",
+ "B/E/beta",
+ "B/F",
+ "mu",
+ "C",
+ "D",
+ "D/gamma",
+ "D/G",
+ "D/G/pi",
+ "D/G/rho",
+ "D/G/tau",
+ "D/H",
+ "D/H/chi",
+ "D/H/omega",
+ "D/H/psi",
+ ]
+
def copy_URL_to_WC(URL_rel_path, dest_name, rev):
- lines = [
- "A " + os.path.join(wc_dir, dest_name, "B") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "B", "lambda") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "B", "E") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "B", "E", "alpha") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "B", "E", "beta") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "B", "F") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "mu") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "C") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "gamma") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "G") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "G", "pi") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "G", "rho") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "G", "tau") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "H") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "H", "chi") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "H", "omega") + "\n",
- "A " + os.path.join(wc_dir, dest_name, "D", "H", "psi") + "\n",
- "Checked out revision " + str(rev - 1) + ".\n",
- "A " + os.path.join(wc_dir, dest_name) + "\n"]
- expected = svntest.verify.UnorderedOutput(lines)
- expected_status.add({
- dest_name + "/B" : Item(status=' ', wc_rev=rev),
- dest_name + "/B/lambda" : Item(status=' ', wc_rev=rev),
- dest_name + "/B/E" : Item(status=' ', wc_rev=rev),
- dest_name + "/B/E/alpha" : Item(status=' ', wc_rev=rev),
- dest_name + "/B/E/beta" : Item(status=' ', wc_rev=rev),
- dest_name + "/B/F" : Item(status=' ', wc_rev=rev),
- dest_name + "/mu" : Item(status=' ', wc_rev=rev),
- dest_name + "/C" : Item(status=' ', wc_rev=rev),
- dest_name + "/D" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/gamma" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/G" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/G/pi" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/G/rho" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/G/tau" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/H" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/H/chi" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/H/omega" : Item(status=' ', wc_rev=rev),
- dest_name + "/D/H/psi" : Item(status=' ', wc_rev=rev),
- dest_name : Item(status=' ', wc_rev=rev)})
- expected_disk.add({
- dest_name : Item(props={}),
- dest_name + '/B' : Item(),
- dest_name + '/B/lambda' : Item("This is the file 'lambda'.\n"),
- dest_name + '/B/E' : Item(),
- dest_name + '/B/E/alpha' : Item("This is the file 'alpha'.\n"),
- dest_name + '/B/E/beta' : Item("This is the file 'beta'.\n"),
- dest_name + '/B/F' : Item(),
- dest_name + '/mu' : Item("This is the file 'mu'.\n"),
- dest_name + '/C' : Item(),
- dest_name + '/D' : Item(),
- dest_name + '/D/gamma' : Item("This is the file 'gamma'.\n"),
- dest_name + '/D/G' : Item(),
- dest_name + '/D/G/pi' : Item("This is the file 'pi'.\n"),
- dest_name + '/D/G/rho' : Item("This is the file 'rho'.\n"),
- dest_name + '/D/G/tau' : Item("This is the file 'tau'.\n"),
- dest_name + '/D/H' : Item(),
- dest_name + '/D/H/chi' : Item("This is the file 'chi'.\n"),
- dest_name + '/D/H/omega' : Item("This is the file 'omega'.\n"),
- dest_name + '/D/H/psi' : Item("This is the file 'psi'.\n"),
- })
+ expected = svntest.verify.UnorderedOutput(
+ [ "A " + sbox.ospath(path_join(dest_name, p)) + "\n"
+ for p in A_paths ])
+ expected_status.add(
+ { path_join(dest_name, p) : Item(status=' ', wc_rev=rev)
+ for p in A_paths })
+ expected_disk.add(
+ { path_join(dest_name, p) : greek_file_item(p)
+ for p in A_paths })
# Make a copy
svntest.actions.run_and_verify_svn(expected, [],
@@ -4333,7 +4469,7 @@ def copy_added_dir_with_copy(sbox):
def copy_broken_symlink(sbox):
"""copy broken symlink"""
- ## See http://subversion.tigris.org/issues/show_bug.cgi?id=3303. ##
+ ## See https://issues.apache.org/jira/browse/SVN-3303. ##
sbox.build()
wc_dir = sbox.wc_dir
@@ -5904,7 +6040,9 @@ test_list = [ None,
copy_peg_rev_url,
old_dir_wc_to_wc,
copy_make_parents_wc_wc,
+ copy_make_parents_wc_wc_existing_unversioned_dst,
copy_make_parents_repo_wc,
+ copy_make_parents_repo_wc_existing_unversioned_dst,
copy_make_parents_wc_repo,
copy_make_parents_repo_repo,
URI_encoded_repos_to_wc,
@@ -5955,6 +6093,7 @@ test_list = [ None,
ext_wc_copy_deleted,
copy_subtree_deleted,
resurrect_at_root,
+ foreign_repos_to_wc,
]
if __name__ == '__main__':
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/dav-mirror-autocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/dav-mirror-autocheck.sh?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/dav-mirror-autocheck.sh (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/dav-mirror-autocheck.sh Wed Nov 28 21:25:32 2018
@@ -31,7 +31,7 @@
#
# The set of changes sent through the system is currently
# just the test case for issue 2939, using svnmucc
-# http://subversion.tigris.org/issues/show_bug.cgi?id=2939
+# https://issues.apache.org/jira/browse/SVN-2939
# But of course, any svn traffic liable to break over
# mirroring would be a good addition.
#
@@ -100,6 +100,7 @@ function setup_config() {
say "setting up config: " $1
cat > "$1" <<__EOF__
+$LOAD_MOD_MPM
$LOAD_MOD_LOG_CONFIG
$LOAD_MOD_MIME
$LOAD_MOD_UNIXD
@@ -114,9 +115,30 @@ $LOAD_MOD_AUTHZ_CORE
$LOAD_MOD_AUTHZ_USER
$LOAD_MOD_AUTHZ_HOST
+__EOF__
+
+if "$HTTPD" -v | grep '/2\.[012]' >/dev/null; then
+ cat >> "$1" <<__EOF__
LockFile lock
User $(id -un)
Group $(id -gn)
+__EOF__
+else
+HTTPD_LOCK="$HTTPD_ROOT/lock"
+mkdir "$HTTPD_LOCK" \
+ || fail "couldn't create lock directory '$HTTPD_LOCK'"
+ cat >> "$1" <<__EOF__
+# worker and prefork MUST have a mpm-accept lockfile in 2.3.0+
+<IfModule worker.c>
+ Mutex "file:$HTTPD_LOCK" mpm-accept
+</IfModule>
+<IfModule prefork.c>
+ Mutex "file:$HTTPD_LOCK" mpm-accept
+</IfModule>
+__EOF__
+fi
+
+cat >> "$1" <<__EOF__
Listen ${TEST_PORT}
ServerName localhost
PidFile "${HTTPD_ROOT}/pid"
@@ -133,6 +155,9 @@ MaxRequestsPerChild 0
<IfModule worker.c>
ThreadsPerChild 8
</IfModule>
+<IfModule event.c>
+ ThreadsPerChild 8
+</IfModule>
MaxClients 16
HostNameLookups Off
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" format
@@ -202,6 +227,12 @@ function usage() {
SCRIPT=$(basename $0)
+NO_TESTS=
+if [ "x$1" = 'x--no-tests' ]; then
+ NO_TESTS=1
+ shift
+fi
+
if [ $# -ne 1 ] ; then
usage
fi
@@ -249,7 +280,7 @@ HTPASSWD=$(get_prog_name htpasswd htpass
SVN=$ABS_BUILDDIR/subversion/svn/svn
SVNADMIN=$ABS_BUILDDIR/subversion/svnadmin/svnadmin
SVNSYNC=$ABS_BUILDDIR/subversion/svnsync/svnsync
-SVNMUCC=${SVNMUCC:-$ABS_BUILDDIR/tools/client-side/svnmucc/svnmucc}
+SVNMUCC=$ABS_BUILDDIR/subversion/svnmucc/svnmucc
SVNLOOK=$ABS_BUILDDIR/subversion/svnlook/svnlook
[ -x $HTTPD ] || fail "HTTPD '$HTTPD' not executable"
@@ -259,9 +290,7 @@ SVNLOOK=$ABS_BUILDDIR/subversion/svnlook
[ -x $SVNADMIN ] || fail "SVNADMIN $SVNADMIN not built"
[ -x $SVNSYNC ] || fail "SVNSYNC $SVNSYNC not built"
[ -x $SVNLOOK ] || fail "SVNLOOK $SVNLOOK not built"
-[ -x $SVNMUCC ] \
- || fail SVNMUCC $SVNMUCC executable not built, needed for test. \
- \'cd $ABS_BUILDDIR\; make svnmucc\' to fix.
+[ -x $SVNMUCC ] || fail "SVNMUCC $SVNMUCC not built"
say HTTPD: $HTTPD
say SVN: $SVN
@@ -309,6 +338,10 @@ LOAD_MOD_AUTHN_FILE="$(get_loadmodule_co
LOAD_MOD_AUTHZ_USER="$(get_loadmodule_config mod_authz_user)" \
|| fail "Authz_User module not found."
}
+if [ ${APACHE_MPM:+set} ]; then
+ LOAD_MOD_MPM=$(get_loadmodule_config mod_mpm_$APACHE_MPM) \
+ || fail "MPM module not found"
+fi
if [ ${MODULE_PATH:+set} ]; then
MOD_DAV_SVN="$MODULE_PATH/mod_dav_svn.so"
@@ -365,7 +398,9 @@ $SVNADMIN create "$SLAVE_REPOS" || fail
$SVNADMIN dump "$MASTER_REPOS" | $SVNADMIN load "$SLAVE_REPOS" \
|| fail "duplicate repositories failed"
# make sure uuid's match
-[ `cat "$SLAVE_REPOS/db/uuid"` = `cat "$MASTER_REPOS/db/uuid"` ] \
+read MASTER_UUID < "$MASTER_REPOS/db/uuid"
+read SLAVE_UUID < "$SLAVE_REPOS/db/uuid"
+[ "$SLAVE_UUID" = "$MASTER_UUID" ] \
|| fail "master/slave uuid mismatch"
# setup hooks:
# slave allows revprop changes
@@ -397,12 +432,18 @@ $SVNSYNC initialize --non-interactive "$
--username=svnsync --password=svnsync \
|| fail "svnsync initialize failed"
+if [ $NO_TESTS ]; then
+ echo "MASTER_URL=$MASTER_URL"
+ echo "SLAVE_URL=$SLAVE_URL"
+ exit
+fi
+
# OK, let's start testing! Commit changes to slave, expect
# them to proxy through to the master, and then
# svnsync back to the slave
#
# reproducible test case from:
-# http://subversion.tigris.org/issues/show_bug.cgi?id=2939
+# https://issues.apache.org/jira/browse/SVN-2939
#
BASE_URL="$SLAVE_URL"
say running svnmucc test to $BASE_URL
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/davautocheck.sh?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/davautocheck.sh Wed Nov 28 21:25:32 2018
@@ -52,6 +52,7 @@
# Run this script with the test suite name and test number to execute just this
# test:
# subversion/tests/cmdline/davautocheck.sh basic 4
+# This script can also be invoked via "make davautocheck".
#
# If the temporary directory is not deleted, it can be reused for further
# manual DAV protocol interoperation testing. HTTPD must be started by
@@ -65,18 +66,19 @@
# APXS=/opt/svn/1.4.x/bin/apxs MODULE_PATH=/opt/svn/1.4.x/modules \
# subversion/tests/cmdline/davautocheck.sh
#
-# To prevent the server from advertising httpv2, pass USE_HTTPV1 in
-# the environment.
+# Other environment variables that are interpreted by this script:
#
-# To enable "SVNCacheRevProps on" set CACHE_REVPROPS in the environment.
+# make davautocheck CACHE_REVPROPS=1 # sets SVNCacheRevProps on
#
-# To test over https set USE_SSL in the environment.
+# make davautocheck BLOCK_READ=1 # sets SVNBlockRead on
#
-# To use value for "SVNPathAuthz" directive set SVN_PATH_AUTHZ with
-# appropriate value in the environment.
+# make davautocheck USE_SSL=1 # run over https
#
-# To load an MPM module for Apache 2.4 use APACHE_MPM=event in the
-# environment.
+# make davautocheck USE_HTTPV1=1 # sets SVNAdvertiseV2Protocol off
+#
+# make davautocheck APACHE_MPM=event # specifies the 2.4 MPM
+#
+# make davautocheck SVN_PATH_AUTHZ=short_circuit # SVNPathAuthz short_circuit
#
# Passing --no-tests as argv[1] will have the script start a server
# but not run any tests. Passing --gdb or --lldb will do the same, and in
@@ -222,6 +224,11 @@ if [ ${CACHE_REVPROPS:+set} ]; then
CACHE_REVPROPS_SETTING=on
fi
+BLOCK_READ_SETTING=off
+if [ ${BLOCK_READ:+set} ]; then
+ BLOCK_READ_SETTING=on
+fi
+
if [ ${MODULE_PATH:+set} ]; then
MOD_DAV_SVN="$MODULE_PATH/mod_dav_svn.so"
MOD_AUTHZ_SVN="$MODULE_PATH/mod_authz_svn.so"
@@ -274,6 +281,9 @@ say "Using '$HTPASSWD'..."
LOAD_MOD_DAV=$(get_loadmodule_config mod_dav) \
|| fail "DAV module not found"
+LOAD_MOD_DAV_FS=$(get_loadmodule_config mod_dav_fs) \
+ || fail "Filesystem DAV module not found"
+
LOAD_MOD_LOG_CONFIG=$(get_loadmodule_config mod_log_config) \
|| fail "log_config module not found"
@@ -440,6 +450,7 @@ $LOAD_MOD_MIME
$LOAD_MOD_ALIAS
$LOAD_MOD_UNIXD
$LOAD_MOD_DAV
+$LOAD_MOD_DAV_FS
LoadModule dav_svn_module "$MOD_DAV_SVN"
$LOAD_MOD_AUTH
$LOAD_MOD_AUTHN_CORE
@@ -475,6 +486,13 @@ mkdir "$HTTPD_LOCK" \
__EOF__
fi
+HTTPD_DAV="$HTTPD_ROOT/dav"
+mkdir "$HTTPD_DAV" \
+ || fail "couldn't create DAV lock directory '$HTTPD_DAV'"
+cat >> "$HTTPD_CFG" <<__EOF__
+DavLockDB "$HTTPD_DAV/lock.db"
+__EOF__
+
if [ ${USE_SSL:+set} ]; then
cat >> "$HTTPD_CFG" <<__EOF__
SSLEngine on
@@ -518,40 +536,59 @@ CustomLog "$HTTPD_ROOT/ops" "%
#Require all granted
</Directory>
+Alias /nodavroot $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/nodavroot
+<Directory $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/nodavroot>
+</Directory>
+
+Alias /fsdavroot $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/fsdavroot
+<Directory $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/fsdavroot>
+ DAV filesystem
+</Directory>
+
<Location /svn-test-work/repositories>
+__EOF__
+location_common() {
+cat >> "$HTTPD_CFG" <<__EOF__
DAV svn
- SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories"
AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile $HTTPD_USERS
- Require valid-user
SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
+ SVNListParentPath On
+ SVNBlockRead ${BLOCK_READ_SETTING}
+__EOF__
+}
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
+ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories"
+ Require valid-user
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /ddt-test-work/repositories>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
${SVN_PATH_AUTHZ_LINE}
DontDoThatConfigFile "$HTTPD_DONTDOTHAT"
</Location>
<Location /svn-test-work/local_tmp/repos>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp/repos"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
+ ${SVN_PATH_AUTHZ_LINE}
+</Location>
+<Location /svn-test-work/local_tmp/trojan>
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
+ SVNPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp/trojan"
+ Require valid-user
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/anon>
@@ -574,84 +611,54 @@ CustomLog "$HTTPD_ROOT/ops" "%
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/mixed>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
Satisfy Any
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/mixed-noauthwhenanon>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
AuthzSVNNoAuthWhenAnonymousAllowed On
SVNPathAuthz On
</Location>
<Location /authz-test-work/authn>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/authn-anonoff>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
AuthzSVNAnonymous Off
SVNPathAuthz On
</Location>
<Location /authz-test-work/authn-lcuser>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
Require valid-user
AuthzForceUsernameCase Lower
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/authn-group>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
AuthGroupFile $HTTPD_GROUPS
Require group random
AuthzSVNAuthoritative Off
@@ -659,15 +666,10 @@ CustomLog "$HTTPD_ROOT/ops" "%
</Location>
<IfModule mod_authz_core.c>
<Location /authz-test-work/sallrany>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
AuthzSendForbiddenOnFailure On
Satisfy All
<RequireAny>
@@ -677,15 +679,10 @@ CustomLog "$HTTPD_ROOT/ops" "%
${SVN_PATH_AUTHZ_LINE}
</Location>
<Location /authz-test-work/sallrall>
- DAV svn
+__EOF__
+location_common
+cat >> "$HTTPD_CFG" <<__EOF__
SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp"
- AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
- SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
- SVNCacheRevProps ${CACHE_REVPROPS_SETTING}
- SVNListParentPath On
- AuthType Basic
- AuthName "Subversion Repository"
- AuthUserFile $HTTPD_USERS
AuthzSendForbiddenOnFailure On
Satisfy All
<RequireAll>
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/depth_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/depth_tests.py Wed Nov 28 21:25:32 2018
@@ -1073,7 +1073,7 @@ def commit_depth_immediates(sbox):
# Message-ID: <46...@collab.net>
# Date: Thu, 12 Jul 2007 15:59:45 -0400
#
- # See also http://subversion.tigris.org/issues/show_bug.cgi?id=2882.
+ # See also https://issues.apache.org/jira/browse/SVN-2882.
#
# Outline of the test:
# ====================
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/diff_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/diff_tests.py Wed Nov 28 21:25:32 2018
@@ -36,7 +36,6 @@ from svntest import err, wc
from prop_tests import binary_mime_type_on_text_file_warning
from svntest.verify import make_diff_header, make_no_diff_deleted_header, \
- make_diff_header, make_no_diff_deleted_header, \
make_git_diff_header, make_diff_prop_header, \
make_diff_prop_val, make_diff_prop_deleted, \
make_diff_prop_added, make_diff_prop_modified
@@ -2712,7 +2711,7 @@ def diff_ignore_eolstyle(sbox):
" Bb\n",
"-Cc\n",
"+Cc\n",
- "\ No newline at end of file\n" ]
+ "\\ No newline at end of file\n" ]
svntest.actions.run_and_verify_svn(expected_output, [],
'diff', '-x', '--ignore-eol-style',
@@ -3855,7 +3854,7 @@ def diff_arbitrary_files_and_dirs(sbox):
sbox.build()
wc_dir = sbox.wc_dir
- # diff iota with A/mu
+ # diff files (iota with A/mu)
expected_output = make_diff_header("iota", "working copy", "working copy",
"iota", "A/mu") + [
"@@ -1 +1 @@\n",
@@ -3866,7 +3865,11 @@ def diff_arbitrary_files_and_dirs(sbox):
'diff', '--old', sbox.ospath('iota'),
'--new', sbox.ospath('A/mu'))
- # diff A/B/E with A/D
+ # diff dirs (A/B/E with A/D)
+ # .../gamma is to show as replaced; .../beta is to show as modified
+ sbox.simple_mkdir('A/B/E/gamma')
+ sbox.simple_propset('p', 'v', 'A/B/E/gamma')
+ sbox.simple_add_text("This is a different beta file.\n", 'A/D/beta')
expected_output = make_diff_header("G/pi", "nonexistent", "working copy",
"B/E", "D") + [
"@@ -0,0 +1 @@\n",
@@ -3896,11 +3899,16 @@ def diff_arbitrary_files_and_dirs(sbox):
"@@ -1 +0,0 @@\n",
"-This is the file 'alpha'.\n"
] + make_diff_header("beta", "working copy",
- "nonexistent", "B/E", "D") + [
- "@@ -1 +0,0 @@\n",
- "-This is the file 'beta'.\n"
- ] + make_diff_header("gamma", "nonexistent",
"working copy", "B/E", "D") + [
+ "@@ -1 +1 @@\n",
+ "-This is the file 'beta'.\n",
+ "+This is a different beta file.\n"
+ ] + make_diff_header("gamma", "working copy",
+ "nonexistent", "B/E", "D") \
+ + make_diff_prop_header("gamma") \
+ + make_diff_prop_deleted("p", "v") \
+ + make_diff_header("gamma", "nonexistent",
+ "working copy", "B/E", "D") + [
"@@ -0,0 +1 @@\n",
"+This is the file 'gamma'.\n"
]
@@ -5160,6 +5168,90 @@ def diff_unversioned_files_git(sbox):
'--old', sbox.ospath('foo'),
'--new', sbox.ospath('A/bar'))
+# Summary diff with a repository source side and a local copy target side.
+# This particular combination crashed in 1.10.0 and earlier releases.
+def diff_summary_repo_wc_local_copy(sbox):
+ "diff summary repo wc local copy"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_copy('iota', 'iota2')
+ sbox.simple_append('iota2', 'hello\n')
+ expected_diff = svntest.wc.State(wc_dir, {
+ 'iota': Item(status='M '),
+ })
+ svntest.actions.run_and_verify_diff_summarize(
+ expected_diff,
+ '--old=' + sbox.ospath('iota') + '@HEAD',
+ '--new=' + sbox.ospath('iota2'))
+
+# Summary diff with a repository source side and a local copy target side.
+# Svn reported the unmodified copy as modified in 1.10.0 and earlier releases.
+@XFail()
+def diff_summary_repo_wc_local_copy_unmodified(sbox):
+ "diff summary repo wc local copy unmodified"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ sbox.simple_copy('iota', 'iota2')
+ expected_diff = svntest.wc.State(wc_dir, {
+ })
+ svntest.actions.run_and_verify_diff_summarize(
+ expected_diff,
+ '--old=' + sbox.ospath('iota') + '@HEAD',
+ '--new=' + sbox.ospath('iota2'))
+
+# Fails with "Can't open file '.../iota': Too many levels of symbolic links"
+# on Unix.
+@XFail()
+@Skip(svntest.main.is_os_windows)
+def diff_file_replaced_by_symlink(sbox):
+ "diff base vs working: symlink replaces a file"
+ sbox.build(read_only=True)
+ wc_dir = sbox.wc_dir
+
+ iota_path = sbox.ospath('iota')
+ os.remove(iota_path)
+
+ # create a symlink pointing to itself
+ # alternatively it could point to a non-existing path
+ sbox.simple_symlink('iota', 'iota')
+
+ # TODO: add a full expected output
+ expected_output = svntest.verify.AnyOutput
+ svntest.actions.run_and_verify_svn(expected_output, [], 'diff', wc_dir)
+
+# Test 'svn diff --git' with a copy.
+#
+# When this diff is rooted at a path below the repository root directory,
+# it errored out while printing the git diff header, due to confusion of
+# diff-relative and repository-relative copyfrom paths.
+@XFail()
+def diff_git_format_copy(sbox):
+ "diff git format copy"
+ sbox.build(create_wc=False)
+ svntest.actions.run_and_verify_svn(None, [], 'checkout',
+ sbox.repo_url + '/A/B',
+ sbox.wc_dir)
+ os.chdir(sbox.wc_dir)
+ sbox.wc_dir = ''
+
+ sbox.simple_copy('E/alpha', 'alpha_copied')
+ sbox.simple_append('alpha_copied', "This is a copy of 'alpha'.\n")
+
+ expected_output = \
+ make_git_diff_header('alpha_copied', 'A/B/alpha_copied',
+ "revision 1", "working copy",
+ copyfrom_path="A/B/E/alpha",
+ copyfrom_rev='1', cp=True,
+ text_changes=True) + [
+ "@@ -1 +1,2 @@\n",
+ " This is the file 'alpha'.\n",
+ "+This is a copy of 'alpha'.\n",
+ ]
+
+ svntest.actions.run_and_verify_svn(expected_output, [], 'diff',
+ '--git', '.')
########################################################################
#Run the tests
@@ -5257,6 +5349,10 @@ test_list = [ None,
diff_symlinks,
diff_peg_resolve,
diff_unversioned_files_git,
+ diff_summary_repo_wc_local_copy,
+ diff_summary_repo_wc_local_copy_unmodified,
+ diff_file_replaced_by_symlink,
+ diff_git_format_copy,
]
if __name__ == '__main__':
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/entries_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/entries_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/entries_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/entries_tests.py Wed Nov 28 21:25:32 2018
@@ -121,14 +121,17 @@ def basic_entries(sbox):
G_path, iota_path)
# Add a file over the DELETED 'alpha'. It should be schedule-add.
- open(alpha_path, 'w').write('New alpha contents\n')
+ with open(alpha_path, 'w') as f:
+ f.write('New alpha contents\n')
# Delete 'beta', then add a file over it. Should be schedule-replace.
svntest.actions.run_and_verify_svn(None, [], 'rm', beta_path)
- open(beta_path, 'w').write('New beta contents\n')
+ with open(beta_path, 'w') as f:
+ f.write('New beta contents\n')
# Plain old add. Should have revision == 0.
- open(added_path, 'w').write('Added file contents\n')
+ with open(added_path, 'w') as f:
+ f.write('Added file contents\n')
svntest.actions.run_and_verify_svn(None, [], 'add',
alpha_path, beta_path, added_path)
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/export_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/export_tests.py Wed Nov 28 21:25:32 2018
@@ -610,7 +610,8 @@ def export_file_overwrite_fails(sbox):
os.mkdir(tmpdir)
# Run it for source local
- open(os.path.join(tmpdir, 'iota'), 'w').write(not_iota_contents)
+ with open(os.path.join(tmpdir, 'iota'), 'w') as f:
+ f.write(not_iota_contents)
svntest.actions.run_and_verify_svn([], '.*exist.*',
'export', iota_path, tmpdir)
@@ -621,7 +622,8 @@ def export_file_overwrite_fails(sbox):
svntest.actions.verify_disk(tmpdir, expected_disk)
# Run it for source URL
- open(os.path.join(tmpdir, 'iota'), 'w').write(not_iota_contents)
+ with open(os.path.join(tmpdir, 'iota'), 'w') as f:
+ f.write(not_iota_contents)
svntest.actions.run_and_verify_svn([], '.*exist.*',
'export', iota_url, tmpdir)
@@ -721,7 +723,7 @@ def export_working_copy_ignoring_keyword
def export_with_url_unsafe_characters(sbox):
"export file with URL unsafe characters"
- ## See http://subversion.tigris.org/issues/show_bug.cgi?id=3683 ##
+ ## See https://issues.apache.org/jira/browse/SVN-3683 ##
sbox.build()
wc_dir = sbox.wc_dir
@@ -904,14 +906,16 @@ def export_file_overwrite_with_force(sbo
})
# Run it for WC export
- open(os.path.join(tmpdir, 'iota'), 'w').write(not_iota_contents)
+ with open(os.path.join(tmpdir, 'iota'), 'w') as f:
+ f.write(not_iota_contents)
svntest.actions.run_and_verify_svn(svntest.verify.AnyOutput,
[], 'export', '--force',
iota_path, tmpdir)
svntest.actions.verify_disk(tmpdir, expected_disk)
# Run it for URL export
- open(os.path.join(tmpdir, 'iota'), 'w').write(not_iota_contents)
+ with open(os.path.join(tmpdir, 'iota'), 'w') as f:
+ f.write(not_iota_contents)
svntest.actions.run_and_verify_svn(svntest.verify.AnyOutput,
[], 'export', '--force',
iota_url, tmpdir)
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/externals_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/externals_tests.py Wed Nov 28 21:25:32 2018
@@ -1146,7 +1146,7 @@ def external_into_path_with_spaces(sbox)
repo_url = sbox.repo_url
ext = '^/A/D "A/copy of D"\n' +\
- '^/A/D A/another\ copy\ of\ D'
+ '^/A/D A/another\\ copy\\ of\\ D'
change_external(wc_dir, ext)
expected_output = svntest.wc.State(wc_dir, {
@@ -2818,7 +2818,7 @@ def remap_file_external_with_prop_del(sb
# Now update to bring the new external down.
# This previously segfaulted as described in
- # http://subversion.tigris.org/issues/show_bug.cgi?id=4093#desc1
+ # https://issues.apache.org/jira/browse/SVN-4093#desc1
svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir)
@@ -2946,16 +2946,13 @@ def url_to_wc_copy_of_externals(sbox):
external_tau_path = os.path.join(wc_dir, "External-WC-to-URL-Copy",
"external", "tau")
expected_stdout = verify.UnorderedOutput([
- " U " + external_root_path + "\n",
+ "A " + external_root_path + "\n",
"\n",
"Fetching external item into '" + external_ex_path + "':\n",
- "A " + external_pi_path + "\n",
- "A " + external_rho_path + "\n",
- "A " + external_tau_path + "\n",
- "Checked out external at revision 2.\n",
- "\n",
- "Checked out revision 2.\n",
- "A " + external_root_path + "\n"
+ "A " + external_ex_path + "\n",
+ "A " + external_pi_path + "\n",
+ "A " + external_rho_path + "\n",
+ "A " + external_tau_path + "\n",
])
exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
expected_stdout, [], 0, 'copy', repo_url + '/A/C',
@@ -3871,12 +3868,14 @@ def copy_pin_externals_whitespace_dir(sb
extdef = sbox.get_tempname('extdef')
info = sbox.get_tempname('info')
- open(extdef, 'w').write(
+ with open(extdef, 'w') as f:
+ f.write(
'"' + ss_path +'/deps/sqlite" ext/sqlite\n' +
'"^/deps/A P R" \'ext/A P R\'\n' +
- '^/deps/B\ D\ B\' ext/B\ D\ B\'\n' +
+ '^/deps/B\\ D\\ B\' ext/B\\ D\\ B\'\n' +
repo_url + '/deps/wors%23+t ext/wors#+t')
- open(info, 'w').write('info\n')
+ with open(info, 'w') as f:
+ f.write('info\n')
svntest.actions.run_and_verify_svnmucc(None, [], '-U', repo_url,
'mkdir', 'trunk',
@@ -4398,6 +4397,55 @@ def invalid_uris_in_repo(sbox):
"-r", revision)
svntest.main.safe_rmtree(sbox.wc_dir)
+# Like issue #3741 'externals not removed when working copy is made shallow'
+# but with --set-depth=exclude instead of --set-depth=empty.
+def update_dir_external_exclude(sbox):
+ "exclude update should remove externals"
+
+ sbox.build()
+
+ # Create an external in r2
+ sbox.simple_propset('svn:externals', '^/A/D/H X', 'A/B/E')
+ sbox.simple_commit()
+
+ # Update to fetch externals
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/B/E/X/chi' : Item(status='A '),
+ 'A/B/E/X/omega' : Item(status='A '),
+ 'A/B/E/X/psi' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ [], False,
+ sbox.ospath('A/B/E'))
+
+ # Now make A/B/E shallow by updating with "--set-depth exclude"
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/B/E' : Item(status='D '),
+ 'A/B/E/X' : Item(verb='Removed external'),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ [], False,
+ '--set-depth=exclude',
+ sbox.ospath('A/B/E'))
+
+ # And bring the external back by updating with "--set-depth infinity"
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/B/E' : Item(status='A '),
+ 'A/B/E/alpha' : Item(status='A '),
+ 'A/B/E/beta' : Item(status='A '),
+ 'A/B/E/X/chi' : Item(status='A '),
+ 'A/B/E/X/omega' : Item(status='A '),
+ 'A/B/E/X/psi' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output, None, None,
+ [], False,
+ '--set-depth=infinity',
+ sbox.ospath('A/B/E'))
+
+
########################################################################
# Run the tests
@@ -4474,6 +4522,7 @@ test_list = [ None,
file_external_recorded_info,
external_externally_removed,
invalid_uris_in_repo,
+ update_dir_external_exclude,
]
if __name__ == '__main__':
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout Wed Nov 28 21:25:32 2018
@@ -42,18 +42,19 @@ Available subcommands:
resolve
resolved
revert
- shelf-diff
- shelf-drop
- shelf-list (shelves)
- shelf-log
- shelf-save
- shelve
- unshelve
status (stat, st)
switch (sw)
unlock
update (up)
upgrade
+ x-shelf-diff
+ x-shelf-drop
+ x-shelf-list (x-shelves)
+ x-shelf-list-by-paths
+ x-shelf-log
+ x-shelf-save
+ x-shelve
+ x-unshelve
Subversion is a tool for version control.
For additional information, see http://subversion.apache.org/
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout Wed Nov 28 21:25:32 2018
@@ -84,6 +84,10 @@ usage: 1. log [PATH][@REV]
was created:
svn log --stop-on-copy --limit 1 -r0:HEAD ^/branches/foo
+ Show all log messages for commits between the tags ^/tags/2.0 and
+ ^/tags/3.0; assuming that tag 2.0 was created in revision 100:
+ svn log -rHEAD:100 ^/tags/3.0
+
If ^/trunk/foo.c was moved to ^/trunk/bar.c' in revision 22, 'svn log -v'
shows a deletion and a copy in its changed paths list, such as:
D /trunk/foo.c
@@ -205,7 +209,7 @@ Valid options:
'BASE' base rev of item's working copy
'COMMITTED' last commit at or before BASE
'PREV' revision just before COMMITTED
- -N [--non-recursive] : obsolete; try --depth=files or --depth=immediates
+ -N [--non-recursive] : obsolete; same as --depth=files
--depth ARG : limit operation by depth ARG ('empty', 'files',
'immediates', or 'infinity')
--set-depth ARG : set new working copy depth to ARG ('exclude',
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout Wed Nov 28 21:25:32 2018
@@ -42,18 +42,19 @@ Available subcommands:
resolve
resolved
revert
- shelf-diff
- shelf-drop
- shelf-list (shelves)
- shelf-log
- shelf-save
- shelve
- unshelve
status (stat, st)
switch (sw)
unlock
update (up)
upgrade
+ x-shelf-diff
+ x-shelf-drop
+ x-shelf-list (x-shelves)
+ x-shelf-list-by-paths
+ x-shelf-log
+ x-shelf-save
+ x-shelve
+ x-unshelve
Subversion is a tool for version control.
For additional information, see http://subversion.apache.org/
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/info_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/info_tests.py Wed Nov 28 21:25:32 2018
@@ -716,6 +716,72 @@ def info_item_uncommmitted(sbox):
sbox.ospath('newfile'), sbox.ospath('newdir'))
+def info_item_size_wc_recursive(sbox):
+ "recursive '--show-item=repos-size' on local path"
+
+ sbox.build(read_only=True)
+
+ svntest.actions.run_and_verify_svn(
+ [], [],
+ 'info', '--show-item=repos-size', '--recursive',
+ sbox.ospath(''))
+
+
+def info_item_size_repos(sbox):
+ "non-recursive '--show-item=repos-size' on URL"
+
+ sbox.build(read_only=True)
+
+ svntest.actions.run_and_verify_svn(
+ "25\n", [],
+ 'info', '--show-item=repos-size',
+ sbox.repo_url + "/iota")
+
+ # Same, but without the newline.
+ svntest.actions.run_and_verify_svn(
+ "25", [],
+ 'info', '--show-item=repos-size', '--no-newline',
+ sbox.repo_url + "/iota")
+
+ # Same, but with "human-readable" output.
+ svntest.actions.run_and_verify_svn(
+ "25 B", [],
+ 'info', '--show-item=repos-size', '--human-readable',
+ sbox.repo_url + "/iota")
+
+ # No output when the URL is a directory.
+ svntest.actions.run_and_verify_svn(
+ [], [],
+ 'info', '--show-item=repos-size',
+ sbox.repo_url)
+
+
+def info_item_size_repos_recursive(sbox):
+ "recursive '--show-item=repos-size' on dir URL"
+
+ sbox.build(read_only=True)
+
+ expected_output = svntest.verify.UnorderedOutput([
+ "25 " + sbox.repo_url + "/iota\n",
+ "27 " + sbox.repo_url + "/A/B/lambda\n",
+ "25 " + sbox.repo_url + "/A/B/E/beta\n",
+ "26 " + sbox.repo_url + "/A/B/E/alpha\n",
+ "23 " + sbox.repo_url + "/A/mu\n",
+ "26 " + sbox.repo_url + "/A/D/gamma\n",
+ "23 " + sbox.repo_url + "/A/D/G/pi\n",
+ "24 " + sbox.repo_url + "/A/D/G/rho\n",
+ "24 " + sbox.repo_url + "/A/D/G/tau\n",
+ "26 " + sbox.repo_url + "/A/D/H/omega\n",
+ "24 " + sbox.repo_url + "/A/D/H/psi\n",
+ "24 " + sbox.repo_url + "/A/D/H/chi\n",
+ ])
+
+ svntest.actions.run_and_verify_svn(
+ expected_output, [],
+ 'info', '--show-item=repos-size', '--recursive',
+ sbox.repo_url)
+
+
def info_item_failures(sbox):
"failure modes of 'svn info --show-item'"
@@ -746,6 +812,11 @@ def info_item_failures(sbox):
'info', '--show-item=revision', '--no-newline',
sbox.ospath('A'), sbox.ospath('iota'))
+ svntest.actions.run_and_verify_svn(
+ None, (r".*E200007: can't show in-repository size.*"),
+ 'info', '--show-item=repos-size',
+ sbox.ospath('iota'))
+
########################################################################
# Run the tests
@@ -767,6 +838,9 @@ test_list = [ None,
info_item_simple_multiple,
info_item_url,
info_item_uncommmitted,
+ info_item_size_wc_recursive,
+ info_item_size_repos,
+ info_item_size_repos_recursive,
info_item_failures,
]
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/iprop_authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/iprop_authz_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/iprop_authz_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/iprop_authz_tests.py Wed Nov 28 21:25:32 2018
@@ -105,7 +105,7 @@ def iprops_authz(sbox):
write_authz_file(sbox, {
"/" : svntest.main.wc_author + "=rw",
"/A/D/H/psi" : svntest.main.wc_author + "=",})
- if sbox.repo_url.startswith("http"):
+ if svntest.main.is_ra_type_dav():
expected_err = ".*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/lock_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/lock_tests.py Wed Nov 28 21:25:32 2018
@@ -1571,7 +1571,8 @@ def cp_isnt_ro(sbox):
mu2_path = sbox.ospath('A/mu2')
mu3_path = sbox.ospath('A/mu3')
kappa_path = sbox.ospath('kappa')
- open(kappa_path, 'w').write("This is the file 'kappa'.\n")
+ with open(kappa_path, 'w') as f:
+ f.write("This is the file 'kappa'.\n")
## added file
sbox.simple_add('kappa')
@@ -2251,7 +2252,6 @@ def dav_lock_refresh(sbox):
if r.status != httplib.OK:
raise svntest.Failure('Lock refresh failed: %d %s' % (r.status, r.reason))
-@SkipUnless(svntest.main.is_ra_type_dav)
def delete_locked_file_with_percent(sbox):
"lock and delete a file called 'a %( ) .txt'"
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/log_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/log_tests.py Wed Nov 28 21:25:32 2018
@@ -1592,7 +1592,7 @@ def merge_sensitive_log_added_mergeinfo_
# a merge results in added explicit mergeinfo on a path, but that
# path previously inherited mergeinfo (rather than had no explicit
# or inherited mergeinfo). See issue #3235, specifically
- # http://subversion.tigris.org/issues/show_bug.cgi?id=3235#desc8.
+ # https://issues.apache.org/jira/browse/SVN-3235#desc8.
sbox.build()
wc_dir = sbox.wc_dir
@@ -1752,7 +1752,7 @@ def merge_sensitive_log_added_mergeinfo_
def merge_sensitive_log_propmod_merge_inheriting_path(sbox):
"log -g and simple propmod to merge-inheriting path"
- # Issue #3285 (http://subversion.tigris.org/issues/show_bug.cgi?id=3285)
+ # Issue #3285 (https://issues.apache.org/jira/browse/SVN-3285)
sbox.build()
wc_dir = sbox.wc_dir
@@ -2166,13 +2166,13 @@ def log_diff(sbox):
+ [ "@@ -1 +1,2 @@\n",
" This is the file 'beta'.\n",
"+9\n",
- "\ No newline at end of file\n",
+ "\\ No newline at end of file\n",
]
]
r8diff = [ make_diff_header('A2/D/G/rho', 'nonexistent', 'revision 8')
+ [ "@@ -0,0 +1 @@\n",
"+88\n",
- "\ No newline at end of file\n",
+ "\\ No newline at end of file\n",
]
]
log_chain = parse_log_output(output, with_diffs=True)
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/merge_authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/merge_authz_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/merge_authz_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/merge_authz_tests.py Wed Nov 28 21:25:32 2018
@@ -486,7 +486,7 @@ def mergeinfo_and_skipped_paths(sbox):
def merge_fails_if_subtree_is_deleted_on_src(sbox):
"merge fails if subtree is deleted on src"
- ## See http://subversion.tigris.org/issues/show_bug.cgi?id=2876. ##
+ ## See https://issues.apache.org/jira/browse/SVN-2876. ##
# Create a WC
sbox.build()
@@ -613,7 +613,7 @@ def reintegrate_fails_if_no_root_access(
# should be able to reintegrate, regardless of what authorization
# they have to parents of the source and target.
#
- # See http://subversion.tigris.org/issues/show_bug.cgi?id=3242#desc78
+ # See https://issues.apache.org/jira/browse/SVN-3242#desc78
# Some paths we'll care about
wc_dir = sbox.wc_dir
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/merge_automatic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/merge_automatic_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/merge_automatic_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/merge_automatic_tests.py Wed Nov 28 21:25:32 2018
@@ -1163,7 +1163,7 @@ def effective_sync_results_in_reintegrat
# Now try an explicit --reintegrate merge from ^/branch to A.
# This should work because since the resolution of
- # http://subversion.tigris.org/issues/show_bug.cgi?id=3577
+ # https://issues.apache.org/jira/browse/SVN-3577
# if B is *effectively* synced with A, then B can be reintegrated
# to A.
sbox.simple_update()
Modified: subversion/branches/swig-py3/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1847678&r1=1847677&r2=1847678&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/swig-py3/subversion/tests/cmdline/merge_reintegrate_tests.py Wed Nov 28 21:25:32 2018
@@ -1363,7 +1363,7 @@ def reintegrate_with_subtree_mergeinfo(s
# how can any prop changes be merged to it? The answer is that
# the merge code does some quiet housekeeping, merging gamma_moved's
# inherited mergeinfo into its incoming mergeinfo, see
- # http://subversion.tigris.org/issues/show_bug.cgi?id=4309
+ # https://issues.apache.org/jira/browse/SVN-4309
# This test is not covering issue #4309 so we let the current
# behavior pass.
# r17 - B) Synch merge from A to A_COPY