You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/01/09 10:31:15 UTC
svn commit: r1556765 [10/12] - in /subversion/branches/fsfs-ucsnorm: ./
contrib/server-side/fsfsfixer/fixer/ subversion/bindings/javahl/native/
subversion/bindings/javahl/native/jniwrapper/
subversion/bindings/javahl/src/org/apache/subversion/javahl/ s...
Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/repos.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/repos.c Thu Jan 9 09:31:10 2014
@@ -57,6 +57,7 @@
#include "private/svn_log.h"
#include "private/svn_fspath.h"
#include "private/svn_repos_private.h"
+#include "private/svn_sorts_private.h"
#include "dav_svn.h"
@@ -3808,10 +3809,9 @@ copy_resource(const dav_resource *src,
dst->pool));
if (!serr && (strcmp(src_repos_path, dst_repos_path) != 0))
- return dav_svn__new_error_tag(
+ return dav_svn__new_error_svn(
dst->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- "Copy source and destination are in different repositories.",
- SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+ "Copy source and destination are in different repositories");
}
else
serr = SVN_NO_ERROR;
@@ -3939,8 +3939,9 @@ remove_resource(dav_resource *resource,
incoming lock-tokens into the filesystem's access_t. Normally
they come in via 'If:' header, and get_resource()
automatically notices them and does this work for us. In the
- case of a directory deletion, however, svn clients are sending
- 'child' lock-tokens in the DELETE request body. */
+ case of a directory deletion, however, older subversion clients
+ are sending 'child' lock-tokens in the non-standard DELETE
+ request body. */
err = dav_svn__build_lock_hash(&locks, resource->info->r,
resource->info->repos_path, resource->pool);
Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c Thu Jan 9 09:31:10 2014
@@ -59,26 +59,24 @@ dav_svn__new_error(apr_pool_t *pool,
return dav_new_error(pool, status, error_id, 0, desc);
#else
- errno = 0; /* For the same reason as in dav_svn__new_error_tag */
+ errno = 0; /* For the same reason as in dav_svn__new_error_svn */
return dav_new_error(pool, status, error_id, desc);
#endif
}
dav_error *
-dav_svn__new_error_tag(apr_pool_t *pool,
+dav_svn__new_error_svn(apr_pool_t *pool,
int status,
int error_id,
- const char *desc,
- const char *namespace,
- const char *tagname)
+ const char *desc)
{
if (error_id == 0)
error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
#if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
return dav_new_error_tag(pool, status, error_id, 0,
- desc, namespace, tagname);
+ desc, SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
#else
/* dav_new_error_tag will record errno but Subversion makes no attempt
to ensure that it is valid. We reset it to avoid putting incorrect
@@ -86,7 +84,8 @@ dav_svn__new_error_tag(apr_pool_t *pool,
valid information. */
errno = 0;
- return dav_new_error_tag(pool, status, error_id, desc, namespace, tagname);
+ return dav_new_error_tag(pool, status, error_id, desc,
+ SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
#endif
}
@@ -96,11 +95,11 @@ dav_svn__new_error_tag(apr_pool_t *pool,
static dav_error *
build_error_chain(apr_pool_t *pool, svn_error_t *err, int status)
{
- char *msg = err->message ? apr_pstrdup(pool, err->message) : NULL;
+ char buffer[128];
+ const char *msg = svn_err_best_message(err, buffer, sizeof(buffer));
- dav_error *derr = dav_svn__new_error_tag(pool, status, err->apr_err, msg,
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ dav_error *derr = dav_svn__new_error_svn(pool, status, err->apr_err,
+ apr_pstrdup(pool, msg));
if (err->child)
derr->prev = build_error_chain(pool, err->child, status);
@@ -193,15 +192,9 @@ dav_svn__get_safe_cr(svn_fs_root_t *root
svn_revnum_t history_rev;
svn_fs_root_t *other_root;
svn_fs_t *fs = svn_fs_root_fs(root);
- const svn_fs_id_t *id, *other_id;
+ svn_fs_node_relation_t node_relation;
svn_error_t *err;
- if ((err = svn_fs_node_id(&id, root, path, pool)))
- {
- svn_error_clear(err);
- return revision; /* couldn't get id of root/path */
- }
-
if ((err = get_last_history_rev(&history_rev, root, path, pool)))
{
svn_error_clear(err);
@@ -214,13 +207,14 @@ dav_svn__get_safe_cr(svn_fs_root_t *root
return revision; /* couldn't open the history rev */
}
- if ((err = svn_fs_node_id(&other_id, other_root, path, pool)))
+ if ((err = svn_fs_node_relation(&node_relation, root, path,
+ other_root, path, pool)))
{
svn_error_clear(err);
- return revision; /* couldn't get id of other_root/path */
+ return revision;
}
- if (svn_fs_compare_ids(id, other_id) == 0)
+ if (node_relation == svn_fs_node_same)
return history_rev; /* the history rev is safe! the same node
exists at the same path in both revisions. */
@@ -541,12 +535,11 @@ dav_svn__test_canonical(const char *path
return NULL;
/* Otherwise, generate a generic HTTP_BAD_REQUEST error. */
- return dav_svn__new_error_tag
- (pool, HTTP_BAD_REQUEST, 0,
+ return dav_svn__new_error_svn(
+ pool, HTTP_BAD_REQUEST, 0,
apr_psprintf(pool,
"Path '%s' is not canonicalized; "
- "there is a problem with the client.", path),
- SVN_DAV_ERROR_NAMESPACE, SVN_DAV_ERROR_TAG);
+ "there is a problem with the client.", path));
}
Modified: subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/version.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/version.c Thu Jan 9 09:31:10 2014
@@ -396,11 +396,9 @@ vsn_control(dav_resource *resource, cons
/* Only allow a NULL target, which means an create an 'empty' VCR. */
if (target != NULL)
- return dav_svn__new_error_tag(resource->pool, HTTP_NOT_IMPLEMENTED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
SVN_ERR_UNSUPPORTED_FEATURE,
- "vsn_control called with non-null target.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "vsn_control called with non-null target");
/* This is kind of silly. The docstring for this callback says it's
supposed to "put a resource under version control". But in
@@ -446,20 +444,16 @@ dav_svn__checkout(dav_resource *resource
return NULL;
if (resource->type != DAV_RESOURCE_TYPE_REGULAR)
- return dav_svn__new_error_tag(resource->pool, HTTP_METHOD_NOT_ALLOWED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
SVN_ERR_UNSUPPORTED_FEATURE,
"auto-checkout attempted on non-regular "
- "version-controlled resource.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "version-controlled resource");
if (resource->baselined)
- return dav_svn__new_error_tag(resource->pool, HTTP_METHOD_NOT_ALLOWED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
SVN_ERR_UNSUPPORTED_FEATURE,
"auto-checkout attempted on baseline "
- "collection, which is not supported.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "collection, which is not supported");
/* See if the shared activity already exists. */
apr_err = apr_pool_userdata_get(&data,
@@ -541,51 +535,41 @@ dav_svn__checkout(dav_resource *resource
if (resource->type != DAV_RESOURCE_TYPE_VERSION)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_METHOD_NOT_ALLOWED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_METHOD_NOT_ALLOWED,
SVN_ERR_UNSUPPORTED_FEATURE,
"CHECKOUT can only be performed on a "
- "version resource [at this time].",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "version resource");
}
if (create_activity)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_NOT_IMPLEMENTED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
SVN_ERR_UNSUPPORTED_FEATURE,
"CHECKOUT cannot create an activity at "
- "this time. Use MKACTIVITY first.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "this time. Use MKACTIVITY first");
}
if (is_unreserved)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_NOT_IMPLEMENTED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
SVN_ERR_UNSUPPORTED_FEATURE,
"Unreserved checkouts are not yet "
"available. A version history may not be "
"checked out more than once, into a "
- "specific activity.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "specific activity");
}
if (activities == NULL)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT,
+ return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
SVN_ERR_INCOMPLETE_DATA,
"An activity must be provided for "
- "checkout.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "checkout");
}
/* assert: nelts > 0. the below check effectively means > 1. */
if (activities->nelts != 1)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT,
+ return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
SVN_ERR_INCORRECT_PARAMS,
"Only one activity may be specified within "
- "the CHECKOUT.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "the CHECKOUT");
}
serr = dav_svn__simple_parse_uri(&parse, resource,
@@ -601,21 +585,17 @@ dav_svn__checkout(dav_resource *resource
}
if (parse.activity_id == NULL)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT,
+ return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
SVN_ERR_INCORRECT_PARAMS,
- "The provided href is not an activity URI.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "The provided href is not an activity URI");
}
if ((txn_name = dav_svn__get_txn(resource->info->repos,
parse.activity_id)) == NULL)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT,
+ return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
SVN_ERR_APMOD_ACTIVITY_NOT_FOUND,
- "The specified activity does not exist.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "The specified activity does not exist");
}
/* verify the specified version resource is the "latest", thus allowing
@@ -643,13 +623,11 @@ dav_svn__checkout(dav_resource *resource
if (resource->info->root.rev != youngest)
{
- return dav_svn__new_error_tag(resource->pool, HTTP_CONFLICT,
+ return dav_svn__new_error_svn(resource->pool, HTTP_CONFLICT,
SVN_ERR_APMOD_BAD_BASELINE,
"The specified baseline is not the "
"latest baseline, so it may not be "
- "checked out.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "checked out");
}
/* ### hmm. what if the transaction root's revision is different
@@ -743,11 +721,9 @@ dav_svn__checkout(dav_resource *resource
{
/* The item being modified is older than the one in the
transaction. The client is out of date. */
- return dav_svn__new_error_tag
+ return dav_svn__new_error_svn
(resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT,
- "resource out of date; try updating",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "resource out of date; try updating");
}
else if (resource->info->root.rev > txn_created_rev)
{
@@ -755,42 +731,25 @@ dav_svn__checkout(dav_resource *resource
revision than the one in the transaction. We'll
check to see if they are still the same node, and if
not, return an error. */
- const svn_fs_id_t *url_noderev_id, *txn_noderev_id;
-
- if ((serr = svn_fs_node_id(&txn_noderev_id, txn_root,
- resource->info->repos_path,
- resource->pool)))
- {
- err = dav_svn__new_error_tag
- (resource->pool, HTTP_CONFLICT, serr->apr_err,
- "Unable to fetch the node revision id of the version "
- "resource within the transaction.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
- svn_error_clear(serr);
- return err;
- }
- if ((serr = svn_fs_node_id(&url_noderev_id,
- resource->info->root.root,
- resource->info->repos_path,
- resource->pool)))
+ svn_fs_node_relation_t node_relation;
+ if ((serr = svn_fs_node_relation(&node_relation, txn_root,
+ resource->info->repos_path,
+ resource->info->root.root,
+ resource->info->repos_path,
+ resource->pool)))
{
- err = dav_svn__new_error_tag
+ err = dav_svn__new_error_svn
(resource->pool, HTTP_CONFLICT, serr->apr_err,
"Unable to fetch the node revision id of the version "
- "resource within the revision.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "resource within the revision");
svn_error_clear(serr);
return err;
}
- if (svn_fs_compare_ids(url_noderev_id, txn_noderev_id) != 0)
+ if (node_relation != svn_fs_node_same)
{
- return dav_svn__new_error_tag
+ return dav_svn__new_error_svn
(resource->pool, HTTP_CONFLICT, SVN_ERR_FS_CONFLICT,
- "version resource newer than txn (restart the commit)",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "version resource newer than txn (restart the commit)");
}
}
}
@@ -807,11 +766,9 @@ static dav_error *
uncheckout(dav_resource *resource)
{
if (resource->type != DAV_RESOURCE_TYPE_WORKING)
- return dav_svn__new_error_tag(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+ return dav_svn__new_error_svn(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
SVN_ERR_UNSUPPORTED_FEATURE,
- "UNCHECKOUT called on non-working resource.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "UNCHECKOUT called on non-working resource");
/* Try to abort the txn if it exists; but don't try too hard. :-) */
if (resource->info->root.txn)
@@ -950,11 +907,9 @@ dav_svn__checkin(dav_resource *resource,
txn? Many txns? Etc.) */
if (resource->type != DAV_RESOURCE_TYPE_WORKING)
- return dav_svn__new_error_tag(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
+ return dav_svn__new_error_svn(resource->pool, HTTP_INTERNAL_SERVER_ERROR,
SVN_ERR_UNSUPPORTED_FEATURE,
- "CHECKIN called on non-working resource.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "CHECKIN called on non-working resource");
/* If the global autoversioning activity still exists, that means
nobody's committed it yet. */
@@ -1189,11 +1144,9 @@ deliver_report(request_rec *r,
}
/* ### what is a good error for an unknown report? */
- return dav_svn__new_error_tag(resource->pool, HTTP_NOT_IMPLEMENTED,
+ return dav_svn__new_error_svn(resource->pool, HTTP_NOT_IMPLEMENTED,
SVN_ERR_UNSUPPORTED_FEATURE,
- "The requested report is unknown.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "The requested report is unknown");
}
@@ -1220,13 +1173,11 @@ make_activity(dav_resource *resource)
/* sanity check: make sure the resource is a valid activity, in
case an older mod_dav doesn't do the check for us. */
if (! can_be_activity(resource))
- return dav_svn__new_error_tag(resource->pool, HTTP_FORBIDDEN,
+ return dav_svn__new_error_svn(resource->pool, HTTP_FORBIDDEN,
SVN_ERR_APMOD_MALFORMED_URI,
"Activities cannot be created at that "
"location; query the "
- "DAV:activity-collection-set property.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "DAV:activity-collection-set property");
err = dav_svn__create_txn(resource->info->repos, &txn_name,
NULL, resource->pool);
@@ -1465,22 +1416,18 @@ merge(dav_resource *target,
|| (source->type == DAV_RESOURCE_TYPE_PRIVATE
&& source->info->restype == DAV_SVN_RESTYPE_TXN_COLLECTION)))
{
- return dav_svn__new_error_tag(pool, HTTP_METHOD_NOT_ALLOWED,
+ return dav_svn__new_error_svn(pool, HTTP_METHOD_NOT_ALLOWED,
SVN_ERR_INCORRECT_PARAMS,
"MERGE can only be performed using an "
"activity or transaction resource as the "
- "source.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "source");
}
if (! source->exists)
{
- return dav_svn__new_error_tag(pool, HTTP_METHOD_NOT_ALLOWED,
+ return dav_svn__new_error_svn(pool, HTTP_METHOD_NOT_ALLOWED,
SVN_ERR_INCORRECT_PARAMS,
"MERGE activity or transaction resource "
- "does not exist.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
+ "does not exist");
}
/* Before attempting the final commit, we need to push any incoming
Propchange: subversion/branches/fsfs-ucsnorm/subversion/svn/cl-log.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/info-cmd.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/info-cmd.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/info-cmd.c Thu Jan 9 09:31:10 2014
@@ -643,9 +643,12 @@ svn_cl__info(apr_getopt_t *os,
SVN_ERR(svn_dirent_get_absolute(&truepath, truepath, subpool));
}
- err = svn_client_info3(truepath,
+ err = svn_client_info4(truepath,
&peg_revision, &(opt_state->start_revision),
- opt_state->depth, TRUE, TRUE,
+ opt_state->depth,
+ TRUE /* fetch_excluded */,
+ TRUE /* fetch_actual_only */,
+ opt_state->include_externals,
opt_state->changelists,
receiver, (void *) path_prefix,
ctx, subpool);
Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/log-cmd.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/log-cmd.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/log-cmd.c Thu Jan 9 09:31:10 2014
@@ -37,6 +37,7 @@
#include "svn_pools.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_sorts_private.h"
#include "cl.h"
#include "cl-log.h"
Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/notify.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/notify.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/notify.c Thu Jan 9 09:31:10 2014
@@ -808,6 +808,13 @@ notify(void *baton, const svn_wc_notify_
goto print_error;
break;
+ case svn_wc_notify_info_external:
+ if ((err = svn_cmdline_printf(
+ pool, _("\nPerforming info on external item at '%s':\n"),
+ path_local)))
+ goto print_error;
+ break;
+
case svn_wc_notify_status_completed:
if (SVN_IS_VALID_REVNUM(n->revision))
if ((err = svn_cmdline_printf(pool,
Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/propget-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/propget-cmd.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/propget-cmd.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/propget-cmd.c Thu Jan 9 09:31:10 2014
@@ -45,7 +45,7 @@
#include "cl.h"
#include "private/svn_cmdline_private.h"
-
+#include "private/svn_sorts_private.h"
/*** Code. ***/
Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c Thu Jan 9 09:31:10 2014
@@ -660,7 +660,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
" Print information about each TARGET (default: '.').\n"
" TARGET may be either a working-copy path or URL. If specified, REV\n"
" determines in which revision the target is first looked up.\n"),
- {'r', 'R', opt_depth, opt_targets, opt_incremental, opt_xml, opt_changelist}
+ {'r', 'R', opt_depth, opt_targets, opt_incremental, opt_xml,
+ opt_changelist, opt_include_externals}
},
{ "list", svn_cl__list, {"ls"}, N_
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c Thu Jan 9 09:31:10 2014
@@ -45,9 +45,10 @@
#include "svn_user.h"
#include "svn_xml.h"
+#include "private/svn_cmdline_private.h"
#include "private/svn_opt_private.h"
+#include "private/svn_sorts_private.h"
#include "private/svn_subr_private.h"
-#include "private/svn_cmdline_private.h"
/*** Code. ***/
@@ -100,7 +101,7 @@ warning_func(void *baton,
{
if (! err)
return;
- svn_handle_error2(err, stderr, FALSE, "svnadmin: ");
+ svn_handle_warning2(stderr, err, "svnadmin: ");
}
@@ -304,10 +305,8 @@ static const apr_getopt_option_t options
{"file", 'F', 1, N_("read repository paths from file ARG")},
{"check-normalization", svnadmin__check_normalization, 0,
- N_("report paths in the filesystem and mergeinfo\n"
- " that are not normalized to Unicode Normalization\n"
- " Form C, and any names within the same directory\n"
- " or svn:mergeinfo property value that differ only\n"
+ N_("report any names within the same directory or\n"
+ " svn:mergeinfo property value that differ only\n"
" in character representation, but are otherwise\n"
" identical")},
@@ -1842,6 +1841,7 @@ subcommand_info(apr_getopt_t *os, void *
svn_repos_t *repos;
svn_fs_t *fs;
int fs_format;
+ const char *uuid;
/* Expect no more arguments. */
SVN_ERR(parse_args(NULL, os, 0, 0, pool));
@@ -1852,6 +1852,8 @@ subcommand_info(apr_getopt_t *os, void *
svn_dirent_local_style(svn_repos_path(repos, pool),
pool)));
+ SVN_ERR(svn_fs_get_uuid(fs, &uuid, pool));
+ SVN_ERR(svn_cmdline_printf(pool, _("UUID: %s\n"), uuid));
{
int repos_format, minor;
svn_version_t *repos_version, *fs_version;
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnauth/svnauth.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnauth/svnauth.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnauth/svnauth.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnauth/svnauth.c Thu Jan 9 09:31:10 2014
@@ -47,6 +47,7 @@
#include "svn_sorts.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_sorts_private.h"
#include "private/svn_token.h"
/* Baton for passing option/argument state to a subcommand function. */
@@ -413,7 +414,7 @@ load_cert(serf_ssl_certificate_t **cert,
ascii_cert));
return SVN_NO_ERROR;
}
- SVN_ERR(svn_io_file_flush_to_disk(pem_file, scratch_pool));
+ SVN_ERR(svn_io_file_flush(pem_file, scratch_pool));
status = serf_ssl_load_cert_file(cert, pem_path, result_pool);
if (status)
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c Thu Jan 9 09:31:10 2014
@@ -55,10 +55,11 @@
#include "svn_version.h"
#include "svn_xml.h"
-#include "private/svn_diff_private.h"
#include "private/svn_cmdline_private.h"
+#include "private/svn_diff_private.h"
#include "private/svn_fspath.h"
#include "private/svn_io_private.h"
+#include "private/svn_sorts_private.h"
/*** Some convenience macros and types. ***/
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnmucc/svnmucc.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnmucc/svnmucc.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnmucc/svnmucc.c Thu Jan 9 09:31:10 2014
@@ -76,43 +76,6 @@ check_lib_versions(void)
}
static svn_error_t *
-open_tmp_file(apr_file_t **fp,
- void *callback_baton,
- apr_pool_t *pool)
-{
- /* Open a unique file; use APR_DELONCLOSE. */
- return svn_io_open_unique_file3(fp, NULL, NULL, svn_io_file_del_on_close,
- pool, pool);
-}
-
-static svn_error_t *
-create_ra_callbacks(svn_ra_callbacks2_t **callbacks,
- const char *username,
- const char *password,
- const char *config_dir,
- svn_config_t *cfg_config,
- svn_boolean_t non_interactive,
- svn_boolean_t trust_server_cert,
- svn_boolean_t no_auth_cache,
- apr_pool_t *pool)
-{
- SVN_ERR(svn_ra_create_callbacks(callbacks, pool));
-
- SVN_ERR(svn_cmdline_create_auth_baton(&(*callbacks)->auth_baton,
- non_interactive,
- username, password, config_dir,
- no_auth_cache,
- trust_server_cert,
- cfg_config, NULL, NULL, pool));
-
- (*callbacks)->open_tmp_file = open_tmp_file;
-
- return SVN_NO_ERROR;
-}
-
-
-
-static svn_error_t *
commit_callback(const svn_commit_info_t *commit_info,
void *baton,
apr_pool_t *pool)
@@ -136,204 +99,6 @@ typedef enum action_code_t {
ACTION_RM
} action_code_t;
-struct operation {
- enum {
- OP_OPEN,
- OP_DELETE,
- OP_ADD,
- OP_REPLACE,
- OP_PROPSET /* only for files for which no other operation is
- occuring; directories are OP_OPEN with non-empty
- props */
- } operation;
- svn_node_kind_t kind; /* to copy, mkdir, put or set revprops */
- svn_revnum_t rev; /* to copy, valid for add and replace */
- const char *url; /* to copy, valid for add and replace */
- const char *src_file; /* for put, the source file for contents */
- apr_hash_t *children; /* const char *path -> struct operation * */
- apr_hash_t *prop_mods; /* const char *prop_name ->
- const svn_string_t *prop_value */
- apr_array_header_t *prop_dels; /* const char *prop_name deletions */
- void *baton; /* as returned by the commit editor */
-};
-
-
-/* Set node properties.
- ... */
-static svn_error_t *
-change_props(const svn_delta_editor_t *editor,
- void *baton,
- struct operation *child,
- apr_pool_t *pool)
-{
- apr_pool_t *iterpool = svn_pool_create(pool);
-
- if (child->prop_dels)
- {
- int i;
- for (i = 0; i < child->prop_dels->nelts; i++)
- {
- const char *prop_name;
-
- svn_pool_clear(iterpool);
- prop_name = APR_ARRAY_IDX(child->prop_dels, i, const char *);
- if (child->kind == svn_node_dir)
- SVN_ERR(editor->change_dir_prop(baton, prop_name,
- NULL, iterpool));
- else
- SVN_ERR(editor->change_file_prop(baton, prop_name,
- NULL, iterpool));
- }
- }
- if (apr_hash_count(child->prop_mods))
- {
- apr_hash_index_t *hi;
- for (hi = apr_hash_first(pool, child->prop_mods);
- hi; hi = apr_hash_next(hi))
- {
- const char *propname = svn__apr_hash_index_key(hi);
- const svn_string_t *val = svn__apr_hash_index_val(hi);
-
- svn_pool_clear(iterpool);
- if (child->kind == svn_node_dir)
- SVN_ERR(editor->change_dir_prop(baton, propname, val, iterpool));
- else
- SVN_ERR(editor->change_file_prop(baton, propname, val, iterpool));
- }
- }
-
- svn_pool_destroy(iterpool);
- return SVN_NO_ERROR;
-}
-
-
-/* Drive EDITOR to affect the change represented by OPERATION. HEAD
- is the last-known youngest revision in the repository. */
-static svn_error_t *
-drive(struct operation *operation,
- svn_revnum_t head,
- const svn_delta_editor_t *editor,
- apr_pool_t *pool)
-{
- apr_pool_t *subpool = svn_pool_create(pool);
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(pool, operation->children);
- hi; hi = apr_hash_next(hi))
- {
- const char *key = svn__apr_hash_index_key(hi);
- struct operation *child = svn__apr_hash_index_val(hi);
- void *file_baton = NULL;
-
- svn_pool_clear(subpool);
-
- /* Deletes and replacements are simple -- delete something. */
- if (child->operation == OP_DELETE || child->operation == OP_REPLACE)
- {
- SVN_ERR(editor->delete_entry(key, head, operation->baton, subpool));
- }
- /* Opens could be for directories or files. */
- if (child->operation == OP_OPEN || child->operation == OP_PROPSET)
- {
- if (child->kind == svn_node_dir)
- {
- SVN_ERR(editor->open_directory(key, operation->baton, head,
- subpool, &child->baton));
- }
- else
- {
- SVN_ERR(editor->open_file(key, operation->baton, head,
- subpool, &file_baton));
- }
- }
- /* Adds and replacements could also be for directories or files. */
- if (child->operation == OP_ADD || child->operation == OP_REPLACE)
- {
- if (child->kind == svn_node_dir)
- {
- SVN_ERR(editor->add_directory(key, operation->baton,
- child->url, child->rev,
- subpool, &child->baton));
- }
- else
- {
- SVN_ERR(editor->add_file(key, operation->baton, child->url,
- child->rev, subpool, &file_baton));
- }
- }
- /* If there's a source file and an open file baton, we get to
- change textual contents. */
- if ((child->src_file) && (file_baton))
- {
- svn_txdelta_window_handler_t handler;
- void *handler_baton;
- svn_stream_t *contents;
-
- SVN_ERR(editor->apply_textdelta(file_baton, NULL, subpool,
- &handler, &handler_baton));
- if (strcmp(child->src_file, "-") != 0)
- {
- SVN_ERR(svn_stream_open_readonly(&contents, child->src_file,
- pool, pool));
- }
- else
- {
- SVN_ERR(svn_stream_for_stdin(&contents, pool));
- }
- SVN_ERR(svn_txdelta_send_stream(contents, handler,
- handler_baton, NULL, pool));
- }
- /* If we opened a file, we need to apply outstanding propmods,
- then close it. */
- if (file_baton)
- {
- if (child->kind == svn_node_file)
- {
- SVN_ERR(change_props(editor, file_baton, child, subpool));
- }
- SVN_ERR(editor->close_file(file_baton, NULL, subpool));
- }
- /* If we opened, added, or replaced a directory, we need to
- recurse, apply outstanding propmods, and then close it. */
- if ((child->kind == svn_node_dir)
- && child->operation != OP_DELETE)
- {
- SVN_ERR(change_props(editor, child->baton, child, subpool));
-
- SVN_ERR(drive(child, head, editor, subpool));
-
- SVN_ERR(editor->close_directory(child->baton, subpool));
- }
- }
- svn_pool_destroy(subpool);
- return SVN_NO_ERROR;
-}
-
-
-/* Find the operation associated with PATH, which is a single-path
- component representing a child of the path represented by
- OPERATION. If no such child operation exists, create a new one of
- type OP_OPEN. */
-static struct operation *
-get_operation(const char *path,
- struct operation *operation,
- apr_pool_t *pool)
-{
- struct operation *child = svn_hash_gets(operation->children, path);
- if (! child)
- {
- child = apr_pcalloc(pool, sizeof(*child));
- child->children = apr_hash_make(pool);
- child->operation = OP_OPEN;
- child->rev = SVN_INVALID_REVNUM;
- child->kind = svn_node_dir;
- child->prop_mods = apr_hash_make(pool);
- child->prop_dels = apr_array_make(pool, 1, sizeof(const char *));
- svn_hash_sets(operation->children, path, child);
- }
- return child;
-}
-
/* Return the portion of URL that is relative to ANCHOR (URI-decoded). */
static const char *
subtract_anchor(const char *anchor, const char *url, apr_pool_t *pool)
@@ -341,221 +106,6 @@ subtract_anchor(const char *anchor, cons
return svn_uri_skip_ancestor(anchor, url, pool);
}
-/* Add PATH to the operations tree rooted at OPERATION, creating any
- intermediate nodes that are required. Here's what's expected for
- each action type:
-
- ACTION URL REV SRC-FILE PROPNAME
- ------------ ----- ------- -------- --------
- ACTION_MKDIR NULL invalid NULL NULL
- ACTION_CP valid valid NULL NULL
- ACTION_PUT NULL invalid valid NULL
- ACTION_RM NULL invalid NULL NULL
- ACTION_PROPSET valid invalid NULL valid
- ACTION_PROPDEL valid invalid NULL valid
-
- Node type information is obtained for any copy source (to determine
- whether to create a file or directory) and for any deleted path (to
- ensure it exists since svn_delta_editor_t->delete_entry doesn't
- return an error on non-existent nodes). */
-static svn_error_t *
-build(action_code_t action,
- const char *path,
- const char *url,
- svn_revnum_t rev,
- const char *prop_name,
- const svn_string_t *prop_value,
- const char *src_file,
- svn_revnum_t head,
- const char *anchor,
- svn_ra_session_t *session,
- struct operation *operation,
- apr_pool_t *pool)
-{
- apr_array_header_t *path_bits = svn_path_decompose(path, pool);
- const char *path_so_far = "";
- const char *copy_src = NULL;
- svn_revnum_t copy_rev = SVN_INVALID_REVNUM;
- int i;
-
- /* Look for any previous operations we've recognized for PATH. If
- any of PATH's ancestors have not yet been traversed, we'll be
- creating OP_OPEN operations for them as we walk down PATH's path
- components. */
- for (i = 0; i < path_bits->nelts; ++i)
- {
- const char *path_bit = APR_ARRAY_IDX(path_bits, i, const char *);
- path_so_far = svn_relpath_join(path_so_far, path_bit, pool);
- operation = get_operation(path_so_far, operation, pool);
-
- /* If we cross a replace- or add-with-history, remember the
- source of those things in case we need to lookup the node kind
- of one of their children. And if this isn't such a copy,
- but we've already seen one in of our parent paths, we just need
- to extend that copy source path by our current path
- component. */
- if (operation->url
- && SVN_IS_VALID_REVNUM(operation->rev)
- && (operation->operation == OP_REPLACE
- || operation->operation == OP_ADD))
- {
- copy_src = subtract_anchor(anchor, operation->url, pool);
- copy_rev = operation->rev;
- }
- else if (copy_src)
- {
- copy_src = svn_relpath_join(copy_src, path_bit, pool);
- }
- }
-
- /* Handle property changes. */
- if (prop_name)
- {
- if (operation->operation == OP_DELETE)
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "cannot set properties on a location being"
- " deleted ('%s')", path);
- /* If we're not adding this thing ourselves, check for existence. */
- if (! ((operation->operation == OP_ADD) ||
- (operation->operation == OP_REPLACE)))
- {
- SVN_ERR(svn_ra_check_path(session,
- copy_src ? copy_src : path,
- copy_src ? copy_rev : head,
- &operation->kind, pool));
- if (operation->kind == svn_node_none)
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "propset: '%s' not found", path);
- else if ((operation->kind == svn_node_file)
- && (operation->operation == OP_OPEN))
- operation->operation = OP_PROPSET;
- }
- if (! prop_value)
- APR_ARRAY_PUSH(operation->prop_dels, const char *) = prop_name;
- else
- svn_hash_sets(operation->prop_mods, prop_name, prop_value);
- if (!operation->rev)
- operation->rev = rev;
- return SVN_NO_ERROR;
- }
-
- /* We won't fuss about multiple operations on the same path in the
- following cases:
-
- - the prior operation was, in fact, a no-op (open)
- - the prior operation was a propset placeholder
- - the prior operation was a deletion
-
- Note: while the operation structure certainly supports the
- ability to do a copy of a file followed by a put of new contents
- for the file, we don't let that happen (yet).
- */
- if (operation->operation != OP_OPEN
- && operation->operation != OP_PROPSET
- && operation->operation != OP_DELETE)
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "unsupported multiple operations on '%s'", path);
-
- /* For deletions, we validate that there's actually something to
- delete. If this is a deletion of the child of a copied
- directory, we need to remember to look in the copy source tree to
- verify that this thing actually exists. */
- if (action == ACTION_RM)
- {
- operation->operation = OP_DELETE;
- SVN_ERR(svn_ra_check_path(session,
- copy_src ? copy_src : path,
- copy_src ? copy_rev : head,
- &operation->kind, pool));
- if (operation->kind == svn_node_none)
- {
- if (copy_src && strcmp(path, copy_src))
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "'%s' (from '%s:%ld') not found",
- path, copy_src, copy_rev);
- else
- return svn_error_createf(SVN_ERR_BAD_URL, NULL, "'%s' not found",
- path);
- }
- }
- /* Handle copy operations (which can be adds or replacements). */
- else if (action == ACTION_CP)
- {
- if (rev > head)
- return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
- "Copy source revision cannot be younger "
- "than base revision");
- operation->operation =
- operation->operation == OP_DELETE ? OP_REPLACE : OP_ADD;
- if (operation->operation == OP_ADD)
- {
- /* There is a bug in the current version of mod_dav_svn
- which incorrectly replaces existing directories.
- Therefore we need to check if the target exists
- and raise an error here. */
- SVN_ERR(svn_ra_check_path(session,
- copy_src ? copy_src : path,
- copy_src ? copy_rev : head,
- &operation->kind, pool));
- if (operation->kind != svn_node_none)
- {
- if (copy_src && strcmp(path, copy_src))
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "'%s' (from '%s:%ld') already exists",
- path, copy_src, copy_rev);
- else
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "'%s' already exists", path);
- }
- }
- SVN_ERR(svn_ra_check_path(session, subtract_anchor(anchor, url, pool),
- rev, &operation->kind, pool));
- if (operation->kind == svn_node_none)
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "'%s' not found",
- subtract_anchor(anchor, url, pool));
- operation->url = url;
- operation->rev = rev;
- }
- /* Handle mkdir operations (which can be adds or replacements). */
- else if (action == ACTION_MKDIR)
- {
- operation->operation =
- operation->operation == OP_DELETE ? OP_REPLACE : OP_ADD;
- operation->kind = svn_node_dir;
- }
- /* Handle put operations (which can be adds, replacements, or opens). */
- else if (action == ACTION_PUT)
- {
- if (operation->operation == OP_DELETE)
- {
- operation->operation = OP_REPLACE;
- }
- else
- {
- SVN_ERR(svn_ra_check_path(session,
- copy_src ? copy_src : path,
- copy_src ? copy_rev : head,
- &operation->kind, pool));
- if (operation->kind == svn_node_file)
- operation->operation = OP_OPEN;
- else if (operation->kind == svn_node_none)
- operation->operation = OP_ADD;
- else
- return svn_error_createf(SVN_ERR_BAD_URL, NULL,
- "'%s' is not a file", path);
- }
- operation->kind = svn_node_file;
- operation->src_file = src_file;
- }
- else
- {
- /* We shouldn't get here. */
- SVN_ERR_MALFUNCTION();
- }
-
- return SVN_NO_ERROR;
-}
struct action {
action_code_t action;
@@ -579,274 +129,89 @@ struct action {
const svn_string_t *prop_value;
};
-struct fetch_baton
-{
- svn_ra_session_t *session;
- svn_revnum_t head;
-};
-
-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)
-{
- struct fetch_baton *fb = baton;
- svn_stream_t *fstream;
- svn_error_t *err;
-
- if (! SVN_IS_VALID_REVNUM(base_revision))
- base_revision = fb->head;
-
- SVN_ERR(svn_stream_open_unique(&fstream, filename, NULL,
- svn_io_file_del_on_pool_cleanup,
- result_pool, scratch_pool));
-
- err = svn_ra_get_file(fb->session, path, base_revision, fstream, NULL, NULL,
- scratch_pool);
- if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND)
- {
- svn_error_clear(err);
- SVN_ERR(svn_stream_close(fstream));
-
- *filename = NULL;
- return SVN_NO_ERROR;
- }
- else if (err)
- return svn_error_trace(err);
-
- SVN_ERR(svn_stream_close(fstream));
-
- return SVN_NO_ERROR;
-}
-
-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)
-{
- struct fetch_baton *fb = baton;
- svn_node_kind_t node_kind;
-
- if (! SVN_IS_VALID_REVNUM(base_revision))
- base_revision = fb->head;
-
- SVN_ERR(svn_ra_check_path(fb->session, path, base_revision, &node_kind,
- scratch_pool));
-
- if (node_kind == svn_node_file)
- {
- SVN_ERR(svn_ra_get_file(fb->session, path, base_revision, NULL, NULL,
- props, result_pool));
- }
- else if (node_kind == svn_node_dir)
- {
- apr_array_header_t *tmp_props;
-
- SVN_ERR(svn_ra_get_dir2(fb->session, NULL, NULL, props, path,
- base_revision, 0 /* Dirent fields */,
- result_pool));
- tmp_props = svn_prop_hash_to_array(*props, result_pool);
- SVN_ERR(svn_categorize_props(tmp_props, NULL, NULL, &tmp_props,
- result_pool));
- *props = svn_prop_array_to_hash(tmp_props, result_pool);
- }
- else
- {
- *props = apr_hash_make(result_pool);
- }
-
- return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-fetch_kind_func(svn_node_kind_t *kind,
- void *baton,
- const char *path,
- svn_revnum_t base_revision,
- apr_pool_t *scratch_pool)
-{
- struct fetch_baton *fb = baton;
-
- if (! SVN_IS_VALID_REVNUM(base_revision))
- base_revision = fb->head;
-
- SVN_ERR(svn_ra_check_path(fb->session, path, base_revision, kind,
- scratch_pool));
-
- return SVN_NO_ERROR;
-}
-
-static svn_delta_shim_callbacks_t *
-get_shim_callbacks(svn_ra_session_t *session,
- svn_revnum_t head,
- apr_pool_t *result_pool)
-{
- svn_delta_shim_callbacks_t *callbacks =
- svn_delta_shim_callbacks_default(result_pool);
- struct fetch_baton *fb = apr_pcalloc(result_pool, sizeof(*fb));
-
- fb->session = session;
- fb->head = head;
-
- callbacks->fetch_props_func = fetch_props_func;
- callbacks->fetch_kind_func = fetch_kind_func;
- callbacks->fetch_base_func = fetch_base_func;
- callbacks->fetch_baton = fb;
-
- return callbacks;
-}
-
static svn_error_t *
execute(const apr_array_header_t *actions,
const char *anchor,
apr_hash_t *revprops,
- const char *username,
- const char *password,
- const char *config_dir,
- const apr_array_header_t *config_options,
- svn_boolean_t non_interactive,
- svn_boolean_t trust_server_cert,
- svn_boolean_t no_auth_cache,
svn_revnum_t base_revision,
+ svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_ra_session_t *session;
- svn_ra_session_t *aux_session;
- const char *repos_root;
- svn_revnum_t head;
- const svn_delta_editor_t *editor;
- svn_ra_callbacks2_t *ra_callbacks;
- void *editor_baton;
- struct operation root;
+ svn_client_mtcc_t *mtcc;
+ apr_pool_t *iterpool = svn_pool_create(pool);
svn_error_t *err;
- apr_hash_t *config;
- svn_config_t *cfg_config;
int i;
- SVN_ERR(svn_config_get_config(&config, config_dir, pool));
- SVN_ERR(svn_cmdline__apply_config_options(config, config_options,
- "svnmucc: ", "--config-option"));
- cfg_config = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
-
- if (! svn_hash_gets(revprops, SVN_PROP_REVISION_LOG))
- {
- svn_string_t *msg = svn_string_create("", pool);
-
- /* If we can do so, try to pop up $EDITOR to fetch a log message. */
- if (non_interactive)
- {
- return svn_error_create
- (SVN_ERR_CL_INSUFFICIENT_ARGS, NULL,
- _("Cannot invoke editor to get log message "
- "when non-interactive"));
- }
- else
- {
- SVN_ERR(svn_cmdline__edit_string_externally(
- &msg, NULL, NULL, "", msg, "svnmucc-commit", config,
- TRUE, NULL, apr_hash_pool_get(revprops)));
- }
-
- svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, msg);
- }
-
- SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password, config_dir,
- cfg_config, non_interactive, trust_server_cert,
- no_auth_cache, pool));
- SVN_ERR(svn_ra_open4(&session, NULL, anchor, NULL, ra_callbacks,
- NULL, config, pool));
- /* Open, then reparent to avoid AUTHZ errors when opening the reposroot */
- SVN_ERR(svn_ra_open4(&aux_session, NULL, anchor, NULL, ra_callbacks,
- NULL, config, pool));
- SVN_ERR(svn_ra_get_repos_root2(aux_session, &repos_root, pool));
- SVN_ERR(svn_ra_reparent(aux_session, repos_root, pool));
- SVN_ERR(svn_ra_get_latest_revnum(session, &head, pool));
-
- /* Reparent to ANCHOR's dir, if ANCHOR is not a directory. */
- {
- svn_node_kind_t kind;
-
- SVN_ERR(svn_ra_check_path(aux_session,
- svn_uri_skip_ancestor(repos_root, anchor, pool),
- head, &kind, pool));
- if (kind != svn_node_dir)
- {
- anchor = svn_uri_dirname(anchor, pool);
- SVN_ERR(svn_ra_reparent(session, anchor, pool));
- }
- }
-
- if (SVN_IS_VALID_REVNUM(base_revision))
- {
- if (base_revision > head)
- return svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, NULL,
- "No such revision %ld (youngest is %ld)",
- base_revision, head);
- head = base_revision;
- }
-
- memset(&root, 0, sizeof(root));
- root.children = apr_hash_make(pool);
- root.operation = OP_OPEN;
- root.kind = svn_node_dir; /* For setting properties */
- root.prop_mods = apr_hash_make(pool);
- root.prop_dels = apr_array_make(pool, 1, sizeof(const char *));
+ SVN_ERR(svn_client_mtcc_create(&mtcc, anchor,
+ SVN_IS_VALID_REVNUM(base_revision)
+ ? base_revision
+ : SVN_INVALID_REVNUM,
+ ctx, pool, iterpool));
for (i = 0; i < actions->nelts; ++i)
{
struct action *action = APR_ARRAY_IDX(actions, i, struct action *);
const char *path1, *path2;
+ svn_node_kind_t kind;
+
+ svn_pool_clear(iterpool);
+
switch (action->action)
{
case ACTION_MV:
path1 = subtract_anchor(anchor, action->path[0], pool);
path2 = subtract_anchor(anchor, action->path[1], pool);
- SVN_ERR(build(ACTION_RM, path1, NULL,
- SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
- session, &root, pool));
- SVN_ERR(build(ACTION_CP, path2, action->path[0],
- head, NULL, NULL, NULL, head, anchor,
- session, &root, pool));
+ SVN_ERR(svn_client_mtcc_add_move(path1, path2, mtcc, iterpool));
break;
case ACTION_CP:
+ path1 = subtract_anchor(anchor, action->path[0], pool);
path2 = subtract_anchor(anchor, action->path[1], pool);
- if (action->rev == SVN_INVALID_REVNUM)
- action->rev = head;
- SVN_ERR(build(ACTION_CP, path2, action->path[0],
- action->rev, NULL, NULL, NULL, head, anchor,
- session, &root, pool));
+ SVN_ERR(svn_client_mtcc_add_copy(path1, action->rev, path2,
+ mtcc, iterpool));
break;
case ACTION_RM:
path1 = subtract_anchor(anchor, action->path[0], pool);
- SVN_ERR(build(ACTION_RM, path1, NULL,
- SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
- session, &root, pool));
+ SVN_ERR(svn_client_mtcc_add_delete(path1, mtcc, iterpool));
break;
case ACTION_MKDIR:
path1 = subtract_anchor(anchor, action->path[0], pool);
- SVN_ERR(build(ACTION_MKDIR, path1, action->path[0],
- SVN_INVALID_REVNUM, NULL, NULL, NULL, head, anchor,
- session, &root, pool));
+ SVN_ERR(svn_client_mtcc_add_mkdir(path1, mtcc, iterpool));
break;
case ACTION_PUT:
path1 = subtract_anchor(anchor, action->path[0], pool);
- SVN_ERR(build(ACTION_PUT, path1, action->path[0],
- SVN_INVALID_REVNUM, NULL, NULL, action->path[1],
- head, anchor, session, &root, pool));
+ SVN_ERR(svn_client_mtcc_check_path(&kind, path1, TRUE, mtcc, pool));
+
+ if (kind == svn_node_dir)
+ {
+ SVN_ERR(svn_client_mtcc_add_delete(path1, mtcc, pool));
+ kind = svn_node_none;
+ }
+
+ {
+ svn_stream_t *src;
+
+ if (strcmp(action->path[1], "-") != 0)
+ SVN_ERR(svn_stream_open_readonly(&src, action->path[1],
+ pool, iterpool));
+ else
+ SVN_ERR(svn_stream_for_stdin(&src, pool));
+
+
+ if (kind == svn_node_file)
+ SVN_ERR(svn_client_mtcc_add_update_file(path1, src, NULL,
+ NULL, NULL,
+ mtcc, iterpool));
+ else if (kind == svn_node_none)
+ SVN_ERR(svn_client_mtcc_add_add_file(path1, src, NULL,
+ mtcc, iterpool));
+ }
break;
case ACTION_PROPSET:
case ACTION_PROPDEL:
path1 = subtract_anchor(anchor, action->path[0], pool);
- SVN_ERR(build(action->action, path1, action->path[0],
- SVN_INVALID_REVNUM,
- action->prop_name, action->prop_value,
- NULL, head, anchor, session, &root, pool));
+ SVN_ERR(svn_client_mtcc_add_propset(path1, action->prop_name,
+ action->prop_value, FALSE,
+ mtcc, iterpool));
break;
case ACTION_PROPSETF:
default:
@@ -854,25 +219,11 @@ execute(const apr_array_header_t *action
}
}
- SVN_ERR(svn_ra__register_editor_shim_callbacks(session,
- get_shim_callbacks(aux_session, head, pool)));
- SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &editor_baton, revprops,
- commit_callback, NULL, NULL, FALSE, pool));
-
- SVN_ERR(editor->open_root(editor_baton, head, pool, &root.baton));
- err = change_props(editor, root.baton, &root, pool);
- if (!err)
- err = drive(&root, head, editor, pool);
- if (!err)
- err = editor->close_directory(root.baton, pool);
- if (!err)
- err = editor->close_edit(editor_baton, pool);
-
- if (err)
- err = svn_error_compose_create(err,
- editor->abort_edit(editor_baton, pool));
+ err = svn_client_mtcc_commit(revprops, commit_callback, NULL,
+ mtcc, iterpool);
- return err;
+ svn_pool_destroy(iterpool);
+ return svn_error_trace(err);;
}
static svn_error_t *
@@ -985,42 +336,100 @@ mutually_exclusive_logs_error(void)
"exclusive"));
}
-/* Ensure that the REVPROPS hash contains a command-line-provided log
- message, if any, and that there was but one source of such a thing
- provided on that command-line. */
+/* Obtain the log message from multiple sources, producing an error
+ if there are multiple sources. Store the result in *FINAL_MESSAGE. */
static svn_error_t *
-sanitize_log_sources(apr_hash_t *revprops,
+sanitize_log_sources(const char **final_message,
const char *message,
- svn_stringbuf_t *filedata)
+ apr_hash_t *revprops,
+ svn_stringbuf_t *filedata,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_pool_t *hash_pool = apr_hash_pool_get(revprops);
+ svn_string_t *msg;
+ *final_message = NULL;
/* If we already have a log message in the revprop hash, then just
make sure the user didn't try to also use -m or -F. Otherwise,
we need to consult -m or -F to find a log message, if any. */
- if (svn_hash_gets(revprops, SVN_PROP_REVISION_LOG))
+ msg = svn_hash_gets(revprops, SVN_PROP_REVISION_LOG);
+ if (msg)
{
if (filedata || message)
return mutually_exclusive_logs_error();
+
+ *final_message = apr_pstrdup(result_pool, msg->data);
+
+ /* Will be re-added by libsvn_client */
+ svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, NULL);
}
else if (filedata)
{
if (message)
return mutually_exclusive_logs_error();
- SVN_ERR(svn_utf_cstring_to_utf8(&message, filedata->data, hash_pool));
- svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
- svn_stringbuf__morph_into_string(filedata));
+ SVN_ERR(svn_utf_cstring_to_utf8(&message, filedata->data,
+ scratch_pool));
+
+ *final_message = apr_pstrdup(result_pool, message);
}
else if (message)
{
- svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
- svn_string_create(message, hash_pool));
+ *final_message = apr_pstrdup(result_pool, message);
}
return SVN_NO_ERROR;
}
+/* Baton for log_message_func */
+struct log_message_baton
+{
+ svn_boolean_t non_interactive;
+ const char *log_message;
+ svn_client_ctx_t *ctx;
+};
+
+/* Implements svn_client_get_commit_log3_t */
+static svn_error_t *
+log_message_func(const char **log_msg,
+ const char **tmp_file,
+ const apr_array_header_t *commit_items,
+ void *baton,
+ apr_pool_t *pool)
+{
+ struct log_message_baton *lmb = baton;
+
+ *tmp_file = NULL;
+
+ if (lmb->log_message)
+ {
+ *log_msg = apr_pstrdup(pool, lmb->log_message);
+ return SVN_NO_ERROR;
+ }
+
+ if (lmb->non_interactive)
+ {
+ return svn_error_create(SVN_ERR_CL_INSUFFICIENT_ARGS, NULL,
+ _("Cannot invoke editor to get log message "
+ "when non-interactive"));
+ }
+ else
+ {
+ svn_string_t *msg = svn_string_create("", pool);
+
+ SVN_ERR(svn_cmdline__edit_string_externally(
+ &msg, NULL, NULL, "", msg, "svnmucc-commit",
+ lmb->ctx->config, TRUE, NULL, pool));
+
+ if (msg && msg->data)
+ *log_msg = msg->data;
+ else
+ *log_msg = NULL;
+
+ return SVN_NO_ERROR;
+ }
+}
+
/*
* On success, leave *EXIT_CODE untouched and return SVN_NO_ERROR. On error,
* either return an error to be displayed, or set *EXIT_CODE to non-zero and
@@ -1077,6 +486,10 @@ sub_main(int *exit_code, int argc, const
svn_revnum_t base_revision = SVN_INVALID_REVNUM;
apr_array_header_t *action_args;
apr_hash_t *revprops = apr_hash_make(pool);
+ apr_hash_t *cfg_hash;
+ svn_config_t *cfg_config;
+ svn_client_ctx_t *ctx;
+ struct log_message_baton lmb;
int i;
/* Check library versions */
@@ -1191,9 +604,6 @@ sub_main(int *exit_code, int argc, const
"--non-interactive"));
}
- /* Make sure we have a log message to use. */
- SVN_ERR(sanitize_log_sources(revprops, message, filedata));
-
/* Copy the rest of our command-line arguments to an array,
UTF-8-ing them along the way. */
action_args = apr_array_make(pool, opts->argc, sizeof(const char *));
@@ -1220,6 +630,55 @@ sub_main(int *exit_code, int argc, const
FALSE, pool);
}
+ /* Now initialize the client context */
+
+ err = svn_config_get_config(&cfg_hash, config_dir, pool);
+ if (err)
+ {
+ /* Fallback to default config if the config directory isn't readable
+ or is not a directory. */
+ if (APR_STATUS_IS_EACCES(err->apr_err)
+ || SVN__APR_STATUS_IS_ENOTDIR(err->apr_err))
+ {
+ svn_handle_warning2(stderr, err, "svnmucc: ");
+ svn_error_clear(err);
+ cfg_hash = NULL;
+ }
+ else
+ return err;
+ }
+
+ cfg_config = svn_hash_gets(cfg_hash, SVN_CONFIG_CATEGORY_CONFIG);
+ if (config_options)
+ {
+ svn_error_clear(
+ svn_cmdline__apply_config_options(cfg_hash, config_options,
+ "svnmucc: ", "--config-option"));
+ }
+
+ SVN_ERR(svn_client_create_context2(&ctx, cfg_hash, pool));
+
+ SVN_ERR(svn_cmdline_create_auth_baton(&ctx->auth_baton,
+ non_interactive,
+ username,
+ password,
+ config_dir,
+ no_auth_cache,
+ trust_server_cert,
+ cfg_config,
+ ctx->cancel_func,
+ ctx->cancel_baton,
+ pool));
+
+ lmb.non_interactive = non_interactive;
+ lmb.ctx = ctx;
+ /* Make sure we have a log message to use. */
+ SVN_ERR(sanitize_log_sources(&lmb.log_message, message, revprops, filedata,
+ pool, pool));
+
+ ctx->log_msg_func3 = log_message_func;
+ ctx->log_msg_baton3 = &lmb;
+
/* Now, we iterate over the combined set of arguments -- our actions. */
for (i = 0; i < action_args->nelts; )
{
@@ -1401,6 +860,7 @@ sub_main(int *exit_code, int argc, const
if ((++i == action_args->nelts) && (j + 1 < num_url_args))
return insufficient();
}
+
APR_ARRAY_PUSH(actions, struct action *) = action;
}
@@ -1411,9 +871,7 @@ sub_main(int *exit_code, int argc, const
return SVN_NO_ERROR;
}
- if ((err = execute(actions, anchor, revprops, username, password,
- config_dir, config_options, non_interactive,
- trust_server_cert, no_auth_cache, base_revision, pool)))
+ if ((err = execute(actions, anchor, revprops, base_revision, ctx, pool)))
{
if (err->apr_err == SVN_ERR_AUTHN_FAILED && non_interactive)
err = svn_error_quick_wrap(err,
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnserve/logger.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnserve/logger.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnserve/logger.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnserve/logger.c Thu Jan 9 09:31:10 2014
@@ -149,8 +149,7 @@ logger__log_error(logger_t *logger,
if (len > sizeof(errstr) - sizeof(APR_EOL_STR)) {
len = sizeof(errstr) - sizeof(APR_EOL_STR);
}
- strcpy(errstr + len, APR_EOL_STR);
- len += strlen(APR_EOL_STR);
+ memcpy(errstr + len, APR_EOL_STR, sizeof(APR_EOL_STR));
svn_error_clear(svn_stream_write(logger->stream, errstr, &len));
continuation = "-";
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c Thu Jan 9 09:31:10 2014
@@ -3886,7 +3886,7 @@ serve_interruptable(svn_boolean_t *termi
connection->params->compression_level,
connection->params->zero_copy_limit,
connection->params->error_check_interval,
- pool);
+ connection->pool);
/* Construct server baton and open the repository for the first time. */
SVN_ERR(construct_server_baton(&connection->baton, connection->conn,
Modified: subversion/branches/fsfs-ucsnorm/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnsync/svnsync.c?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnsync/svnsync.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnsync/svnsync.c Thu Jan 9 09:31:10 2014
@@ -965,14 +965,18 @@ open_target_session(svn_ra_session_t **t
typedef struct replay_baton_t {
svn_ra_session_t *from_session;
svn_ra_session_t *to_session;
- /* Extra 'backdoor' session for fetching data *from* the target repo. */
- svn_ra_session_t *extra_to_session;
svn_revnum_t current_revision;
subcommand_baton_t *sb;
svn_boolean_t has_commit_revprops_capability;
+ svn_boolean_t has_atomic_revprops_capability;
int normalized_rev_props_count;
int normalized_node_props_count;
const char *to_root;
+
+#ifdef ENABLE_EV2_SHIMS
+ /* Extra 'backdoor' session for fetching data *from* the target repo. */
+ svn_ra_session_t *extra_to_session;
+#endif
} replay_baton_t;
/* Return a replay baton allocated from POOL and populated with
@@ -1049,7 +1053,7 @@ filter_include_log(const char *key)
return ! filter_exclude_log(key);
}
-
+#ifdef ENABLE_EV2_SHIMS
static svn_error_t *
fetch_base_func(const char **filename,
void *baton,
@@ -1177,6 +1181,7 @@ get_shim_callbacks(replay_baton_t *rb,
return callbacks;
}
+#endif
/* Callback function for svn_ra_replay_range, invoked when starting to parse
@@ -1245,8 +1250,10 @@ replay_rev_started(svn_revnum_t revision
rb->sb->source_prop_encoding, pool));
rb->normalized_rev_props_count += normalized_count;
+#ifdef ENABLE_EV2_SHIMS
SVN_ERR(svn_ra__register_editor_shim_callbacks(rb->to_session,
get_shim_callbacks(rb, pool)));
+#endif
SVN_ERR(svn_ra_get_commit_editor3(rb->to_session, &commit_editor,
&commit_baton,
filtered,
@@ -1289,6 +1296,7 @@ replay_rev_finished(svn_revnum_t revisio
apr_hash_t *filtered, *existing_props;
int filtered_count;
int normalized_count;
+ const svn_string_t *rev_str;
SVN_ERR(editor->close_edit(edit_baton, pool));
@@ -1328,21 +1336,24 @@ replay_rev_finished(svn_revnum_t revisio
svn_pool_clear(subpool);
+ rev_str = svn_string_create(apr_psprintf(pool, "%ld", revision), subpool);
+
/* Ok, we're done, bring the last-merged-rev property up to date. */
SVN_ERR(svn_ra_change_rev_prop2(
rb->to_session,
0,
SVNSYNC_PROP_LAST_MERGED_REV,
NULL,
- svn_string_create(apr_psprintf(pool, "%ld", revision),
- subpool),
+ rev_str,
subpool));
/* And finally drop the currently copying prop, since we're done
with this revision. */
SVN_ERR(svn_ra_change_rev_prop2(rb->to_session, 0,
SVNSYNC_PROP_CURRENTLY_COPYING,
- NULL, NULL, subpool));
+ rb->has_atomic_revprops_capability
+ ? &rev_str : NULL,
+ NULL, subpool));
/* Notify the user that we copied revision properties. */
if (! rb->sb->quiet)
@@ -1472,6 +1483,11 @@ do_synchronize(svn_ra_session_t *to_sess
SVN_RA_CAPABILITY_COMMIT_REVPROPS,
pool));
+ SVN_ERR(svn_ra_has_capability(rb->to_session,
+ &rb->has_atomic_revprops_capability,
+ SVN_RA_CAPABILITY_ATOMIC_REVPROPS,
+ pool));
+
start_revision = last_merged + 1;
end_revision = from_latest;
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/README
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/README?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/README (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/README Thu Jan 9 09:31:10 2014
@@ -151,7 +151,13 @@ it will run just one suite or just one t
$ ./davautocheck.sh basic
$ ./davautocheck.sh basic 15
-It also respects some environment variables.
+With '--no-tests' argument, it will start httpd but not run any tests. This is
+useful for manual testing --- create repositories in
+./svn-test-work/repositories/<$repo> and they will be accessible at
+<URL>/svn-test-work/repositories/<$repo>. You can also run individual tests by passing the --url option to them, as described above.
+
+davautocheck.sh also respects some environment variables; see the comments at
+the top of the script for details.
Running over ra_svn
-------------------
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py Thu Jan 9 09:31:10 2014
@@ -169,7 +169,7 @@ def authz_read_access(sbox):
fws_empty_folder_url = fws_url + '/empty folder'
if sbox.repo_url.startswith("http"):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -291,7 +291,7 @@ def authz_write_access(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
if sbox.repo_url.startswith('http'):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E220004: Access denied.*"
@@ -387,7 +387,7 @@ def authz_checkout_test(sbox):
# write an authz file with *= on /
if sbox.repo_url.startswith('http'):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -524,7 +524,7 @@ def authz_log_and_tracing_test(sbox):
# write an authz file with *=rw on /
if sbox.repo_url.startswith('http'):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -555,7 +555,7 @@ def authz_log_and_tracing_test(sbox):
# now disable read access on the first version of rho, keep the copy in
# /A/D readable.
if sbox.repo_url.startswith('http'):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -576,8 +576,8 @@ def authz_log_and_tracing_test(sbox):
if sbox.repo_url.startswith('http'):
expected_err2 = expected_err
else:
- expected_err2 = ".*svn: E220001: Unreadable path encountered; " \
- "access denied.*"
+ expected_err2 = ".*svn: E220001: ((Unreadable path encountered; " \
+ "access denied)|(Item is not readable)).*"
# if we do the same thing directly on the unreadable file, we get:
# svn: Item is not readable
@@ -644,7 +644,7 @@ def authz_aliases(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
if sbox.repo_url.startswith("http"):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -691,7 +691,7 @@ def authz_validate(sbox):
"/A/B" : "@undefined_group = rw" })
if sbox.repo_url.startswith("http"):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
elif sbox.repo_url.startswith("svn"):
expected_err = ".*Invalid authz configuration"
else:
@@ -711,7 +711,7 @@ devs2 = @admins, dev2
devs = @devs1, dev3, dev4""" })
if sbox.repo_url.startswith("http"):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
elif sbox.repo_url.startswith("svn"):
expected_err = ".*Invalid authz configuration"
else:
@@ -751,7 +751,7 @@ def authz_locking(sbox):
write_restrictive_svnserve_conf(sbox.repo_dir)
if sbox.repo_url.startswith('http'):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -980,7 +980,7 @@ def multiple_matches(sbox):
root_url = sbox.repo_url
write_restrictive_svnserve_conf(sbox.repo_dir)
if sbox.repo_url.startswith("http"):
- expected_err = ".*[Ff]orbidden.*"
+ expected_err = ".*svn: E175013: .*[Ff]orbidden.*"
else:
expected_err = ".*svn: E170001: Authorization failed.*"
@@ -1281,7 +1281,7 @@ def wc_commit_error_handling(sbox):
write_authz_file(sbox, {'/' : '* = r', })
# Creating editor fail: unfriendly error
- expected_err = "(svn: E175013: .*orbidden.*)|" + \
+ expected_err = "(svn: E175013: .*[Ff]orbidden.*)|" + \
"(svn: E170001: Authorization failed)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1315,7 +1315,7 @@ def wc_commit_error_handling(sbox):
# Allow a generic dav error and the ra_svn specific one that is returned
# on editor->edit_close().
- expected_err = "(svn: E175013: .*orbidden.*)|" + \
+ expected_err = "(svn: E175013: .*[Ff]orbidden.*)|" + \
"(svn: E220004: Access denied)"
svntest.actions.run_and_verify_svn(None, None, expected_err,
'ci', wc_dir, '-m', '')
@@ -1532,7 +1532,6 @@ def authz_del_from_subdir(sbox):
'-m', '')
-@XFail()
@SkipUnless(svntest.main.is_ra_type_dav) # dontdothat is dav only
@SkipUnless(svntest.main.is_os_windows) # until the buildbots are configured
def log_diff_dontdothat(sbox):
@@ -1547,7 +1546,8 @@ def log_diff_dontdothat(sbox):
# We should expect a PASS or a proper error message instead of
# svn: E175009: XML parsing failed: (403 Forbidden)
- svntest.actions.run_and_verify_svn(None, None, [],
+ expected_err = ".*E175013: Access to '.*authz_tests-28.*' forbidden"
+ svntest.actions.run_and_verify_svn(None, None, expected_err,
'log', ddt_url,
'-c', 1, '--diff')
Modified: subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/basic_tests.py?rev=1556765&r1=1556764&r2=1556765&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/basic_tests.py Thu Jan 9 09:31:10 2014
@@ -1501,7 +1501,7 @@ def nonexistent_repository(sbox):
'log', 'file:///nonexistent_path')
for line in errput:
- if re.match(".*Unable to open an ra_local session to URL.*", line):
+ if re.match(".*Unable to connect to a repository at URL.*", line):
return
# Else never matched the expected error output, so the test failed.