You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2012/03/14 20:40:24 UTC
svn commit: r1300696 [4/6] - in /subversion/branches/fix-rdump-editor: ./
build/generator/ build/win32/ notes/ notes/directory-index/
subversion/bindings/javahl/ subversion/bindings/javahl/native/
subversion/bindings/javahl/tests/org/apache/subversion/...
Modified: subversion/branches/fix-rdump-editor/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnadmin/main.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnadmin/main.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnadmin/main.c Wed Mar 14 19:40:19 2012
@@ -363,7 +363,7 @@ static const svn_opt_subcommand_desc2_t
{'q', 'r', svnadmin__ignore_uuid, svnadmin__force_uuid,
svnadmin__use_pre_commit_hook, svnadmin__use_post_commit_hook,
svnadmin__parent_dir, svnadmin__bypass_prop_validation, 'M'} },
-
+
{"lock", subcommand_lock, {0}, N_
("usage: svnadmin lock REPOS_PATH PATH USERNAME COMMENT-FILE [TOKEN]\n\n"
"Lock PATH by USERNAME setting comments from COMMENT-FILE.\n"
@@ -1027,7 +1027,7 @@ subcommand_load(apr_getopt_t *os, void *
{
lower = upper;
}
-
+
/* Ensure correct range ordering. */
if (lower > upper)
{
@@ -1483,7 +1483,7 @@ subcommand_lock(apr_getopt_t *os, void *
lock_token = APR_ARRAY_IDX(args, 3, const char *);
SVN_ERR(target_arg_to_dirent(&comment_file_name, comment_file_name, pool));
-
+
SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
fs = svn_repos_fs(repos);
@@ -1496,10 +1496,10 @@ subcommand_lock(apr_getopt_t *os, void *
SVN_ERR(svn_stringbuf_from_file2(&file_contents, comment_file_name, pool));
SVN_ERR(svn_utf_cstring_to_utf8(&lock_path_utf8, lock_path, pool));
-
+
if (opt_state->bypass_hooks)
SVN_ERR(svn_fs_lock(&lock, fs, lock_path_utf8,
- lock_token,
+ lock_token,
file_contents->data, /* comment */
0, /* is_dav_comment */
0, /* no expiration time. */
@@ -1507,7 +1507,7 @@ subcommand_lock(apr_getopt_t *os, void *
FALSE, pool));
else
SVN_ERR(svn_repos_fs_lock(&lock, repos, lock_path_utf8,
- lock_token,
+ lock_token,
file_contents->data, /* comment */
0, /* is_dav_comment */
0, /* no expiration time. */
Modified: subversion/branches/fix-rdump-editor/subversion/svndumpfilter/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svndumpfilter/main.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svndumpfilter/main.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svndumpfilter/main.c Wed Mar 14 19:40:19 2012
@@ -110,7 +110,10 @@ write_prop_to_stringbuf(svn_stringbuf_t
}
-/* Prefix matching function to compare node-path with set of prefixes. */
+/* Compare the node-path PATH with the (const char *) prefixes in PFXLIST.
+ * Return TRUE if any prefix is a prefix of PATH (matching whole path
+ * components); FALSE otherwise.
+ * PATH starts with a '/', as do the (const char *) paths in PREFIXES. */
static svn_boolean_t
ary_prefix_match(const apr_array_header_t *pfxlist, const char *path)
{
@@ -125,7 +128,7 @@ ary_prefix_match(const apr_array_header_
if (path_len < pfx_len)
continue;
if (strncmp(path, pfx, pfx_len) == 0
- && (path[pfx_len] == '\0' || path[pfx_len] == '/'))
+ && (pfx_len == 1 || path[pfx_len] == '\0' || path[pfx_len] == '/'))
return TRUE;
}
@@ -134,7 +137,8 @@ ary_prefix_match(const apr_array_header_
/* Check whether we need to skip this PATH based on its presence in
- the PREFIXES list, and the DO_EXCLUDE option. */
+ the PREFIXES list, and the DO_EXCLUDE option.
+ PATH starts with a '/', as do the (const char *) paths in PREFIXES. */
static APR_INLINE svn_boolean_t
skip_path(const char *path, const apr_array_header_t *prefixes,
svn_boolean_t do_exclude, svn_boolean_t glob)
Modified: subversion/branches/fix-rdump-editor/subversion/svnlook/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnlook/main.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnlook/main.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnlook/main.c Wed Mar 14 19:40:19 2012
@@ -875,7 +875,7 @@ display_prop_diffs(const apr_array_heade
/* The last character in a property is often not a newline.
An eol character is appended to prevent the diff API to add a
- ' \ No newline at end of file' line. We add
+ ' \ No newline at end of file' line. We add
' \ No newline at end of property' manually if needed. */
tmp = orig_value ? orig_value : svn_string_create_empty(pool);
orig = maybe_append_eol(tmp, NULL, pool);
Modified: subversion/branches/fix-rdump-editor/subversion/svnrdump/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnrdump/dump_editor.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnrdump/dump_editor.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnrdump/dump_editor.c Wed Mar 14 19:40:19 2012
@@ -226,7 +226,7 @@ get_props_content(svn_stringbuf_t **head
svn_stream_t *content_stream;
apr_hash_t *normal_props;
const char *buf;
-
+
*content = svn_stringbuf_create_empty(result_pool);
*header = svn_stringbuf_create_empty(result_pool);
@@ -866,7 +866,7 @@ fetch_base_func(const char **filename,
}
else if (err)
return svn_error_trace(err);
-
+
SVN_ERR(svn_stream_close(fstream));
return SVN_NO_ERROR;
Modified: subversion/branches/fix-rdump-editor/subversion/svnserve/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnserve/main.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnserve/main.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnserve/main.c Wed Mar 14 19:40:19 2012
@@ -147,6 +147,7 @@ void winservice_notify_stop(void)
#define SVNSERVE_OPT_LOG_FILE 264
#define SVNSERVE_OPT_CACHE_TXDELTAS 265
#define SVNSERVE_OPT_CACHE_FULLTEXTS 266
+#define SVNSERVE_OPT_SINGLE_CONN 267
static const apr_getopt_option_t svnserve__options[] =
{
@@ -231,6 +232,10 @@ static const apr_getopt_option_t svnserv
N_("run in foreground (useful for debugging)\n"
" "
"[mode: daemon]")},
+ {"single-thread", SVNSERVE_OPT_SINGLE_CONN, 0,
+ N_("handle one connection at a time in the parent process\n"
+ " "
+ "(useful for debugging)")},
{"log-file", SVNSERVE_OPT_LOG_FILE, 1,
N_("svnserve log file")},
{"pid-file", SVNSERVE_OPT_PID_FILE, 1,
@@ -428,10 +433,13 @@ int main(int argc, const char *argv[])
const char *host = NULL;
int family = APR_INET;
apr_int32_t sockaddr_info_flags = 0;
+#if APR_HAVE_IPV6
svn_boolean_t prefer_v6 = FALSE;
+#endif
svn_boolean_t quiet = FALSE;
svn_boolean_t is_version = FALSE;
int mode_opt_count = 0;
+ int handling_opt_count = 0;
const char *config_filename = NULL;
const char *pid_filename = NULL;
const char *log_filename = NULL;
@@ -486,7 +494,10 @@ int main(int argc, const char *argv[])
switch (opt)
{
case '6':
+#if APR_HAVE_IPV6
prefer_v6 = TRUE;
+#endif
+ /* ### Maybe error here if we don't have IPV6 support? */
break;
case 'h':
@@ -513,6 +524,11 @@ int main(int argc, const char *argv[])
foreground = TRUE;
break;
+ case SVNSERVE_OPT_SINGLE_CONN:
+ handling_mode = connection_mode_single;
+ handling_opt_count++;
+ break;
+
case 'i':
if (run_mode != run_mode_inetd)
{
@@ -585,6 +601,7 @@ int main(int argc, const char *argv[])
case 'T':
handling_mode = connection_mode_thread;
+ handling_opt_count++;
break;
case 'c':
@@ -665,6 +682,14 @@ int main(int argc, const char *argv[])
usage(argv[0], pool);
}
+ if (handling_opt_count > 1)
+ {
+ svn_error_clear(svn_cmdline_fputs(
+ _("You may only specify one of -T or --single-thread\n"),
+ stderr, pool));
+ usage(argv[0], pool);
+ }
+
/* If a configuration file is specified, load it and any referenced
* password and authorization files. */
if (config_filename)
Modified: subversion/branches/fix-rdump-editor/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnserve/serve.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnserve/serve.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnserve/serve.c Wed Mar 14 19:40:19 2012
@@ -1470,7 +1470,7 @@ static svn_error_t *get_dir(svn_ra_svn_c
apr_array_header_t *params, void *baton)
{
server_baton_t *b = baton;
- const char *path, *full_path, *file_path, *cauthor, *cdate;
+ const char *path, *full_path, *file_path, *cdate;
svn_revnum_t rev;
apr_hash_t *entries, *props = NULL, *file_props;
apr_hash_index_t *hi;
@@ -1540,9 +1540,15 @@ static svn_error_t *get_dir(svn_ra_svn_c
if (want_props)
SVN_CMD_ERR(get_props(&props, root, full_path, pool));
- /* Fetch the directory entries if requested. */
+ /* Begin response ... */
+ SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(r(!", "success", rev));
+ SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
+ SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(!"));
+
+ /* Fetch the directory entries if requested and send them immediately. */
if (want_contents)
{
+ const char *zero_date = svn_time_to_cstring(0, pool);
SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
/* Transform the hash table's FS entries into dirents. This probably
@@ -1552,91 +1558,62 @@ static svn_error_t *get_dir(svn_ra_svn_c
{
const char *name = svn__apr_hash_index_key(hi);
svn_fs_dirent_t *fsent = svn__apr_hash_index_val(hi);
- svn_dirent_t *entry;
+
+ svn_dirent_t entry;
+ memset(&entry, 0, sizeof(entry));
svn_pool_clear(subpool);
file_path = svn_fspath__join(full_path, name, subpool);
-
if (! lookup_access(subpool, b, conn, svn_authz_read,
file_path, FALSE))
- {
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, NULL);
- continue;
- }
-
- entry = apr_pcalloc(pool, sizeof(*entry));
+ continue;
if (dirent_fields & SVN_DIRENT_KIND)
- {
- /* kind */
- entry->kind = fsent->kind;
- }
+ entry.kind = fsent->kind;
if (dirent_fields & SVN_DIRENT_SIZE)
- {
- /* size */
- if (entry->kind == svn_node_dir)
- entry->size = 0;
- else
- SVN_CMD_ERR(svn_fs_file_length(&entry->size, root, file_path,
+ if (entry.kind != svn_node_dir)
+ SVN_CMD_ERR(svn_fs_file_length(&entry.size, root, file_path,
subpool));
- }
if (dirent_fields & SVN_DIRENT_HAS_PROPS)
{
/* has_props */
SVN_CMD_ERR(svn_fs_node_proplist(&file_props, root, file_path,
subpool));
- entry->has_props = (apr_hash_count(file_props) > 0);
+ entry.has_props = (apr_hash_count(file_props) > 0);
}
+ cdate = NULL;
if ((dirent_fields & SVN_DIRENT_LAST_AUTHOR)
|| (dirent_fields & SVN_DIRENT_TIME)
|| (dirent_fields & SVN_DIRENT_CREATED_REV))
{
/* created_rev, last_author, time */
- SVN_CMD_ERR(svn_repos_get_committed_info(&entry->created_rev,
+ SVN_CMD_ERR(svn_repos_get_committed_info(&entry.created_rev,
&cdate,
- &cauthor, root,
+ &entry.last_author,
+ root,
file_path,
subpool));
- entry->last_author = apr_pstrdup(pool, cauthor);
- if (cdate)
- SVN_CMD_ERR(svn_time_from_cstring(&entry->time, cdate,
- subpool));
- else
- entry->time = (time_t) -1;
}
- /* Store the entry. */
- apr_hash_set(entries, name, APR_HASH_KEY_STRING, entry);
- }
- svn_pool_destroy(subpool);
- }
+ if (cdate == NULL)
+ cdate = zero_date;
- /* Write out response. */
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(r(!", "success", rev));
- SVN_ERR(svn_ra_svn_write_proplist(conn, pool, props));
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(!"));
- if (want_contents)
- {
- for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
- {
- const char *name = svn__apr_hash_index_key(hi);
- svn_dirent_t *entry = svn__apr_hash_index_val(hi);
-
- cdate = (entry->time == (time_t) -1) ? NULL
- : svn_time_to_cstring(entry->time, pool);
+ /* Send the entry. */
SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "cwnbr(?c)(?c)", name,
- svn_node_kind_to_word(entry->kind),
- (apr_uint64_t) entry->size,
- entry->has_props, entry->created_rev,
- cdate, entry->last_author));
+ svn_node_kind_to_word(entry.kind),
+ (apr_uint64_t) entry.size,
+ entry.has_props, entry.created_rev,
+ cdate, entry.last_author));
}
+ svn_pool_destroy(subpool);
}
- SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
- return SVN_NO_ERROR;
+
+ /* Finish response. */
+ return svn_ra_svn_write_tuple(conn, pool, "!))");
}
static svn_error_t *update(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
@@ -3094,6 +3071,140 @@ fs_warning_func(void *baton, svn_error_t
svn_pool_clear(b->pool);
}
+
+static svn_error_t *
+fetch_props_func(apr_hash_t **props,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ server_baton_t *sb = baton;
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ SVN_ERR(svn_fs_youngest_rev(&base_revision, sb->fs, scratch_pool));
+
+ if (svn_path_is_url(path))
+ {
+ /* This is a copyfrom URL. */
+ path = svn_uri_skip_ancestor(sb->repos_url, path, scratch_pool);
+ path = svn_fspath__canonicalize(path, scratch_pool);
+ }
+ else
+ {
+ /* This is a base-relative path. */
+ if (path[0] != '/')
+ /* Get an absolute path for use in the FS. */
+ path = svn_fspath__join(sb->fs_path->data, path, scratch_pool);
+ }
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, sb->fs, base_revision, scratch_pool));
+
+ err = svn_fs_node_proplist(props, fs_root, path, result_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *props = apr_hash_make(result_pool);
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_kind_func(svn_kind_t *kind,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool)
+{
+ server_baton_t *sb = baton;
+ svn_node_kind_t node_kind;
+ svn_fs_root_t *fs_root;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ SVN_ERR(svn_fs_youngest_rev(&base_revision, sb->fs, scratch_pool));
+
+ if (svn_path_is_url(path))
+ {
+ /* This is a copyfrom URL. */
+ path = svn_uri_skip_ancestor(sb->repos_url, path, scratch_pool);
+ path = svn_fspath__canonicalize(path, scratch_pool);
+ }
+ else
+ {
+ /* This is a base-relative path. */
+ if (path[0] != '/')
+ /* Get an absolute path for use in the FS. */
+ path = svn_fspath__join(sb->fs_path->data, path, scratch_pool);
+ }
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, sb->fs, base_revision, scratch_pool));
+
+ SVN_ERR(svn_fs_check_path(&node_kind, fs_root, path, scratch_pool));
+ *kind = svn__kind_from_node_kind(node_kind, FALSE);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fetch_base_func(const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ server_baton_t *sb = baton;
+ svn_stream_t *contents;
+ svn_stream_t *file_stream;
+ const char *tmp_filename;
+ svn_fs_root_t *fs_root;
+ svn_error_t *err;
+
+ if (!SVN_IS_VALID_REVNUM(base_revision))
+ SVN_ERR(svn_fs_youngest_rev(&base_revision, sb->fs, scratch_pool));
+
+ if (svn_path_is_url(path))
+ {
+ /* This is a copyfrom URL. */
+ path = svn_uri_skip_ancestor(sb->repos_url, path, scratch_pool);
+ path = svn_fspath__canonicalize(path, scratch_pool);
+ }
+ else
+ {
+ /* This is a base-relative path. */
+ if (path[0] != '/')
+ /* Get an absolute path for use in the FS. */
+ path = svn_fspath__join(sb->fs_path->data, path, scratch_pool);
+ }
+
+ SVN_ERR(svn_fs_revision_root(&fs_root, sb->fs, base_revision, scratch_pool));
+
+ err = svn_fs_file_contents(&contents, fs_root, path, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ *filename = NULL;
+ return SVN_NO_ERROR;
+ }
+ else if (err)
+ return svn_error_trace(err);
+ SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
+
+ *filename = apr_pstrdup(result_pool, tmp_filename);
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *serve(svn_ra_svn_conn_t *conn, serve_params_t *params,
apr_pool_t *pool)
{
@@ -3257,5 +3368,18 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
}
+ /* Set up editor shims. */
+ {
+ svn_delta_shim_callbacks_t *callbacks =
+ svn_delta_shim_callbacks_default(pool);
+
+ callbacks->fetch_base_func = fetch_base_func;
+ callbacks->fetch_props_func = fetch_props_func;
+ callbacks->fetch_kind_func = fetch_kind_func;
+ callbacks->fetch_baton = &b;
+
+ SVN_ERR(svn_ra_svn__set_shim_callbacks(conn, callbacks));
+ }
+
return svn_ra_svn_handle_commands2(conn, pool, main_commands, &b, FALSE);
}
Modified: subversion/branches/fix-rdump-editor/subversion/svnversion/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/svnversion/main.c?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/svnversion/main.c (original)
+++ subversion/branches/fix-rdump-editor/subversion/svnversion/main.c Wed Mar 14 19:40:19 2012
@@ -225,7 +225,7 @@ main(int argc, const char *argv[])
}
SVN_INT_ERR(svn_utf_cstring_to_utf8(&wc_path,
- (os->ind < argc) ? os->argv[os->ind]
+ (os->ind < argc) ? os->argv[os->ind]
: ".",
pool));
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/README
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/README?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/README (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/README Wed Mar 14 19:40:19 2012
@@ -333,7 +333,8 @@ svntest/tree.py. It will explain the ge
Finally, try copying-and-pasting a simple test and then edit from
there. Don't forget to add your test to the 'test_list' variable at
-the bottom of the file.
+the bottom of the file. To avoid renumbering of existing tests, you
+should add new tests to the end of the list.
Testing Compatability With Previous Release
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/authz_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/authz_tests.py Wed Mar 14 19:40:19 2012
@@ -1290,7 +1290,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing directory '.*Z' is forbidden)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*Z' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1302,7 +1303,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*zeta' is forbidden)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*zeta' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
sbox.simple_revert('A/zeta')
@@ -1323,7 +1325,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*lambda' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*lambda' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1333,7 +1336,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*lambda' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*lambda' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1343,7 +1347,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing directory '.*F' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*F' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
sbox.simple_revert('A/B/F')
@@ -1352,7 +1357,8 @@ def wc_commit_error_handling(sbox):
# Allow the informative error for dav and the ra_svn specific one that is
# returned on editor->edit_close().
expected_err = "(svn: E195023: Changing file '.*mu' is forbidden.*)|" + \
- "(svn: E220004: Access denied)"
+ "(svn: E220004: Access denied)|" + \
+ "(svn: E175013: Access to '.*mu' forbidden)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1383,7 +1389,7 @@ def upgrade_absent(sbox):
# Relocate to allow finding the repository
svntest.actions.run_and_verify_svn(None, None, [], 'relocate',
'svn://127.0.0.1/authz_tests-2',
- sbox.repo_url, sbox.wc_dir)
+ sbox.repo_url, sbox.wc_dir)
expected_output = svntest.wc.State(sbox.wc_dir, {
})
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/basic_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/basic_tests.py Wed Mar 14 19:40:19 2012
@@ -991,7 +991,7 @@ def verify_file_deleted(message, path):
if message is not None:
print(message)
###TODO We should raise a less generic error here. which?
- raise Failure
+ raise svntest.Failure
def verify_dir_deleted(path):
if not os.path.isdir(path):
@@ -2898,17 +2898,17 @@ def rm_missing_with_case_clashing_ondisk
iota_path = os.path.join(wc_dir, 'iota')
IOTA_path = os.path.join(wc_dir, 'IOTA')
-
+
# Out-of-svn move, to make iota missing, while IOTA appears as unversioned.
os.rename(iota_path, IOTA_path)
-
+
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.add({
'iota' : Item(status='! ', wc_rev='1'),
'IOTA' : Item(status='? '),
})
svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
-
+
# 'svn rm' iota, should leave IOTA alone.
svntest.actions.run_and_verify_svn(None, None, [],
'rm', iota_path)
@@ -2922,6 +2922,29 @@ def rm_missing_with_case_clashing_ondisk
svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+def delete_conflicts_one_of_many(sbox):
+ """delete multiple targets one conflict"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.main.file_append(sbox.ospath('A/D/G/rho'), 'new rho')
+ sbox.simple_commit()
+ svntest.main.file_append(sbox.ospath('A/D/G/rho'), 'conflict rho')
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'update', '-r1', '--accept', 'postpone',
+ wc_dir)
+
+ if not os.path.exists(sbox.ospath('A/D/G/rho.mine')):
+ raise svntest.Failure("conflict file rho.mine missing")
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', '--force',
+ sbox.ospath('A/D/G/rho'),
+ sbox.ospath('A/D/G/tau'))
+
+ verify_file_deleted("failed to remove conflict file",
+ sbox.ospath('A/D/G/rho.mine'))
########################################################################
# Run the tests
@@ -2988,6 +3011,7 @@ test_list = [ None,
add_multiple_targets,
quiet_commits,
rm_missing_with_case_clashing_ondisk_item,
+ delete_conflicts_one_of_many,
]
if __name__ == '__main__':
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/checkout_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/checkout_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/checkout_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/checkout_tests.py Wed Mar 14 19:40:19 2012
@@ -31,6 +31,7 @@ import sys, re, os, time, subprocess
# Our testing module
import svntest
from svntest import wc, actions
+import logging
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -41,6 +42,8 @@ Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = wc.StateItem
+logger = logging.getLogger()
+
#----------------------------------------------------------------------
# Helper function for testing stderr from co.
# If none of the strings in STDERR list matches the regular expression
@@ -50,10 +53,9 @@ def test_stderr(re_string, stderr):
for line in stderr:
if exp_err_re.search(line):
return
- if svntest.main.options.verbose:
- for x in stderr:
- sys.stdout.write(x)
- print("Expected stderr reg-ex: '" + re_string + "'")
+ for x in stderr:
+ logger.debug(x[:-1])
+ logger.info("Expected stderr reg-ex: '" + re_string + "'")
raise svntest.Failure("Checkout failed but not in the expected way")
#----------------------------------------------------------------------
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/commit_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/commit_tests.py Wed Mar 14 19:40:19 2012
@@ -1140,7 +1140,7 @@ def commit_in_dir_scheduled_for_addition
mu_path = os.path.join(wc_dir, 'Z', 'mu')
svntest.main.run_svn(None, 'move', A_path, Z_path)
-
+
# Make sure mu is a committable
svntest.main.file_write(mu_path, "xxxx")
@@ -1183,7 +1183,7 @@ def commit_in_dir_scheduled_for_addition
"svn: E200009: '" +
re.escape(Z_abspath) +
"' is not known to exist in the.*",
- R_path)
+ R_path)
#----------------------------------------------------------------------
@@ -2846,7 +2846,7 @@ def commit_incomplete(sbox):
expected_status,
None,
wc_dir)
-
+
#----------------------------------------------------------------------
# Reported here:
# Message-ID: <4E...@gmail.com>
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/depth_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/depth_tests.py Wed Mar 14 19:40:19 2012
@@ -2842,6 +2842,48 @@ def update_below_depth_empty(sbox):
svntest.actions.run_and_verify_update(sbox.wc_dir, expected_output, None,
None, None)
+# Test for issue #4136.
+@Issue(4136)
+def commit_then_immediates_update(sbox):
+ "deep commit followed by update --depth immediates"
+ sbox.build()
+
+ repo_url = sbox.repo_url
+ wc_dir = sbox.wc_dir
+ mu_path = sbox.ospath('A/mu')
+
+ # Modify A/mu and commit the changes.
+ svntest.main.file_write(mu_path, "modified mu\n")
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/mu' : Item(verb='Sending'),
+ })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/mu', wc_rev=2, status=' ')
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None,
+ wc_dir)
+
+ # Now, update --depth immediates in the root of the working copy.
+ expected_output = svntest.wc.State(wc_dir, { })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.tweak('A/mu', contents="modified mu\n")
+ expected_status = svntest.wc.State(wc_dir, { '' : svntest.wc.StateItem() })
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('', wc_rev=2, status=' ')
+ expected_status.tweak('A', wc_rev=2, status=' ')
+ expected_status.tweak('A/mu', wc_rev=2, status=' ')
+ expected_status.tweak('iota', wc_rev=2, status=' ')
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ "--depth=immediates", wc_dir)
+
+
+
#----------------------------------------------------------------------
# list all tests here, starting with None:
test_list = [ None,
@@ -2889,6 +2931,7 @@ test_list = [ None,
update_depth_empty_root_of_infinite_children,
sparse_update_with_dash_dash_parents,
update_below_depth_empty,
+ commit_then_immediates_update,
]
if __name__ == "__main__":
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/diff_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/diff_tests.py Wed Mar 14 19:40:19 2012
@@ -161,7 +161,7 @@ def make_diff_prop_val(plus_minus, pval)
if len(pval) > 0 and pval[-1] != '\n':
return [plus_minus + pval + "\n","\\ No newline at end of property\n"]
return [plus_minus + pval]
-
+
def make_diff_prop_deleted(pname, pval):
"""Return a property diff for deletion of property PNAME, old value PVAL.
PVAL is a single string with no embedded newlines. Return the result
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/externals_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/externals_tests.py Wed Mar 14 19:40:19 2012
@@ -1916,14 +1916,25 @@ def file_externals_different_url(sbox):
'rr-e-1' : Item(status='A '),
})
+ expected_status = actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('', status=' M')
+ expected_status.add({
+ 'r2-e-1' : Item(status=' ', wc_rev='1', switched='X'),
+ 'r1-e-1' : Item(status=' ', wc_rev='1', switched='X'),
+ 'r1-e-2' : Item(status=' ', wc_rev='1', switched='X'),
+ 'rr-e-1' : Item(status=' ', wc_rev='1', switched='X'),
+ 'r2-e-2' : Item(status=' ', wc_rev='1', switched='X'),
+ })
+
svntest.actions.run_and_verify_update(wc_dir,
- expected_output, None, None, None)
+ expected_output, None,
+ expected_status, None)
# Verify that all file external URLs are descendants of r1_url
for e in ['r1-e-1', 'r1-e-2', 'r2-e-1', 'r2-e-2', 'rr-e-1']:
actions.run_and_verify_info([{'Repository Root' : r1_url}],
os.path.join(sbox.wc_dir, e))
-
+
svntest.actions.run_and_verify_svn(None, None, [],
'relocate', r1_url, r2_url, wc_dir)
@@ -1934,7 +1945,8 @@ def file_externals_different_url(sbox):
})
svntest.actions.run_and_verify_update(wc_dir,
- expected_output, None, None, None)
+ expected_output, None,
+ expected_status, None)
# Verify that all file external URLs are descendants of r2_url
for e in ['r1-e-1', 'r1-e-2', 'r2-e-1', 'r2-e-2', 'rr-e-1']:
@@ -2554,10 +2566,10 @@ def include_immediate_dir_externals(sbox
# svn ps svn:externals "^/A/B/E X/XE" wc_dir
# svn ci
# svn up
- #
+ #
# svn ps some change X/XE
# echo mod >> X/XE/alpha
- #
+ #
# svn st X/XE
# # Expect only the propset on X/XE to be committed.
# # Should be like 'svn commit --include-externals --depth=empty X/XE'.
@@ -2808,7 +2820,7 @@ def url_to_wc_copy_of_externals(sbox):
# Previously this failed with:
# >svn copy ^^/A/C External-WC-to-URL-Copy
# U External-WC-to-URL-Copy
- #
+ #
# Fetching external item into 'External-WC-to-URL-Copy\external':
# A External-WC-to-URL-Copy\external\pi
# A External-WC-to-URL-Copy\external\rho
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/info_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/info_tests.py Wed Mar 14 19:40:19 2012
@@ -469,7 +469,7 @@ def info_show_exclude(sbox):
sbox.simple_rm('iota')
sbox.simple_commit()
-
+
expected_error = 'svn: E200009: Could not display info for all targets.*'
# Expect error on iota (status = not-present)
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_authz_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_authz_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_authz_tests.py Wed Mar 14 19:40:19 2012
@@ -443,7 +443,7 @@ def mergeinfo_and_skipped_paths(sbox):
# and skipped). 'A_COPY_2/D/H/zeta' must therefore get its own explicit
# mergeinfo from this merge.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '--recursive',
- wc_restricted)
+ wc_restricted)
expected_output = wc.State(A_COPY_2_H_path, {
'omega' : Item(status='U '),
'zeta' : Item(status='A '),
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_reintegrate_tests.py Wed Mar 14 19:40:19 2012
@@ -2430,7 +2430,7 @@ def reintegrate_replaced_source(sbox):
A_path = os.path.join(sbox.wc_dir, "A")
A_COPY_path = os.path.join(sbox.wc_dir, "A_COPY")
beta_COPY_path = os.path.join(sbox.wc_dir, "A_COPY", "B", "E", "beta")
- mu_COPY_path = os.path.join(sbox.wc_dir, "A_COPY", "mu")
+ mu_COPY_path = os.path.join(sbox.wc_dir, "A_COPY", "mu")
# Using cherrypick merges, simulate a series of sync merges from A to
# A_COPY with a replace of A_COPY along the way.
@@ -2470,7 +2470,7 @@ def reintegrate_replaced_source(sbox):
wc_dir)
# r12 - Do a final sync merge of A to A_COPY in preparation for
- # reintegration.
+ # reintegration.
svntest.main.run_svn(None, 'up', wc_dir)
svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
svntest.main.run_svn(None, 'ci', '-m', 'Sycn A_COPY with A', wc_dir)
@@ -2541,7 +2541,7 @@ def reintegrate_replaced_source(sbox):
expected_skip,
[], None, None, None, None, True, True,
'--reintegrate', A_path)
-
+
#----------------------------------------------------------------------
@SkipUnless(svntest.main.is_posix_os)
@Issue(4052)
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/merge_tests.py Wed Mar 14 19:40:19 2012
@@ -14124,11 +14124,13 @@ def merge_range_prior_to_rename_source_e
'move', sbox.repo_url + '/A/D/H/nu',
sbox.repo_url + '/A/D/H/nu_moved',
'-m', 'Move nu to nu_moved')
- svntest.actions.run_and_verify_svn(None,
- ["Updating '%s':\n" % (wc_dir),
- "D " + nu_path + "\n",
- "A " + nu_moved_path + "\n",
- "Updated to revision 12.\n"],
+ expected_output = svntest.verify.UnorderedOutput(
+ ["Updating '%s':\n" % (wc_dir),
+ "D " + nu_path + "\n",
+ "A " + nu_moved_path + "\n",
+ "Updated to revision 12.\n"],
+ )
+ svntest.actions.run_and_verify_svn(None, expected_output,
[], 'up', wc_dir)
# Now merge -r7:12 from A to A_COPY.
@@ -17018,7 +17020,7 @@ def merged_deletion_causes_tree_conflict
'-m', 'Copy ^/A to ^/branch')
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- # r4 - Delete A/D/H/psi
+ # r4 - Delete A/D/H/psi
svntest.actions.run_and_verify_svn(None, None, [], 'delete', psi_path)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'Delete a a path with native eol-style',
@@ -17213,7 +17215,7 @@ def unnecessary_noninheritable_mergeinfo
B_branch_path = os.path.join(sbox.wc_dir, 'branch', 'B')
- # Setup a simple branch to which
+ # Setup a simple branch to which
expected_output, expected_mergeinfo_output, expected_elision_output, \
expected_status, expected_disk, expected_skip = \
noninheritable_mergeinfo_test_set_up(sbox)
@@ -17258,7 +17260,7 @@ def unnecessary_noninheritable_mergeinfo
B_branch_path = os.path.join(sbox.wc_dir, 'branch', 'B')
E_path = os.path.join(sbox.wc_dir, 'A', 'B', 'E')
- # Setup a simple branch to which
+ # Setup a simple branch to which
expected_output, expected_mergeinfo_output, expected_elision_output, \
expected_status, expected_disk, expected_skip = \
noninheritable_mergeinfo_test_set_up(sbox)
@@ -17316,7 +17318,7 @@ def unnecessary_noninheritable_mergeinfo
# /A/B:4* <-- Should be inheritable
# Properties on 'branch\B\E':
# svn:mergeinfo
- # /A/B/E:4 <-- Not necessary
+ # /A/B/E:4 <-- Not necessary
expected_output = wc.State(B_branch_path, {
'E' : Item(status=' U'),
})
@@ -17355,6 +17357,116 @@ def unnecessary_noninheritable_mergeinfo
None, None, None, None, None, 1, 1,
'--depth', 'immediates', B_branch_path)
+#----------------------------------------------------------------------
+# Test for issue #4132, "merge of replaced source asserts".
+# The original use-case is the following merges, which both asserted:
+# svn merge -cr1295005 ^/subversion/trunk@1295000 ../src
+# svn merge -cr1295004 ^/subversion/trunk/@r1295004 ../src
+@Issue(4132)
+@XFail()
+def svnmucc_abuse_1(sbox):
+ "svnmucc: merge a replacement"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ ## Using A/ as our trunk, since one cannot replace the root.
+
+ ## r2: open a branch
+ sbox.simple_repo_copy('A', 'A_COPY')
+
+ ## r3: padding (to make the revnums-mod-10 match)
+ sbox.simple_repo_copy('iota', 'padding')
+
+ ## r4: trunk: accidental change
+ sbox.simple_append('A/mu', 'accidental change')
+ sbox.simple_commit()
+
+ ## r5: fail to revert it
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'r5',
+ '-U', sbox.repo_url,
+ 'rm', 'A',
+ 'cp', 'HEAD', 'A', 'A')
+
+ ## r6: really revert it
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
+ '-m', 'r6',
+ '-U', sbox.repo_url,
+ 'rm', 'A',
+ 'cp', '3', 'A', 'A')
+
+ ## Attempt to merge that.
+ # This used to assert:
+ # --- Recording mergeinfo for merge of r5 into 'svn-test-work/working_copies/merge_tests-125/A_COPY':
+ # subversion/libsvn_subr/mergeinfo.c:1172: (apr_err=235000)
+ # svn: E235000: In file 'subversion/libsvn_subr/mergeinfo.c' line 1172: assertion failed (IS_VALID_FORWARD_RANGE(first))
+ sbox.simple_update()
+ svntest.main.run_svn(None, 'merge', '-c', 'r5', '^/A@r5',
+ sbox.ospath('A_COPY'))
+
+#----------------------------------------------------------------------
+# Test for issue #4138 'replacement in merge source not notified correctly'.
+@SkipUnless(server_has_mergeinfo)
+@XFail()
+@Issue(4138)
+def merge_source_with_replacement(sbox):
+ "replacement in merge source not notified correctly"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Some paths we'll care about.
+ A_path = os.path.join(sbox.wc_dir, 'A')
+ omega_path = os.path.join(sbox.wc_dir, 'A', 'D', 'H', 'omega')
+ A_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY')
+ beta_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'B', 'E', 'beta')
+ psi_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'psi')
+ rho_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'G', 'rho')
+ omega_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'omega')
+
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ # r7 Delete A, replace it with A@5, effectively reverting the change
+ # made to A/D/H/omega in r6:
+ svntest.main.run_svn(None, 'up', wc_dir)
+ svntest.main.run_svn(None, 'del', A_path)
+ svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A@5', A_path)
+ svntest.main.run_svn(None, 'ci', '-m',
+ 'Replace A with older version of itself', wc_dir)
+
+ # r8: Make an edit to A/D/H/omega:
+ svntest.main.file_write(omega_path, "New content for 'omega'.\n")
+ svntest.main.run_svn(None, 'ci', '-m', 'file edit', wc_dir)
+
+ # Update and sync merge ^/A to A_COPY.
+ svntest.main.run_svn(None, 'up', wc_dir)
+ # This currently fails because the merge notifications make it look like
+ # r6 from ^/A was merged and recorded:
+ #
+ # >svn merge ^^/A A_COPY
+ # --- Merging r2 through r5 into 'A_COPY':
+ # U A_COPY\B\E\beta
+ # U A_COPY\D\G\rho
+ # U A_COPY\D\H\psi
+ # --- Recording mergeinfo for merge of r2 through r5 into 'A_COPY':
+ # U A_COPY
+ # --- Merging r6 through r8 into 'A_COPY':
+ # U A_COPY\D\H\omega
+ # --- Recording mergeinfo for merge of r6 through r8 into 'A_COPY':
+ # G A_COPY
+ expected_output = expected_merge_output([[2,5],[7,8]],
+ ['U ' + beta_COPY_path + '\n',
+ 'U ' + rho_COPY_path + '\n',
+ 'U ' + omega_COPY_path + '\n',
+ 'U ' + psi_COPY_path + '\n',
+ ' U ' + A_COPY_path + '\n',
+ ' G ' + A_COPY_path + '\n',])
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', sbox.repo_url + '/A',
+ A_COPY_path)
+
########################################################################
# Run the tests
@@ -17485,6 +17597,8 @@ test_list = [ None,
record_only_merge_adds_new_subtree_mergeinfo,
unnecessary_noninheritable_mergeinfo_missing_subtrees,
unnecessary_noninheritable_mergeinfo_shallow_merge,
+ svnmucc_abuse_1,
+ merge_source_with_replacement,
]
if __name__ == '__main__':
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/mergeinfo_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/mergeinfo_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/mergeinfo_tests.py Wed Mar 14 19:40:19 2012
@@ -532,7 +532,7 @@ def wc_target_inherits_mergeinfo_from_re
gamma_2_path = os.path.join(wc_dir, 'A_COPY_2', 'D', 'gamma')
tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
D_COPY_path = os.path.join(wc_dir, 'A_COPY', 'D')
-
+
# Merge -c5 ^/A/D/G/rho A_COPY\D\G\rho
# Merge -c7 ^/A A_COPY
# Commit as r8
@@ -565,7 +565,7 @@ def wc_target_inherits_mergeinfo_from_re
# Check the merged and eligible revisions both recursively and
# non-recursively.
- # Eligible : Non-recursive
+ # Eligible : Non-recursive
svntest.actions.run_and_verify_mergeinfo(
adjust_error_for_server_version(''),
['4','5'], sbox.repo_url + '/A/D', subtree_wc,
@@ -618,7 +618,7 @@ def wc_target_inherits_mergeinfo_from_re
svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m',
'Merge r8 from A_COPY_2 to A_COPY',
wc_dir)
-
+
def test_svn_mergeinfo_4_way(wc_target):
# Eligible : Non-recursive
svntest.actions.run_and_verify_mergeinfo(
@@ -738,7 +738,7 @@ def noninheritabled_mergeinfo_not_always
# unconditionally set for merges with shallow operational depths.
svntest.actions.run_and_verify_svn(None, None, [],
'propset', SVN_PROP_MERGEINFO,
- '/A:3*\n', branch_path)
+ '/A:3*\n', branch_path)
svntest.main.run_svn(None, 'commit', '-m', 'shallow merge', wc_dir)
# Now check that r3 is reported as fully merged from ^/A to ^/branch
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/patch_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/patch_tests.py Wed Mar 14 19:40:19 2012
@@ -3727,7 +3727,7 @@ def patch_deletes_prop(sbox):
# *adds* the property.
svntest.main.run_svn(None, 'revert', iota_path)
- # Apply patch
+ # Apply patch
unidiff_patch = [
"Index: iota\n",
"===================================================================\n",
@@ -3750,7 +3750,7 @@ def patch_deletes_prop(sbox):
None, # expected err
1, # check-props
1, # dry-run
- '--reverse-diff')
+ '--reverse-diff')
@Issue(4004)
def patch_reversed_add_with_props(sbox):
@@ -3799,7 +3799,7 @@ def patch_reversed_add_with_props(sbox):
None, # expected err
1, # check-props
1, # dry-run
- '--reverse-diff')
+ '--reverse-diff')
@Issue(4004)
def patch_reversed_add_with_props2(sbox):
@@ -3854,7 +3854,7 @@ def patch_reversed_add_with_props2(sbox)
None, # expected err
1, # check-props
1, # dry-run
- '--reverse-diff')
+ '--reverse-diff')
def patch_dev_null(sbox):
"patch with /dev/null filenames"
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/special_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/special_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/special_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/special_tests.py Wed Mar 14 19:40:19 2012
@@ -998,7 +998,7 @@ def replace_symlinks(sbox):
os.symlink('../iota', wc('A/mu.sh'))
sbox.simple_add('A/mu',
'A/mu.sh')
-
+
# Ditto, without the Subversion replacement. Failing git-svn test
# 'executable file becomes a symlink to bar/zzz (file)'.
os.remove(wc('Ax/mu'))
@@ -1009,7 +1009,7 @@ def replace_symlinks(sbox):
'Ax/mu',
'Ax/mu.sh')
sbox.simple_propdel('svn:executable', 'Ax/mu.sh')
-
+
### TODO Replace a normal {file, exec, dir, dir} with a symlink to
### {dir, dir, file, exec}. And the same symlink-to-normal.
@@ -1052,7 +1052,7 @@ def externals_as_symlink_targets(sbox):
sbox.simple_add('sym_ext_E')
sbox.simple_commit()
-
+
@XFail()
@Issue(4119)
@SkipUnless(svntest.main.is_posix_os)
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/stat_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/stat_tests.py Wed Mar 14 19:40:19 2012
@@ -936,7 +936,7 @@ def status_in_xml(sbox):
'cp', '-m', 'repo-to-repo copy',
sbox.repo_url + '/iota',
sbox.repo_url + '/iota2')
-
+
file_path = sbox.ospath('iota2')
expected_entries = {file_path : {'wcprops' : 'none',
@@ -1925,7 +1925,7 @@ def status_not_present(sbox):
svntest.main.run_svn(None, 'up', '--set-depth', 'exclude',
sbox.ospath('A/mu'), sbox.ospath('A/B'))
sbox.simple_commit()
-
+
svntest.actions.run_and_verify_svn(None, [], [],'status',
sbox.ospath('iota'),
sbox.ospath('A/B'),
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnadmin_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnadmin_tests.py Wed Mar 14 19:40:19 2012
@@ -111,10 +111,10 @@ def check_hotcopy_fsfs(src, dst):
# both at EOF
break
elif buf1:
- raise svntest.Failure("%s differs at offset %i" %
+ raise svntest.Failure("%s differs at offset %i" %
(dst_path, offset))
elif buf2:
- raise svntest.Failure("%s differs at offset %i" %
+ raise svntest.Failure("%s differs at offset %i" %
(dst_path, offset))
if len(buf1) != len(buf2):
raise svntest.Failure("%s differs in length" % dst_path)
@@ -1466,7 +1466,7 @@ def verify_non_utf8_paths(sbox):
def test_lslocks_and_rmlocks(sbox):
"test 'svnadmin lslocks' and 'svnadmin rmlocks'"
-
+
sbox.build(create_wc=False)
iota_url = sbox.repo_url + '/iota'
lambda_url = sbox.repo_url + '/A/B/lambda'
@@ -1480,7 +1480,7 @@ def test_lslocks_and_rmlocks(sbox):
expected_output = UnorderedOutput(
["'A/B/lambda' locked by user 'jrandom'.\n",
"'iota' locked by user 'jrandom'.\n"])
-
+
# Lock iota and A/B/lambda using svn client
svntest.actions.run_and_verify_svn(None, expected_output,
[], "lock", "-m", "Locking files",
@@ -1495,18 +1495,18 @@ def test_lslocks_and_rmlocks(sbox):
"Comment \(1 line\):",
"Locking files",
"Path: /iota",
- "UUID Token: opaquelocktoken.*",
- "\n", # empty line
+ "UUID Token: opaquelocktoken.*",
+ "\n", # empty line
]
# List all locks
exit_code, output, errput = svntest.main.run_svnadmin("lslocks",
sbox.repo_dir)
-
+
if errput:
raise SVNUnexpectedStderr(errput)
svntest.verify.verify_exit_code(None, exit_code, 0)
-
+
try:
expected_output = svntest.verify.UnorderedRegexOutput(expected_output_list)
svntest.verify.compare_and_display_lines('lslocks output mismatch',
@@ -1540,7 +1540,7 @@ def test_lslocks_and_rmlocks(sbox):
"Expires:",
"Comment \(1 line\):",
"Locking files",
- "\n", # empty line
+ "\n", # empty line
])
svntest.verify.compare_and_display_lines('message', 'label',
@@ -1554,7 +1554,7 @@ def test_lslocks_and_rmlocks(sbox):
"A/B/lambda")
expected_output = UnorderedOutput(["Removed lock on '/iota'.\n",
"Removed lock on '/A/B/lambda'.\n"])
-
+
svntest.verify.verify_outputs(
"Unexpected output while running 'svnadmin rmlocks'.",
output, [], expected_output, None)
@@ -1652,7 +1652,7 @@ def hotcopy_incremental_packed(sbox):
def locking(sbox):
"svnadmin lock tests"
sbox.build(create_wc=False)
-
+
comment_path = os.path.join(svntest.main.temp_dir, "comment")
svntest.main.file_write(comment_path, "dummy comment")
@@ -1662,15 +1662,15 @@ def locking(sbox):
# Test illegal character in comment file.
expected_error = ".*svnadmin: E130004:.*"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "lock",
+ expected_error, "lock",
sbox.repo_dir,
"iota", "jrandom",
invalid_comment_path)
-
+
# Test locking path with --bypass-hooks
expected_output = "'iota' locked by user 'jrandom'."
svntest.actions.run_and_verify_svnadmin(None, expected_output,
- None, "lock",
+ None, "lock",
sbox.repo_dir,
"iota", "jrandom",
comment_path,
@@ -1678,13 +1678,13 @@ def locking(sbox):
# Remove lock
svntest.actions.run_and_verify_svnadmin(None, None,
- None, "rmlocks",
+ None, "rmlocks",
sbox.repo_dir, "iota")
-
+
# Test locking path without --bypass-hooks
expected_output = "'iota' locked by user 'jrandom'."
svntest.actions.run_and_verify_svnadmin(None, expected_output,
- None, "lock",
+ None, "lock",
sbox.repo_dir,
"iota", "jrandom",
comment_path)
@@ -1692,7 +1692,7 @@ def locking(sbox):
# Test locking already locked path.
expected_error = ".*svnadmin: E160035:.*"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "lock",
+ expected_error, "lock",
sbox.repo_dir,
"iota", "jrandom",
comment_path)
@@ -1700,7 +1700,7 @@ def locking(sbox):
# Test locking non-existent path.
expected_error = ".*svnadmin: E160013:.*"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "lock",
+ expected_error, "lock",
sbox.repo_dir,
"non-existent", "jrandom",
comment_path)
@@ -1709,7 +1709,7 @@ def locking(sbox):
expected_output = "'A/D/G/rho' locked by user 'jrandom'."
lock_token = "opaquelocktoken:01234567-89ab-cdef-89ab-cdef01234567"
svntest.actions.run_and_verify_svnadmin(None, expected_output,
- None, "lock",
+ None, "lock",
sbox.repo_dir,
"A/D/G/rho", "jrandom",
comment_path, lock_token)
@@ -1718,11 +1718,11 @@ def locking(sbox):
expected_error = ".*svnadmin: E160040:.*"
wrong_lock_token = "opaquelocktoken:12345670-9ab8-defc-9ab8-def01234567c"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "unlock",
+ expected_error, "unlock",
sbox.repo_dir,
"A/D/G/rho", "jrandom",
wrong_lock_token)
-
+
# Test unlocking the path again, but this time provide the correct
# lock token.
expected_output = "'A/D/G/rho' unlocked."
@@ -1737,12 +1737,12 @@ def locking(sbox):
svntest.main.create_python_hook_script(hook_path, 'import sys; sys.exit(1)')
hook_path = svntest.main.get_pre_unlock_hook_path(sbox.repo_dir)
svntest.main.create_python_hook_script(hook_path, 'import sys; sys.exit(1)')
-
+
# Test locking a path. Don't use --bypass-hooks, though, as we wish
# to verify that hook script is really getting executed.
expected_error = ".*svnadmin: E165001:.*"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "lock",
+ expected_error, "lock",
sbox.repo_dir,
"iota", "jrandom",
comment_path)
@@ -1764,7 +1764,7 @@ def locking(sbox):
# with a preventative hook in place.
expected_error = ".*svnadmin: E165001:.*"
svntest.actions.run_and_verify_svnadmin(None, None,
- expected_error, "unlock",
+ expected_error, "unlock",
sbox.repo_dir,
"iota", "jrandom",
iota_token)
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svndumpfilter_tests.py Wed Mar 14 19:40:19 2012
@@ -164,6 +164,9 @@ def svndumpfilter_loses_mergeinfo(sbox):
def _simple_dumpfilter_test(sbox, dumpfile, *dumpargs):
+ """Run svndumpfilter with arguments DUMPARGS, taking input from DUMPFILE.
+ Check that the output consists of the standard Greek tree excluding
+ all paths that start with 'A/B/E', 'A/D/G' or 'A/D/H'."""
wc_dir = sbox.wc_dir
filtered_output, filtered_err = filter_and_return_output(dumpfile, 0,
@@ -596,6 +599,58 @@ def dropped_but_not_renumbered_empty_rev
'propget', 'svn:mergeinfo', '-R',
sbox.repo_url)
+#----------------------------------------------------------------------
+def match_empty_prefix(sbox):
+ "svndumpfilter with an empty prefix"
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'greek_tree.dump')
+ dumpfile = open(dumpfile_location).read()
+
+ def test(sbox, dumpfile, *dumpargs):
+ """Run svndumpfilter with DUMPFILE as the input lines, load
+ the result and check it matches EXPECTED_DISK, EXPECTED_OUTPUT,
+ EXPECTED_STATUS."""
+
+ # Filter the Greek tree dump
+ filtered_output, filtered_err = filter_and_return_output(dumpfile, 0,
+ '--quiet',
+ *dumpargs)
+ if filtered_err:
+ raise verify.UnexpectedStderr(filtered_err)
+
+ # Load the filtered dump into a repo and check the result
+ test_create(sbox)
+ load_and_verify_dumpstream(sbox, [], [], None, filtered_output,
+ '--ignore-uuid')
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status)
+
+ # Test excluding everything
+ expected_disk = svntest.wc.State(sbox.wc_dir, {})
+ expected_output = svntest.wc.State(sbox.wc_dir, {})
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '': Item(status=' ', wc_rev=1) })
+
+ test(sbox, dumpfile, 'exclude', '')
+
+ # Test including everything
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.main.greek_state.copy().tweak(status='A ')
+ expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 1)
+
+ test(sbox, dumpfile, 'include', '', '/A/D/G')
+
+ # Note: We also ought to test the '--pattern' option, including or
+ # excluding a pattern of '*'. However, passing a wildcard parameter
+ # is troublesome on Windows: it may be expanded, depending on whether
+ # the svndumpfilter executable was linked with 'setargv.obj', and there
+ # doesn't seem to be a consistent way to quote such an argument to
+ # prevent expansion.
+
########################################################################
# Run the tests
@@ -608,6 +663,7 @@ test_list = [ None,
dumpfilter_with_patterns,
filter_mergeinfo_revs_outside_of_dump_stream,
dropped_but_not_renumbered_empty_revs,
+ match_empty_prefix,
]
if __name__ == '__main__':
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnrdump_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnrdump_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnrdump_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnrdump_tests.py Wed Mar 14 19:40:19 2012
@@ -142,7 +142,7 @@ def run_dump_test(sbox, dumpfile_name, e
svntest.verify.compare_and_display_lines(
"Dump files", "DUMP", svnadmin_dumpfile, svnrdump_dumpfile,
None, mismatched_headers_re)
-
+
else:
compare_repos_dumps(sbox, svnadmin_dumpfile)
Modified: subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnsync_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnsync_tests.py?rev=1300696&r1=1300695&r2=1300696&view=diff
==============================================================================
--- subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnsync_tests.py (original)
+++ subversion/branches/fix-rdump-editor/subversion/tests/cmdline/svnsync_tests.py Wed Mar 14 19:40:19 2012
@@ -28,7 +28,7 @@
import sys, os
# Test suite-specific modules
-import locale, re
+import locale, re, urllib
# Our testing module
import svntest
@@ -191,14 +191,16 @@ def setup_and_sync(sbox, dump_file_conte
repo_url = sbox.repo_url
cwd = os.getcwd()
if is_src_ra_local:
- repo_url = svntest.main.file_scheme_prefix + svntest.main.pathname2url(os.path.join(cwd, sbox.repo_dir))
+ repo_url = svntest.main.file_scheme_prefix + \
+ urllib.pathname2url(os.path.join(cwd, sbox.repo_dir))
if subdir:
repo_url = repo_url + subdir
dest_repo_url = dest_sbox.repo_url
if is_dest_ra_local:
- dest_repo_url = svntest.main.file_scheme_prefix + svntest.main.pathname2url(os.path.join(cwd, dest_sbox.repo_dir))
+ dest_repo_url = svntest.main.file_scheme_prefix + \
+ urllib.pathname2url(os.path.join(cwd, dest_sbox.repo_dir))
run_init(dest_repo_url, repo_url, source_prop_encoding)
run_sync(dest_repo_url, repo_url,
@@ -251,7 +253,7 @@ or another dump file."""
# file.
if exp_dump_file_name:
build_repos(sbox)
- svntest.actions.run_and_verify_load(sbox.repo_dir,
+ svntest.actions.run_and_verify_load(sbox.repo_dir,
open(os.path.join(svnsync_tests_dir,
exp_dump_file_name),
'rb').readlines())
@@ -399,7 +401,7 @@ def basic_authz(sbox):
run_init(dest_sbox.repo_url, sbox.repo_url)
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
svntest.main.file_write(sbox.authz_file,
"[%s:/]\n"
"* = r\n"
@@ -408,7 +410,7 @@ def basic_authz(sbox):
"* = \n"
"\n"
"[%s:/]\n"
- "* = rw\n" % tuple(args))
+ "* = rw\n" % args)
run_sync(dest_sbox.repo_url)
@@ -477,7 +479,7 @@ def copy_from_unreadable_dir(sbox):
svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
open(sbox.authz_file, 'w').write(
"[%s:/]\n"
"* = r\n"
@@ -487,7 +489,7 @@ def copy_from_unreadable_dir(sbox):
"\n"
"[%s:/]\n"
"* = rw"
- % tuple(args))
+ % args)
run_init(dest_sbox.repo_url, sbox.repo_url)
@@ -591,7 +593,7 @@ def copy_with_mod_from_unreadable_dir(sb
svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
open(sbox.authz_file, 'w').write(
"[%s:/]\n"
"* = r\n"
@@ -601,7 +603,7 @@ def copy_with_mod_from_unreadable_dir(sb
"\n"
"[%s:/]\n"
"* = rw"
- % tuple(args))
+ % args)
run_init(dest_sbox.repo_url, sbox.repo_url)
@@ -683,7 +685,7 @@ def copy_with_mod_from_unreadable_dir_an
svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
- args = map(lambda x: x.authz_name(), [sbox, sbox, dest_sbox])
+ args = tuple(s.authz_name() for s in [sbox, sbox, dest_sbox])
open(sbox.authz_file, 'w').write(
"[%s:/]\n"
"* = r\n"
@@ -693,7 +695,7 @@ def copy_with_mod_from_unreadable_dir_an
"\n"
"[%s:/]\n"
"* = rw"
- % tuple(args))
+ % args)
run_init(dest_sbox.repo_url, sbox.repo_url)
@@ -1005,37 +1007,36 @@ def fd_leak_sync_from_serf_to_local(sbox
def copy_delete_unreadable_child(sbox):
"copy, then rm at-src-unreadable child"
- ## Prepare the source: Greek tree (r1), cp+rm (r2).
+ # Prepare the source: Greek tree (r1), cp+rm (r2).
sbox.build("copy-delete-unreadable-child")
- svntest.actions.run_and_verify_svnmucc(None, None, [],
+ svntest.actions.run_and_verify_svnmucc(None, None, [],
'-m', 'r2',
'-U', sbox.repo_url,
'cp', 'HEAD', '/', 'branch',
'rm', 'branch/A')
- ## Create the destination.
+ # Create the destination.
dest_sbox = sbox.clone_dependent()
build_repos(dest_sbox)
svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
- ## Lock down the source.
- args = map(lambda x: x.authz_name(), [sbox, sbox])
+ # Lock down the source.
+ authz = sbox.authz_name()
write_restrictive_svnserve_conf(sbox.repo_dir, anon_access='read')
svntest.main.file_write(sbox.authz_file,
"[%s:/]\n"
"* = r\n"
"[%s:/A]\n"
"* = \n"
- % tuple(args)
- )
+ % (authz, authz))
dest_url = svntest.main.file_scheme_prefix \
- + svntest.main.pathname2url(os.path.abspath(dest_sbox.repo_dir))
+ + urllib.pathname2url(os.path.abspath(dest_sbox.repo_dir))
run_init(dest_url, sbox.repo_url)
run_sync(dest_url)
# sanity check
- svntest.actions.run_and_verify_svn(None,
+ svntest.actions.run_and_verify_svn(None,
["iota\n"], [],
'ls', dest_url+'/branch@2')