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 2010/08/10 20:06:33 UTC
svn commit: r984153 [32/39] - in /subversion/branches/ignore-mergeinfo: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
build/hudson/ build/hudson/jobs/subversion-1.6.x-solaris/
build/hudson/jobs/subversion-1.6.x-ubuntu/ build/hu...
Modified: subversion/branches/ignore-mergeinfo/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnserve/serve.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnserve/serve.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnserve/serve.c Tue Aug 10 18:06:17 2010
@@ -226,7 +226,7 @@ svn_error_t *load_configs(svn_config_t *
*pwdb = NULL;
if (pwdb_path)
{
- pwdb_path = svn_path_join(base, pwdb_path, pool);
+ pwdb_path = svn_dirent_join(base, pwdb_path, pool);
err = svn_config_read(pwdb, pwdb_path, TRUE, pool);
if (err)
@@ -271,7 +271,7 @@ svn_error_t *load_configs(svn_config_t *
SVN_CONFIG_OPTION_AUTHZ_DB, NULL);
if (authzdb_path)
{
- authzdb_path = svn_path_join(base, authzdb_path, pool);
+ authzdb_path = svn_dirent_join(base, authzdb_path, pool);
err = svn_repos_authz_read(authzdb, authzdb_path, TRUE, pool);
if (err)
{
@@ -352,7 +352,7 @@ static svn_error_t *authz_check_access(s
routines throws them into an infinite loop and makes them miss
ACLs. */
if (path && *path != '/')
- path = svn_path_join("/", path, pool);
+ path = svn_uri_join("/", path, pool);
return svn_repos_authz_check_access(b->authzdb, b->authz_repos_name,
path, b->user, required,
@@ -707,7 +707,7 @@ static svn_error_t *set_path(svn_ra_svn_
&depth_word));
if (depth_word)
depth = svn_depth_from_word(depth_word);
- path = svn_path_canonicalize(path, pool);
+ path = svn_uri_canonicalize(path, pool);
if (b->from_rev && strcmp(path, "") == 0)
*b->from_rev = rev;
if (!b->err)
@@ -726,7 +726,7 @@ static svn_error_t *delete_path(svn_ra_s
const char *path;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
- path = svn_path_canonicalize(path, pool);
+ path = svn_uri_canonicalize(path, pool);
if (!b->err)
b->err = svn_repos_delete_path(b->report_baton, path, pool);
return SVN_NO_ERROR;
@@ -745,8 +745,8 @@ static svn_error_t *link_path(svn_ra_svn
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccrb?(?c)?w",
&path, &url, &rev, &start_empty,
&lock_token, &depth_word));
- path = svn_path_canonicalize(path, pool);
- url = svn_path_uri_decode(svn_path_canonicalize(url, pool), pool);
+ path = svn_uri_canonicalize(path, pool);
+ url = svn_path_uri_decode(svn_uri_canonicalize(url, pool), pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
if (!b->err)
@@ -772,7 +772,7 @@ static svn_error_t *finish_report(svn_ra
}
static svn_error_t *abort_report(svn_ra_svn_conn_t *conn, apr_pool_t *pool,
- apr_array_header_t *params, void *baton)
+ apr_array_header_t *params, void *baton)
{
report_driver_baton_t *b = baton;
@@ -864,7 +864,7 @@ static svn_error_t *accept_report(svn_bo
* values. */
static svn_error_t *write_prop_diffs(svn_ra_svn_conn_t *conn,
apr_pool_t *pool,
- apr_array_header_t *propdiffs)
+ const apr_array_header_t *propdiffs)
{
int i;
@@ -937,7 +937,7 @@ static svn_error_t *reparent(svn_ra_svn_
const char *fs_path;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &url));
- url = svn_path_uri_decode(svn_path_canonicalize(url, pool), pool);
+ url = svn_path_uri_decode(svn_uri_canonicalize(url, pool), pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_CMD_ERR(get_fs_path(svn_path_uri_decode(b->repos_url, pool),
url, &fs_path));
@@ -1065,7 +1065,7 @@ static svn_error_t *commit_done(const sv
* to the client. Use POOL for temporary allocations only.
*/
static svn_error_t *add_lock_tokens(svn_ra_svn_conn_t *conn,
- apr_array_header_t *lock_tokens,
+ const apr_array_header_t *lock_tokens,
server_baton_t *sb,
apr_pool_t *pool)
{
@@ -1099,9 +1099,9 @@ static svn_error_t *add_lock_tokens(svn_
"Lock token isn't a string");
path = path_item->u.string->data;
- full_path = svn_path_join(sb->fs_path->data,
- svn_path_canonicalize(path, pool),
- pool);
+ full_path = svn_uri_join(sb->fs_path->data,
+ svn_uri_canonicalize(path, pool),
+ pool);
if (! lookup_access(pool, sb, conn, svn_authz_write,
full_path, TRUE))
@@ -1117,7 +1117,7 @@ static svn_error_t *add_lock_tokens(svn_
/* Unlock the paths with lock tokens in LOCK_TOKENS, ignoring any errors.
LOCK_TOKENS contains svn_ra_svn_item_t elements, assumed to be lists. */
-static svn_error_t *unlock_paths(apr_array_header_t *lock_tokens,
+static svn_error_t *unlock_paths(const apr_array_header_t *lock_tokens,
server_baton_t *sb,
svn_ra_svn_conn_t *conn,
apr_pool_t *pool)
@@ -1141,9 +1141,9 @@ static svn_error_t *unlock_paths(apr_arr
path = path_item->u.string->data;
token = token_item->u.string->data;
- full_path = svn_path_join(sb->fs_path->data,
- svn_path_canonicalize(path, iterpool),
- iterpool);
+ full_path = svn_uri_join(sb->fs_path->data,
+ svn_uri_canonicalize(path, iterpool),
+ iterpool);
/* The lock may have become defunct after the commit, so ignore such
errors. */
@@ -1282,8 +1282,8 @@ static svn_error_t *get_file(svn_ra_svn_
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)bb", &path, &rev,
&want_props, &want_contents));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -1398,8 +1398,8 @@ static svn_error_t *get_dir(svn_ra_svn_c
}
}
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -1430,13 +1430,13 @@ static svn_error_t *get_dir(svn_ra_svn_c
subpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
{
- const char *name = svn_apr_hash_index_key(hi);
- svn_fs_dirent_t *fsent = svn_apr_hash_index_val(hi);
+ 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_pool_clear(subpool);
- file_path = svn_path_join(full_path, name, subpool);
+ file_path = svn_uri_join(full_path, name, subpool);
entry = apr_pcalloc(pool, sizeof(*entry));
if (dirent_fields & SVN_DIRENT_KIND)
@@ -1495,8 +1495,8 @@ static svn_error_t *get_dir(svn_ra_svn_c
{
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);
+ 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);
@@ -1528,7 +1528,7 @@ static svn_error_t *update(svn_ra_svn_co
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cb?wB", &rev, &target,
&recurse, &depth_word, &send_copyfrom_param));
- target = svn_path_canonicalize(target, pool);
+ target = svn_uri_canonicalize(target, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1538,7 +1538,7 @@ static svn_error_t *update(svn_ra_svn_co
send_copyfrom_args = (send_copyfrom_param == SVN_RA_SVN_UNSPECIFIED_NUMBER) ?
FALSE : (svn_boolean_t) send_copyfrom_param;
- full_path = svn_path_join(b->fs_path->data, target, pool);
+ full_path = svn_uri_join(b->fs_path->data, target, pool);
/* Check authorization and authenticate the user if necessary. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read, full_path, FALSE));
@@ -1579,8 +1579,8 @@ static svn_error_t *switch_cmd(svn_ra_sv
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)cbc?w", &rev, &target,
&recurse, &switch_url, &depth_word));
- target = svn_path_canonicalize(target, pool);
- switch_url = svn_path_canonicalize(switch_url, pool);
+ target = svn_uri_canonicalize(target, pool);
+ switch_url = svn_uri_canonicalize(switch_url, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1596,7 +1596,7 @@ static svn_error_t *switch_cmd(svn_ra_sv
&switch_path));
{
- const char *full_path = svn_path_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__switch(full_path, switch_path, rev,
depth, pool)));
@@ -1623,7 +1623,7 @@ static svn_error_t *status(svn_ra_svn_co
/* Parse the arguments. */
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cb?(?r)?w",
&target, &recurse, &rev, &depth_word));
- target = svn_path_canonicalize(target, pool);
+ target = svn_uri_canonicalize(target, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1635,7 +1635,7 @@ static svn_error_t *status(svn_ra_svn_co
SVN_CMD_ERR(svn_fs_youngest_rev(&rev, b->fs, pool));
{
- const char *full_path = svn_path_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
SVN_ERR(log_command(b, conn, pool, "%s",
svn_log__status(full_path, rev, depth, pool)));
}
@@ -1672,8 +1672,8 @@ static svn_error_t *diff(svn_ra_svn_conn
&ignore_ancestry, &versus_url,
&text_deltas, &depth_word));
}
- target = svn_path_canonicalize(target, pool);
- versus_url = svn_path_canonicalize(versus_url, pool);
+ target = svn_uri_canonicalize(target, pool);
+ versus_url = svn_uri_canonicalize(versus_url, pool);
if (depth_word)
depth = svn_depth_from_word(depth_word);
@@ -1689,7 +1689,7 @@ static svn_error_t *diff(svn_ra_svn_conn
&versus_path));
{
- const char *full_path = svn_path_join(b->fs_path->data, target, pool);
+ const char *full_path = svn_uri_join(b->fs_path->data, target, pool);
svn_revnum_t from_rev;
SVN_ERR(accept_report(NULL, &from_rev,
conn, pool, b, rev, target, versus_path,
@@ -1736,10 +1736,10 @@ static svn_error_t *get_mergeinfo(svn_ra
if (item->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Path is not a string"));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(item->u.string->data,
- pool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(item->u.string->data,
+ pool),
+ pool);
APR_ARRAY_PUSH(canonical_paths, const char *) = full_path;
}
@@ -1761,8 +1761,8 @@ static svn_error_t *get_mergeinfo(svn_ra
iterpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, mergeinfo); hi; hi = apr_hash_next(hi))
{
- const char *key = svn_apr_hash_index_key(hi);
- svn_mergeinfo_t value = svn_apr_hash_index_val(hi);
+ const char *key = svn__apr_hash_index_key(hi);
+ svn_mergeinfo_t value = svn__apr_hash_index_val(hi);
svn_string_t *mergeinfo_string;
svn_pool_clear(iterpool);
@@ -1810,8 +1810,8 @@ static svn_error_t *log_receiver(void *b
for (h = apr_hash_first(pool, log_entry->changed_paths2); h;
h = apr_hash_next(h))
{
- const char *path = svn_apr_hash_index_key(h);
- svn_log_changed_path2_t *change = svn_apr_hash_index_val(h);
+ const char *path = svn__apr_hash_index_key(h);
+ svn_log_changed_path2_t *change = svn__apr_hash_index_val(h);
action[0] = change->action;
action[1] = '\0';
@@ -1913,10 +1913,10 @@ static svn_error_t *log_cmd(svn_ra_svn_c
if (elt->kind != SVN_RA_SVN_STRING)
return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
_("Log path entry not a string"));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(elt->u.string->data,
- pool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(elt->u.string->data,
+ pool),
+ pool);
APR_ARRAY_PUSH(full_paths, const char *) = full_path;
}
SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -1958,8 +1958,8 @@ static svn_error_t *check_path(svn_ra_sv
svn_node_kind_t kind;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -1988,8 +1988,8 @@ static svn_error_t *stat_cmd(svn_ra_svn_
svn_dirent_t *dirent;
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)", &path, &rev));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
/* Check authorizations */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
@@ -2043,9 +2043,9 @@ static svn_error_t *get_locations(svn_ra
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crl", &relative_path,
&peg_revision,
&loc_revs_proto));
- relative_path = svn_path_canonicalize(relative_path, pool);
+ relative_path = svn_uri_canonicalize(relative_path, pool);
- abs_path = svn_path_join(b->fs_path->data, relative_path, pool);
+ abs_path = svn_uri_join(b->fs_path->data, relative_path, pool);
location_revisions = apr_array_make(pool, loc_revs_proto->nelts,
sizeof(svn_revnum_t));
@@ -2084,8 +2084,8 @@ static svn_error_t *get_locations(svn_ra
for (iter = apr_hash_first(pool, fs_locations); iter;
iter = apr_hash_next(iter))
{
- const svn_revnum_t *iter_key = svn_apr_hash_index_key(iter);
- const char *iter_value = svn_apr_hash_index_val(iter);
+ const svn_revnum_t *iter_key = svn__apr_hash_index_key(iter);
+ const char *iter_value = svn__apr_hash_index_val(iter);
SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "rc",
*iter_key, iter_value));
@@ -2132,9 +2132,9 @@ static svn_error_t *get_location_segment
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)(?r)",
&relative_path, &peg_revision,
&start_rev, &end_rev));
- relative_path = svn_path_canonicalize(relative_path, pool);
+ relative_path = svn_uri_canonicalize(relative_path, pool);
- abs_path = svn_path_join(b->fs_path->data, relative_path, pool);
+ abs_path = svn_uri_join(b->fs_path->data, relative_path, pool);
if (SVN_IS_VALID_REVNUM(start_rev)
&& SVN_IS_VALID_REVNUM(end_rev)
@@ -2259,9 +2259,9 @@ static svn_error_t *get_file_revs(svn_ra
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)(?r)?B",
&path, &start_rev, &end_rev,
&include_merged_revs_param));
- path = svn_path_canonicalize(path, pool);
+ path = svn_uri_canonicalize(path, pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
- full_path = svn_path_join(b->fs_path->data, path, pool);
+ full_path = svn_uri_join(b->fs_path->data, path, pool);
if (include_merged_revs_param == SVN_RA_SVN_UNSPECIFIED_NUMBER)
include_merged_revisions = FALSE;
@@ -2305,8 +2305,8 @@ static svn_error_t *lock(svn_ra_svn_conn
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b(?r)", &path, &comment,
&steal_lock, ¤t_rev));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write,
full_path, TRUE));
@@ -2369,9 +2369,9 @@ static svn_error_t *lock_many(svn_ra_svn
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, subpool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, subpool),
+ pool);
APR_ARRAY_PUSH(log_paths, const char *) = full_path;
if (! lookup_access(pool, b, conn, svn_authz_write, full_path, TRUE))
@@ -2433,8 +2433,8 @@ static svn_error_t *unlock(svn_ra_svn_co
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)b", &path, &token,
&break_lock));
- full_path = svn_path_join(b->fs_path->data, svn_path_canonicalize(path, pool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data, svn_uri_canonicalize(path, pool),
+ pool);
/* Username required unless break_lock was specified. */
SVN_ERR(must_have_access(conn, pool, b, svn_authz_write,
@@ -2490,9 +2490,9 @@ static svn_error_t *unlock_many(svn_ra_s
/* Allocate the full_path out of pool so it will survive for use
* by operational logging, after this loop. */
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, subpool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, subpool),
+ pool);
APR_ARRAY_PUSH(log_paths, const char *) = full_path;
if (! lookup_access(subpool, b, conn, svn_authz_write, full_path,
@@ -2547,9 +2547,9 @@ static svn_error_t *get_lock(svn_ra_svn_
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
- full_path = svn_path_join(b->fs_path->data, svn_path_canonicalize(path,
- pool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data, svn_uri_canonicalize(path,
+ pool),
+ pool);
SVN_ERR(must_have_access(conn, pool, b, svn_authz_read,
full_path, FALSE));
@@ -2577,9 +2577,9 @@ static svn_error_t *get_locks(svn_ra_svn
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &path));
- full_path = svn_path_join(b->fs_path->data, svn_path_canonicalize(path,
- pool),
- pool);
+ full_path = svn_uri_join(b->fs_path->data, svn_uri_canonicalize(path,
+ pool),
+ pool);
SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -2591,7 +2591,7 @@ static svn_error_t *get_locks(svn_ra_svn
SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "success"));
for (hi = apr_hash_first(pool, locks); hi; hi = apr_hash_next(hi))
{
- svn_lock_t *l = svn_apr_hash_index_val(hi);
+ svn_lock_t *l = svn__apr_hash_index_val(hi);
SVN_ERR(write_lock(conn, pool, l));
}
@@ -2706,8 +2706,8 @@ get_deleted_rev(svn_ra_svn_conn_t *conn,
SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "crr",
&path, &peg_revision, &end_revision));
- full_path = svn_path_join(b->fs_path->data,
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(b->fs_path->data,
+ svn_uri_canonicalize(path, pool), pool);
SVN_ERR(log_command(b, conn, pool, "get-deleted-rev"));
SVN_ERR(trivial_auth_request(conn, pool, b));
SVN_ERR(svn_repos_deleted_rev(b->fs, full_path, peg_revision, end_revision,
@@ -2810,7 +2810,7 @@ repos_path_valid(const char *path)
static svn_error_t *find_repos(const char *url, const char *root,
server_baton_t *b,
svn_ra_svn_conn_t *conn,
- apr_array_header_t *capabilities,
+ const apr_array_header_t *capabilities,
apr_pool_t *pool)
{
const char *path, *full_path, *repos_root, *fs_path;
@@ -2836,8 +2836,8 @@ static svn_error_t *find_repos(const cha
"Couldn't determine repository path");
/* Join the server-configured root with the client path. */
- full_path = svn_path_join(svn_path_canonicalize(root, pool),
- svn_path_canonicalize(path, pool), pool);
+ full_path = svn_uri_join(svn_uri_canonicalize(root, pool),
+ svn_uri_canonicalize(path, pool), pool);
/* Search for a repository in the full path. */
repos_root = svn_repos_find_root_path(full_path, pool);
@@ -2855,7 +2855,7 @@ static svn_error_t *find_repos(const cha
svn_path_remove_components(url_buf,
svn_path_component_count(b->fs_path->data));
b->repos_url = url_buf->data;
- b->authz_repos_name = svn_path_is_child(root, repos_root, pool);
+ b->authz_repos_name = svn_uri_is_child(root, repos_root, pool);
if (b->authz_repos_name == NULL)
b->repos_name = svn_uri_basename(repos_root, pool);
else
@@ -2964,7 +2964,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
if (ver != 2)
return SVN_NO_ERROR;
- client_url = svn_path_canonicalize(client_url, pool);
+ client_url = svn_uri_canonicalize(client_url, pool);
SVN_ERR(svn_ra_svn_set_capabilities(conn, caplist));
/* All released versions of Subversion support edit-pipeline,
Modified: subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnsync/main.c Tue Aug 10 18:06:17 2010
@@ -61,6 +61,7 @@ enum svnsync__opt {
svnsync_opt_sync_password,
svnsync_opt_config_dir,
svnsync_opt_config_options,
+ svnsync_opt_disable_locking,
svnsync_opt_version,
svnsync_opt_trust_server_cert,
svnsync_opt_allow_non_empty,
@@ -103,13 +104,14 @@ static const svn_opt_subcommand_desc2_t
"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"),
- { SVNSYNC_OPTS_DEFAULT, 'q', svnsync_opt_allow_non_empty } },
+ { SVNSYNC_OPTS_DEFAULT, 'q', svnsync_opt_allow_non_empty,
+ svnsync_opt_disable_locking } },
{ "synchronize", synchronize_cmd, { "sync" },
N_("usage: svnsync synchronize DEST_URL\n"
"\n"
"Transfer all pending revisions to the destination from the source\n"
"with which it was initialized.\n"),
- { SVNSYNC_OPTS_DEFAULT, 'q' } },
+ { SVNSYNC_OPTS_DEFAULT, 'q', svnsync_opt_disable_locking } },
{ "copy-revprops", copy_revprops_cmd, { 0 },
N_("usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
"\n"
@@ -125,7 +127,7 @@ static const svn_opt_subcommand_desc2_t
"REV and REV2 must be revisions which were previously transferred\n"
"to the destination. You may use \"HEAD\" for either revision to\n"
"mean \"the last revision transferred\".\n"),
- { SVNSYNC_OPTS_DEFAULT, 'q' } },
+ { SVNSYNC_OPTS_DEFAULT, 'q', svnsync_opt_disable_locking } },
{ "info", info_cmd, { 0 },
N_("usage: svnsync info DEST_URL\n"
"\n"
@@ -180,6 +182,12 @@ static const apr_getopt_option_t svnsync
"For example:\n"
" "
" servers:global:http-library=serf")},
+ {"disable-locking", svnsync_opt_disable_locking, 0,
+ N_("Disable built-in locking. Use of this option can\n"
+ " "
+ "corrupt the mirror unless you ensure that no other\n"
+ " "
+ "instance of svnsync is running concurrently.")},
{"version", svnsync_opt_version, 0,
N_("show program version information")},
{"help", 'h', 0,
@@ -201,6 +209,7 @@ typedef struct {
const char *sync_password;
const char *config_dir;
apr_hash_t *config;
+ svn_boolean_t disable_locking;
svn_boolean_t quiet;
svn_boolean_t allow_non_empty;
svn_boolean_t version;
@@ -428,7 +437,7 @@ remove_props_not_in_source(svn_ra_sessio
hi;
hi = apr_hash_next(hi))
{
- const char *propname = svn_apr_hash_index_key(hi);
+ const char *propname = svn__apr_hash_index_key(hi);
svn_pool_clear(subpool);
@@ -468,8 +477,8 @@ filter_props(int *filtered_count, apr_ha
for (hi = apr_hash_first(pool, props); hi ; hi = apr_hash_next(hi))
{
- const char *propname = svn_apr_hash_index_key(hi);
- void *propval = svn_apr_hash_index_val(hi);
+ const char *propname = svn__apr_hash_index_key(hi);
+ void *propval = svn__apr_hash_index_val(hi);
/* Copy all properties:
- not matching the exclude pattern if provided OR
@@ -510,8 +519,8 @@ write_revprops(int *filtered_count,
for (hi = apr_hash_first(pool, rev_props); hi; hi = apr_hash_next(hi))
{
- const char *propname = svn_apr_hash_index_key(hi);
- const svn_string_t *propval = svn_apr_hash_index_val(hi);
+ const char *propname = svn__apr_hash_index_key(hi);
+ const svn_string_t *propval = svn__apr_hash_index_val(hi);
svn_pool_clear(subpool);
@@ -798,7 +807,10 @@ initialize_cmd(apr_getopt_t *os, void *b
SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL,
&(baton->sync_callbacks), baton, baton->config, pool));
SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool));
- SVN_ERR(with_locked(to_session, do_initialize, baton, pool));
+ if (opt_baton->disable_locking)
+ SVN_ERR(do_initialize(to_session, baton, pool));
+ else
+ SVN_ERR(with_locked(to_session, do_initialize, baton, pool));
return SVN_NO_ERROR;
}
@@ -1276,7 +1288,10 @@ synchronize_cmd(apr_getopt_t *os, void *
SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL,
&(baton->sync_callbacks), baton, baton->config, pool));
SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool));
- SVN_ERR(with_locked(to_session, do_synchronize, baton, pool));
+ if (opt_baton->disable_locking)
+ SVN_ERR(do_synchronize(to_session, baton, pool));
+ else
+ SVN_ERR(with_locked(to_session, do_synchronize, baton, pool));
return SVN_NO_ERROR;
}
@@ -1433,7 +1448,10 @@ copy_revprops_cmd(apr_getopt_t *os, void
SVN_ERR(svn_ra_open3(&to_session, baton->to_url, NULL,
&(baton->sync_callbacks), baton, baton->config, pool));
SVN_ERR(check_if_session_is_at_repos_root(to_session, baton->to_url, pool));
- SVN_ERR(with_locked(to_session, do_copy_revprops, baton, pool));
+ if (opt_baton->disable_locking)
+ SVN_ERR(do_copy_revprops(to_session, baton, pool));
+ else
+ SVN_ERR(with_locked(to_session, do_copy_revprops, baton, pool));
return SVN_NO_ERROR;
}
@@ -1664,6 +1682,11 @@ main(int argc, const char *argv[])
if (err)
return svn_cmdline_handle_exit_error(err, pool, "svnsync: ");
break;
+
+ case svnsync_opt_disable_locking:
+ opt_baton.disable_locking = TRUE;
+ break;
+
case svnsync_opt_version:
opt_baton.version = TRUE;
break;
Modified: subversion/branches/ignore-mergeinfo/subversion/svnsync/svnsync.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnsync/svnsync.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnsync/svnsync.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnsync/svnsync.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it
to permit extracting previous versions of those files at any time.
For more information about the Subversion project, visit
-http://subversion.tigris.org.
+http://subversion.apache.org.
Documentation for Subversion and its tools, including detailed usage
explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and
Modified: subversion/branches/ignore-mergeinfo/subversion/svnsync/sync.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnsync/sync.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnsync/sync.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnsync/sync.c Tue Aug 10 18:06:17 2010
@@ -100,8 +100,8 @@ svnsync_normalize_revprops(apr_hash_t *r
hi;
hi = apr_hash_next(hi))
{
- const char *propname = svn_apr_hash_index_key(hi);
- const svn_string_t *propval = svn_apr_hash_index_val(hi);
+ const char *propname = svn__apr_hash_index_key(hi);
+ const svn_string_t *propval = svn__apr_hash_index_val(hi);
if (svn_prop_needs_translation(propname))
{
Modified: subversion/branches/ignore-mergeinfo/subversion/svnversion/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnversion/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnversion/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnversion/main.c Tue Aug 10 18:06:17 2010
@@ -253,18 +253,25 @@ main(int argc, const char *argv[])
return EXIT_SUCCESS;
}
- SVN_INT_ERR(svn_wc_revision_status2(&res, wc_ctx, local_abspath,
- trail_url, committed, NULL, NULL,
- pool, pool));
+ err = svn_wc_revision_status2(&res, wc_ctx, local_abspath,
+ trail_url, committed, NULL, NULL,
+ pool, pool);
- /* Unversioned file in versioned directory */
- if (res->min_rev == -1)
+ if (err)
{
- SVN_INT_ERR(svn_cmdline_printf(pool, _("Unversioned file%s"),
- no_newline ? "" : "\n"));
- svn_pool_destroy(pool);
- return EXIT_SUCCESS;
+ /* Unversioned file in versioned directory */
+ if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ SVN_INT_ERR(svn_cmdline_printf(pool, _("Unversioned file%s"),
+ no_newline ? "" : "\n"));
+ svn_pool_destroy(pool);
+ return EXIT_SUCCESS;
+ }
+ else
+ SVN_INT_ERR(err);
}
+
}
else if (kind == svn_node_none)
{
Modified: subversion/branches/ignore-mergeinfo/subversion/svnversion/svnversion.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnversion/svnversion.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnversion/svnversion.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnversion/svnversion.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it
to permit extracting previous versions of those files at any time.
For more information about the Subversion project, visit
-http://subversion.tigris.org.
+http://subversion.apache.org.
Documentation for Subversion and its tools, including detailed usage
explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/README
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/README?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/README (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/README Tue Aug 10 18:06:17 2010
@@ -86,7 +86,7 @@ correctly, nor as a place-holder for a t
Each test function conforms to the svn_test_driver_t prototype:
- svn_error_t *f (const char **MSG,
+ svn_error_t *f (const char **MSG,
svn_boolean_t MSG_ONLY
apr_pool_t *POOL);
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/authz_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/authz_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# authz_tests.py: testing authentication.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -903,6 +903,40 @@ def authz_access_required_at_repo_root(s
root_url + '/A-copy/B/E/beta',
root_url + '/A-copy/C')
+
+def multiple_matches(sbox):
+ "multiple lines matching a user"
+
+ sbox.build(create_wc = False)
+ root_url = sbox.repo_url
+ write_restrictive_svnserve_conf(sbox.repo_dir)
+ if sbox.repo_url.startswith("http"):
+ expected_err = ".*[Ff]orbidden.*"
+ else:
+ expected_err = ".*svn: Authorization failed.*"
+
+ # Prohibit access and commit fails
+ write_authz_file(sbox, {'/': 'jrandom ='})
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
+ 'cp', '-m', 'fail copy',
+ root_url, root_url + '/fail')
+
+ # At present if multiple lines match the permissions of all the
+ # matching lines are amalgamated. So jrandom gets access regardless
+ # of the line prohibiting access and regardless of the order of the
+ # lines. This might be a bug, but we probably can't simply fix it as
+ # that would change the behaviour of lots of existing authz files.
+
+ write_authz_file(sbox, {'/': 'jrandom =' + '\n' + '* = rw'})
+ svntest.main.run_svn(None, 'cp',
+ '-m', 'first copy',
+ root_url, root_url + '/first')
+
+ write_authz_file(sbox, {'/': '* = rw' + '\n' + 'jrandom ='})
+ svntest.main.run_svn(None, 'cp',
+ '-m', 'second copy',
+ root_url, root_url + '/second')
+
########################################################################
# Run the tests
@@ -928,6 +962,7 @@ test_list = [ None,
svntest.main.is_ra_type_file)),
Skip(authz_access_required_at_repo_root,
svntest.main.is_ra_type_file),
+ Skip(multiple_matches, svntest.main.is_ra_type_file),
]
if __name__ == '__main__':
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/autoprop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/autoprop_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/autoprop_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/autoprop_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# autoprop_tests.py: testing automatic properties
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/basic_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# basic_tests.py: testing working-copy interactions with ra_local
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/blame_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/blame_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/blame_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/blame_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# blame_tests.py: testing line-by-line annotation.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/cat_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# cat_tests.py: testing cat cases.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -146,6 +146,33 @@ def cat_skip_uncattable(sbox):
'cat', rho_path, G_path, new_file_path)
+# Test for issue #3560 'svn_wc_status3() returns incorrect status for
+# unversioned files'.
+def cat_unversioned_file(sbox):
+ "cat an unversioned file parent dir thinks exists"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ iota_path = os.path.join(wc_dir, 'iota')
+
+ # Delete a file an commit the deletion.
+ svntest.actions.run_and_verify_svn2(None, None, [], 0,
+ 'delete', iota_path)
+ svntest.actions.run_and_verify_svn2(None, None, [], 0,
+ 'commit', '-m', 'delete a file',
+ iota_path)
+
+ # Now try to cat the deleted file, it should be reported as unversioned.
+ expected_error = ["svn: warning: '" + os.path.abspath(iota_path) + "'"
+ + " is not under version control\n"]
+ svntest.actions.run_and_verify_svn2(None, [], expected_error, 0,
+ 'cat', iota_path)
+
+ # Put an unversioned file at 'iota' and try to cat it again, the result
+ # should still be the same.
+ svntest.main.file_write(iota_path, "This the unversioned file 'iota'.\n")
+ svntest.actions.run_and_verify_svn2(None, [], expected_error, 0,
+ 'cat', iota_path)
+
########################################################################
# Run the tests
@@ -157,6 +184,7 @@ test_list = [ None,
cat_base,
cat_nonexistent_file,
cat_skip_uncattable,
+ cat_unversioned_file,
]
if __name__ == '__main__':
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/changelist_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/changelist_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/changelist_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/changelist_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# changelist_tests.py: testing changelist uses.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/checkout_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/checkout_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/checkout_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/checkout_tests.py Tue Aug 10 18:06:17 2010
@@ -4,7 +4,7 @@
# tree already exits.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -26,7 +26,7 @@
######################################################################
# General modules
-import sys, re, os, time
+import sys, re, os, time, subprocess
# Our testing module
import svntest
@@ -824,6 +824,87 @@ def co_with_obstructing_local_adds(sbox)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
+# Test if checking out from a Windows driveroot is supported.
+def checkout_wc_from_drive(sbox):
+ "checkout from the root of a Windows drive"
+
+ def find_the_next_available_drive_letter():
+ "find the first available drive"
+
+ # get the list of used drive letters, use some Windows specific function.
+ try:
+ import win32api
+
+ drives=win32api.GetLogicalDriveStrings()
+ drives=drives.split('\000')
+
+ for d in range(ord('G'), ord('Z')+1):
+ drive = chr(d)
+ if not drive + ':\\' in drives:
+ return drive
+ except ImportError:
+ # In ActiveState python x64 win32api is not available
+ for d in range(ord('G'), ord('Z')+1):
+ drive = chr(d)
+ if not os.path.isdir(drive + ':\\'):
+ return drive
+
+ return None
+
+ # Skip the test if not on Windows
+ if not svntest.main.windows:
+ raise svntest.Skip
+
+ # just create an empty folder, we'll checkout later.
+ sbox.build(create_wc = False)
+ svntest.main.safe_rmtree(sbox.wc_dir)
+ os.mkdir(sbox.wc_dir)
+
+ # create a virtual drive to the working copy folder
+ drive = find_the_next_available_drive_letter()
+ if drive is None:
+ raise svntest.Skip
+
+ subprocess.call(['subst', drive +':', sbox.repo_dir])
+ repo_url = 'file:///' + drive + ':/'
+ wc_dir = sbox.wc_dir
+ was_cwd = os.getcwd()
+
+ try:
+ expected_wc = svntest.main.greek_state.copy()
+ expected_output = wc.State(wc_dir, {
+ 'A' : Item(status='A '),
+ 'A/D' : Item(status='A '),
+ 'A/D/H' : Item(status='A '),
+ 'A/D/H/psi' : Item(status='A '),
+ 'A/D/H/chi' : Item(status='A '),
+ 'A/D/H/omega' : Item(status='A '),
+ 'A/D/G' : Item(status='A '),
+ 'A/D/G/tau' : Item(status='A '),
+ 'A/D/G/pi' : Item(status='A '),
+ 'A/D/G/rho' : Item(status='A '),
+ 'A/D/gamma' : Item(status='A '),
+ 'A/C' : Item(status='A '),
+ 'A/mu' : Item(status='A '),
+ 'A/B' : Item(status='A '),
+ 'A/B/E' : Item(status='A '),
+ 'A/B/E/alpha' : Item(status='A '),
+ 'A/B/E/beta' : Item(status='A '),
+ 'A/B/F' : Item(status='A '),
+ 'A/B/lambda' : Item(status='A '),
+ 'iota' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_checkout(repo_url, wc_dir,
+ expected_output, expected_wc,
+ None, None, None, None,
+ '--force')
+
+ finally:
+ os.chdir(was_cwd)
+ # cleanup the virtual drive
+ subprocess.call(['subst', '/D', drive +':'])
+
+#----------------------------------------------------------------------
# list all tests here, starting with None:
test_list = [ None,
@@ -840,6 +921,7 @@ test_list = [ None,
checkout_peg_rev,
checkout_peg_rev_date,
co_with_obstructing_local_adds,
+ checkout_wc_from_drive
]
if __name__ == "__main__":
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/commit_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/commit_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# commit_tests.py: testing fancy commit cases.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -1496,8 +1496,11 @@ def commit_multiple_wc_multiple_repos(sb
svntest.actions.run_and_verify_status(wc2_dir, expected_status2)
# Commit should fail, since WCs come from different repositories.
+ # The exact error message depends on whether or not the tests are
+ # run below a 1.7 working copy
+ error_re = ".*(is not a|Are all targets part of the same) working copy.*"
svntest.actions.run_and_verify_svn("Expected output on stderr doesn't match",
- [], ".*is not a working copy.*",
+ [], error_re,
'commit', '-m', 'log',
wc1_dir, wc2_dir)
@@ -2430,7 +2433,7 @@ def set_invalid_revprops(sbox):
svntest.actions.run_and_verify_svn(None, [],
'svn: Revision property pair is empty',
'mkdir', '-m', 'msg',
- '--with-revprop', '',
+ '--with-revprop', '',
remote_dir)
#----------------------------------------------------------------------
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/copy_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/copy_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# copy_tests.py: testing the many uses of 'svn cp' and 'svn mv'
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -29,7 +29,7 @@ import stat, os, re, shutil
# Our testing module
import svntest
-
+from svntest import main
from svntest.main import SVN_PROP_MERGEINFO
# (abbreviation)
@@ -702,13 +702,16 @@ def copy_delete_commit(sbox):
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
B_path, B2_path)
- # delete a file
+ # delete two files
+ lambda_path = os.path.join(wc_dir, 'A', 'B2', 'lambda')
alpha_path = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
- svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', alpha_path, lambda_path)
# commit copied tree containing a deleted file
expected_output = svntest.wc.State(wc_dir, {
'A/B2' : Item(verb='Adding'),
+ 'A/B2/lambda' : Item(verb='Deleting'),
'A/B2/E/alpha' : Item(verb='Deleting'),
})
svntest.actions.run_and_verify_commit(wc_dir,
@@ -4266,6 +4269,127 @@ def move_below_move(sbox):
None, sbox.wc_dir)
+def reverse_merge_move(sbox):
+ """reverse merge move"""
+
+ # Alias for svntest.actions.run_and_verify_svn
+ rav_svn = svntest.actions.run_and_verify_svn
+
+ wc_dir = sbox.wc_dir
+ a_dir = os.path.join(wc_dir, 'A')
+ a_repo_url = sbox.repo_url + '/A'
+ sbox.build()
+
+ # Create another working copy path and checkout.
+ wc2_dir = sbox.add_wc_path('2')
+ rav_svn(None, None, [], 'co', sbox.repo_url, wc2_dir)
+
+ # Update working directory and ensure that we are at revision 1.
+ rav_svn(None, ["At revision 1.\n"], [], 'up', wc_dir)
+
+ # Add new folder and file, later commit
+ new_path = os.path.join(a_dir, 'New')
+ os.mkdir(new_path)
+ first_path = os.path.join(new_path, 'first')
+ svntest.main.file_append(first_path, 'appended first text')
+ svntest.main.run_svn(None, "add", new_path)
+ rav_svn(None, None, [], 'ci', wc_dir, '-m', 'Add new folder %s' % new_path)
+ rav_svn(None, ["At revision 2.\n"], [], 'up', wc_dir)
+
+ # Reverse merge to revert previous changes and commit
+ rav_svn(None, None, [], 'merge', '-c', '-2', a_repo_url, a_dir)
+ rav_svn(None, None, [], 'ci', '-m', 'Reverting svn merge -c -2.', a_dir)
+ rav_svn(None, ["At revision 3.\n"], [], 'up', wc_dir)
+
+ # Reverse merge again to undo last revert.
+ rav_svn(None, None, [], 'merge', '-c', '-3', a_repo_url, a_dir)
+
+ # Move new added file to another one and commit.
+ second_path = os.path.join(new_path, 'second')
+ rav_svn(None, None, [], 'move', first_path, second_path)
+ rav_svn(None, "Adding.*New|Adding.*first||Committed revision 4.", [],
+ 'ci', '-m',
+ 'Revert svn merge. svn mv %s %s.' % (first_path, second_path), a_dir)
+
+ # Update second working copy. There was a bug (at least on the 1.6.x
+ # branch) in which this update received both "first" and "second".
+ expected_output = svntest.wc.State(wc2_dir, {
+ 'A/New' : Item(status='A '),
+ 'A/New/second' : Item(status='A '),
+ })
+ svntest.actions.run_and_verify_update(wc2_dir,
+ expected_output,
+ None,
+ None)
+
+def nonrecursive_commit_of_copy(sbox):
+ """commit only top of copy; check child behavior"""
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ main.run_svn(None, 'cp', os.path.join(wc_dir, 'A'),
+ os.path.join(wc_dir, 'A_new'))
+ main.run_svn(None, 'cp', os.path.join(wc_dir, 'A/D/G'),
+ os.path.join(wc_dir, 'A_new/G_new'))
+ main.run_svn(None, 'rm', os.path.join(wc_dir, 'A_new/C'))
+ main.run_svn(None, 'rm', os.path.join(wc_dir, 'A_new/B/E'))
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'A_new' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A_new/D' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/G' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/G/pi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/G/rho' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/G/tau' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/H' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/H/psi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/H/chi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/H/omega' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/D/gamma' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/B' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/B/lambda' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/B/E' : Item(status='D ', wc_rev='?'),
+ 'A_new/B/E/alpha' : Item(status='D ', wc_rev='?'),
+ 'A_new/B/E/beta' : Item(status='D ', wc_rev='?'),
+ 'A_new/B/F' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/mu' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/C' : Item(status='D ', wc_rev='?'),
+ 'A_new/G_new' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A_new/G_new/pi' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/G_new/rho' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A_new/G_new/tau' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A_new': Item(verb='Adding'),
+ })
+
+ # These nodes are added by the commit
+ expected_status.tweak('A_new', 'A_new/D', 'A_new/D/G', 'A_new/D/G/pi',
+ 'A_new/D/G/rho', 'A_new/D/G/tau', 'A_new/D/H',
+ 'A_new/D/H/psi', 'A_new/D/H/chi', 'A_new/D/H/omega',
+ 'A_new/D/gamma', 'A_new/B', 'A_new/B/lambda',
+ 'A_new/B/F', 'A_new/mu',
+ status=' ', copied=None, wc_rev='2')
+
+ # And these are deleted with their parent (not sure if this is ok)
+ expected_status.remove('A_new/C', 'A_new/B/E', 'A_new/B/E/alpha',
+ 'A_new/B/E/beta')
+
+ # 'A_new/G_new' and everything below should still be added
+ # as their operation root was not committed
+ svntest.actions.run_and_verify_commit(wc_dir,
+ expected_output,
+ expected_status,
+ None,
+ wc_dir, '--depth', 'immediates')
+
+
########################################################################
# Run the tests
@@ -4352,7 +4476,9 @@ test_list = [ None,
path_copy_in_repo_2475,
commit_copy_depth_empty,
copy_below_copy,
- XFail(move_below_move)
+ XFail(move_below_move),
+ reverse_merge_move,
+ XFail(nonrecursive_commit_of_copy),
]
if __name__ == '__main__':
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/davautocheck.sh?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/davautocheck.sh Tue Aug 10 18:06:17 2010
@@ -144,12 +144,15 @@ unset HTTPS_PROXY
say "Using '$APXS'..."
+# Find the source and build directories. The build dir can be found if it is
+# the current working dir or the source dir.
+pushd ${SCRIPTDIR}/../../../ > /dev/null
+ABS_SRCDIR=$(pwd)
+popd > /dev/null
if [ -x subversion/svn/svn ]; then
ABS_BUILDDIR=$(pwd)
-elif [ -x $SCRIPTDIR/../../svn/svn ]; then
- pushd $SCRIPTDIR/../../../ >/dev/null
- ABS_BUILDDIR=$(pwd)
- popd >/dev/null
+elif [ -x $ABS_SRCDIR/subversion/svn/svn ]; then
+ ABS_BUILDDIR=$ABS_SRCDIR
else
fail "Run this script from the root of Subversion's build tree!"
fi
@@ -269,7 +272,7 @@ LoadModule authz_svn_module "$M
LockFile lock
User $(id -un)
Group $(id -gn)
-Listen localhost:$HTTPD_PORT
+Listen $HTTPD_PORT
ServerName localhost
PidFile "$HTTPD_PID"
LogFormat "%h %l %u %t \"%r\" %>s %b" common
@@ -355,6 +358,12 @@ rm "$HTTPD_CFG-copy"
say "HTTPD is good"
+if [ "$HTTP_LIBRARY" = "" ]; then
+ say "Using default dav library"
+else
+ say "Using dav library '$HTTP_LIBRARY'"
+fi
+
if [ $# -eq 1 ] && [ "x$1" = 'x--no-tests' ]; then
exit
fi
@@ -368,7 +377,7 @@ else
pushd "$ABS_BUILDDIR/subversion/tests/cmdline/" >/dev/null
TEST="$1"
shift
- time "./${TEST}_tests.py" "--url=$BASE_URL" "$@"
+ time "$ABS_SRCDIR/subversion/tests/cmdline/${TEST}_tests.py" "--url=$BASE_URL" "$@"
r=$?
popd >/dev/null
fi
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/depth_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/depth_tests.py Tue Aug 10 18:06:17 2010
@@ -5,7 +5,7 @@
# depth-immediates, depth-infinity).
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -104,8 +104,10 @@ def verify_depth(msg, depth, path="."):
if line.startswith("Depth:"):
raise svntest.failure(msg)
else:
- svntest.actions.run_and_verify_svn_match_any(
- msg, "^Depth: %s\n$" % depth, [], "info", path)
+ expected_stdout = svntest.verify.ExpectedOutput("Depth: %s\n" % depth,
+ match_all=False)
+ svntest.actions.run_and_verify_svn(
+ msg, expected_stdout, [], "info", path)
#----------------------------------------------------------------------
# Ensure that 'checkout --depth=empty' results in a depth-empty working copy.
@@ -2226,8 +2228,8 @@ def excluded_path_misc_operation(sbox):
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
- None,
- wc_dir)
+ None,
+ wc_dir)
# Relocate wc, with excluded items in it.
repo_dir = sbox.repo_dir
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/diff_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/diff_tests.py Tue Aug 10 18:06:17 2010
@@ -4,7 +4,7 @@
# diff_tests.py: some basic diff tests
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/entries_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/entries_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/entries_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/entries_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# entries_tests.py: test the old entries API using entries-dump
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/export_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/export_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# export_tests.py: testing export cases.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -409,12 +409,12 @@ def export_to_explicit_cwd(sbox):
sbox.build(create_wc = False, read_only = True)
svntest.main.safe_rmtree(sbox.wc_dir)
- expected_output = svntest.tree.build_generic_tree([
- Item(status='A ').as_node_tuple('iota'),
- ]).as_state()
- expected_disk = svntest.tree.build_generic_tree([
- Item(contents="This is the file 'iota'.\n").as_node_tuple('iota'),
- ]).as_state()
+ expected_output = svntest.wc.State('', {
+ 'iota': Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'iota': Item(contents="This is the file 'iota'.\n"),
+ })
os.mkdir(sbox.wc_dir)
os.chdir(sbox.wc_dir)
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/externals_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/externals_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# module_tests.py: testing modules / external sources.
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -1348,7 +1348,7 @@ def switch_relative_external(sbox):
'--quiet', wc_dir)
# Okay. We now want to switch A to A_copy, which *should* cause
- # A/D/ext to point to the URL for A_copy/D/ext.
+ # A/D/ext to point to the URL for A_copy/B (instead of A/B).
svntest.actions.run_and_verify_svn(None, None, [], 'sw',
'--quiet', A_copy_url, A_path)
@@ -1583,7 +1583,7 @@ test_list = [ None,
external_into_path_with_spaces,
binary_file_externals,
XFail(update_lose_file_external),
- XFail(switch_relative_external),
+ switch_relative_external,
export_sparse_wc_with_externals,
relegate_external,
wc_repos_file_externals,
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/getopt_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/getopt_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/getopt_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/getopt_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# getopt_tests.py: testing the svn command line processing
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -205,7 +205,7 @@ test_list = [ None,
getopt__help,
getopt_help,
getopt_help_bogus_cmd,
- getopt_help_log_switch
+ getopt_help_log_switch,
]
if __name__ == '__main__':
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/history_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/history_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/history_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/history_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# history_tests.py: testing history-tracing code
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/import_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/import_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/import_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/import_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# import_tests.py: import tests
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/info_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/info_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/info_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/info_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# info_tests.py: testing the svn info command
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -292,7 +292,7 @@ def info_on_mkdir(sbox):
test_list = [ None,
info_with_tree_conflicts,
info_on_added_file,
- info_on_mkdir
+ info_on_mkdir,
]
if __name__ == '__main__':
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/lock_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/lock_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# lock_tests.py: testing versioned properties
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -1451,7 +1451,7 @@ def lock_path_not_in_head(sbox):
svntest.actions.run_and_verify_svn(None, None, [],
'delete', lambda_path, D_path)
svntest.actions.run_and_verify_svn(None, None, [], 'commit',
- '-m', 'Some deletions', wc_dir)
+ '-m', 'Some deletions', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r1', wc_dir)
expected_lock_fail_err_re = "svn: warning:.*" \
"((Path .* doesn't exist in HEAD revision)" \
Modified: subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/log_tests.py?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/branches/ignore-mergeinfo/subversion/tests/cmdline/log_tests.py Tue Aug 10 18:06:17 2010
@@ -3,7 +3,7 @@
# log_tests.py: testing "svn log"
#
# Subversion is a tool for revision control.
-# See http://subversion.tigris.org for more information.
+# See http://subversion.apache.org for more information.
#
# ====================================================================
# Licensed to the Apache Software Foundation (ASF) under one
@@ -68,6 +68,7 @@ msg_separator = '-----------------------
Skip = svntest.testcase.Skip
SkipUnless = svntest.testcase.SkipUnless
XFail = svntest.testcase.XFail
+Wimp = svntest.testcase.Wimp
Item = svntest.wc.StateItem
@@ -1432,22 +1433,35 @@ def log_xml_with_bad_data(sbox):
def merge_sensitive_log_target_with_bogus_mergeinfo(sbox):
"'svn log -g target_with_bogus_mergeinfo'"
- #Refer issue 3172 for details.
- #Create greek tree
- #svn ps 'svn:mergeinfo' '/A/B:0' A/D
- #svn ci -m 'setting bogus mergeinfo'
- #svn log -g -r2
+ # A test for issue #3172 'svn log -g' seems to encounter error on server':
+ # 'log -g' fails the moment it encounters a bogus mergeinfo which claims a
+ # merge from a non-existentpath@REV1-REV2.
+ #
+ # ### Present test: test that 'svn log -g' does not report an error.
+ # ### Desirable test: test that 'svn log -g' produces the results expected
+ # from ignoring all such revisions and reporting on all revisions that
+ # are valid.
+
+ # In r2, create /A/B-copied as a copy of something that existed at r1, and
+ # /A/B-new as something new. Manually set mergeinfo on /A/C@2 saying it
+ # was merged from the non-existent r1 of /A/B-copied, and on /A/D@2 saying
+ # it was merged from the non-existent r1 of /A/B-new.
sbox.build()
wc_path = sbox.wc_dir
+ B_copied_path = os.path.join(wc_path, 'A', 'B-copied')
+ B_new_path = os.path.join(wc_path, 'A', 'B-new')
+ B_path = os.path.join(wc_path, 'A', 'B')
+ C_path = os.path.join(wc_path, 'A', 'C')
D_path = os.path.join(wc_path, 'A', 'D')
- svntest.main.run_svn(None, 'ps', SVN_PROP_MERGEINFO, '/A/B:0', D_path)
- #commit at r2
- svntest.main.run_svn(None, 'ci', '-m', 'setting bogus mergeinfo', D_path)
- exit_code, output, err = svntest.actions.run_and_verify_svn(None, None,
- [], 'log',
- '-g', D_path)
- if len(err):
- raise svntest.Failure("svn log -g target_with_bogus_mergeinfo fails")
+ svntest.main.run_svn(None, 'cp', B_path, B_copied_path)
+ svntest.main.run_svn(None, 'ps', SVN_PROP_MERGEINFO, '/A/B-copied:1', C_path)
+ svntest.main.run_svn(None, 'mkdir', B_new_path)
+ svntest.main.run_svn(None, 'ps', SVN_PROP_MERGEINFO, '/A/B-new:1', D_path)
+ svntest.main.run_svn(None, 'ci', '-m', 'setting bogus mergeinfo', wc_path)
+
+ # The tests: Check that 'svn log -g' doesn't error on these.
+ svntest.actions.run_and_verify_svn(None, None, [], 'log', '-g', C_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'log', '-g', D_path)
def merge_sensitive_log_added_mergeinfo_replaces_inherited(sbox):
"log -g and explicit mergeinfo replacing inherited"
@@ -1472,6 +1486,11 @@ def merge_sensitive_log_added_mergeinfo_
'G/rho' : Item(status='U '),
'H/omega' : Item(status='U '),
})
+ expected_mergeinfo_output = wc.State(D_COPY_path, {
+ '' : Item(status=' U'),
+ })
+ expected_elision_output = wc.State(D_COPY_path, {
+ })
expected_status = wc.State(D_COPY_path, {
'' : Item(status=' M', wc_rev=2),
'G' : Item(status=' ', wc_rev=2),
@@ -1498,8 +1517,10 @@ def merge_sensitive_log_added_mergeinfo_
})
expected_skip = wc.State(D_COPY_path, { })
svntest.actions.run_and_verify_merge(D_COPY_path, None, None,
- sbox.repo_url + '/A/D',
+ sbox.repo_url + '/A/D', None,
expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
expected_disk,
expected_status,
expected_skip,
@@ -1534,6 +1555,11 @@ def merge_sensitive_log_added_mergeinfo_
expected_output = wc.State(H_COPY_path, {
'psi' : Item(status='U ')
})
+ expected_mergeinfo_output = wc.State(H_COPY_path, {
+ '' : Item(status=' G'),
+ })
+ expected_elision_output = wc.State(H_COPY_path, {
+ })
expected_status = wc.State(H_COPY_path, {
'' : Item(status=' M', wc_rev=7),
'psi' : Item(status='M ', wc_rev=7),
@@ -1548,8 +1574,11 @@ def merge_sensitive_log_added_mergeinfo_
})
expected_skip = wc.State(H_COPY_path, { })
svntest.actions.run_and_verify_merge(H_COPY_path, '3', '2',
- sbox.repo_url + '/A/D/H',
- expected_output, expected_disk,
+ sbox.repo_url + '/A/D/H', None,
+ expected_output,
+ expected_mergeinfo_output,
+ expected_elision_output,
+ expected_disk,
expected_status, expected_skip,
None, None, None, None, None, 1)
@@ -1650,6 +1679,57 @@ def merge_sensitive_log_propmod_merge_in
run_log_g_r8(A_COPY_path)
run_log_g_r8(A_COPY_psi_path)
+#----------------------------------------------------------------------
+# Should be able to run 'svn log' against an uncommitted copy or move
+# destination. See http://svn.haxx.se/dev/archive-2010-01/0492.shtml.
+def log_of_local_copy(sbox):
+ "svn log on an uncommitted copy"
+
+ guarantee_repos_and_wc(sbox)
+
+ C_path = os.path.join(sbox.wc_dir, "A", "C")
+ C_moved_path = os.path.join(sbox.wc_dir, "A", "C_MOVED")
+ psi_path = os.path.join(sbox.wc_dir, "A", "D", "H", "psi")
+ psi_moved_path = os.path.join(sbox.wc_dir, "A", "D", "H", "psi_moved")
+
+ # Get the logs for a directory and a file.
+ exit_code, C_log_out, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-v', C_path)
+ exit_code, psi_log_out, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-v', psi_path)
+
+ # Move that directory and file.
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+ C_path, C_moved_path)
+ svntest.actions.run_and_verify_svn(None, None, [], 'mv',
+ psi_path, psi_moved_path)
+
+ # Get the logs for the move destinations.
+ #
+ # This was failing with:
+ #
+ # svn log -v log_tests-29\A\C_MOVED
+ # ..\..\..\subversion\svn\log-cmd.c:600: (apr_err=160013)
+ # ..\..\..\subversion\libsvn_client\log.c:627: (apr_err=160013)
+ # ..\..\..\subversion\libsvn_repos\log.c:1449: (apr_err=160013)
+ # ..\..\..\subversion\libsvn_repos\log.c:1092: (apr_err=160013)
+ # ..\..\..\subversion\libsvn_fs_fs\tree.c:2818: (apr_err=160013)
+ # svn: File not found: revision 9, path '/A/C_MOVED'
+ #
+ exit_code, C_moved_log_out, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-v', C_moved_path)
+ exit_code, psi_moved_log_out, err = svntest.actions.run_and_verify_svn(
+ None, None, [], 'log', '-v', psi_moved_path)
+
+ # The logs of the move source and destinations should be the same.
+ if C_log_out != C_moved_log_out:
+ raise svntest.Failure("Log on uncommitted move destination '%s' " \
+ "differs from that on move source '%s'"
+ % (C_moved_path, C_path))
+ if psi_log_out != psi_moved_log_out:
+ raise svntest.Failure("Log on uncommitted move destination '%s' " \
+ "differs from that on move source '%s'"
+ % (psi_moved_path, psi_path))
########################################################################
# Run the tests
@@ -1686,11 +1766,12 @@ test_list = [ None,
retrieve_revprops,
log_xml_with_bad_data,
SkipUnless(merge_sensitive_log_target_with_bogus_mergeinfo,
- server_has_mergeinfo),
+ server_has_mergeinfo),
SkipUnless(merge_sensitive_log_added_mergeinfo_replaces_inherited,
server_has_mergeinfo),
SkipUnless(merge_sensitive_log_propmod_merge_inheriting_path,
server_has_mergeinfo),
+ log_of_local_copy,
]
if __name__ == '__main__':