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 2015/01/28 00:27:46 UTC
svn commit: r1655189 [5/9] - in /subversion/branches/svn-auth-x509: ./
build/ build/generator/ subversion/bindings/javahl/native/
subversion/include/ subversion/include/private/ subversion/libsvn_client/
subversion/libsvn_fs_base/ subversion/libsvn_fs_...
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocations.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocations.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocations.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocations.c Tue Jan 27 23:27:44 2015
@@ -114,7 +114,8 @@ static svn_error_t *
create_get_locations_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
serf_bucket_t *buckets;
loc_context_t *loc_ctx = baton;
@@ -175,23 +176,20 @@ svn_ra_serf__get_locations(svn_ra_sessio
*locations = loc_ctx->paths;
SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
- session, NULL /* conn */,
- NULL /* url */, peg_revision,
+ session, NULL /* url */, peg_revision,
pool, pool));
xmlctx = svn_ra_serf__xml_context_create(getloc_ttable,
NULL, getloc_closed, NULL,
loc_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "REPORT";
handler->path = req_url;
handler->body_delegate = create_get_locations_body;
handler->body_delegate_baton = loc_ctx;
handler->body_type = "text/xml";
- handler->conn = session->conns[0];
- handler->session = session;
SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocationsegments.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocationsegments.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocationsegments.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocationsegments.c Tue Jan 27 23:27:44 2015
@@ -114,7 +114,8 @@ static svn_error_t *
create_gls_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
serf_bucket_t *buckets;
gls_context_t *gls_ctx = baton;
@@ -178,23 +179,20 @@ svn_ra_serf__get_location_segments(svn_r
gls_ctx->receiver_baton = receiver_baton;
SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
- session, NULL /* conn */,
- NULL /* url */, peg_revision,
+ session, NULL /* url */, peg_revision,
pool, pool));
xmlctx = svn_ra_serf__xml_context_create(gls_ttable,
NULL, gls_closed, NULL,
gls_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "REPORT";
handler->path = req_url;
handler->body_delegate = create_gls_body;
handler->body_delegate_baton = gls_ctx;
handler->body_type = "text/xml";
- handler->conn = session->conns[0];
- handler->session = session;
err = svn_ra_serf__context_run_one(handler, pool);
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocks.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocks.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocks.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/getlocks.c Tue Jan 27 23:27:44 2015
@@ -213,7 +213,8 @@ static svn_error_t *
create_getlocks_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
lock_context_t *lock_ctx = baton;
serf_bucket_t *buckets;
@@ -244,8 +245,7 @@ svn_ra_serf__get_locks(svn_ra_session_t
svn_error_t *err;
req_url = svn_path_url_add_component2(session->session_url.path, path, pool);
- SVN_ERR(svn_ra_serf__get_relative_path(&rel_path, req_url, session,
- NULL, pool));
+ SVN_ERR(svn_ra_serf__get_relative_path(&rel_path, req_url, session, pool));
lock_ctx = apr_pcalloc(pool, sizeof(*lock_ctx));
lock_ctx->pool = pool;
@@ -257,13 +257,11 @@ svn_ra_serf__get_locks(svn_ra_session_t
NULL, getlocks_closed, NULL,
lock_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "REPORT";
handler->path = req_url;
handler->body_type = "text/xml";
- handler->conn = session->conns[0];
- handler->session = session;
handler->body_delegate = create_getlocks_body;
handler->body_delegate_baton = lock_ctx;
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/inherited_props.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/inherited_props.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/inherited_props.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/inherited_props.c Tue Jan 27 23:27:44 2015
@@ -199,7 +199,8 @@ static svn_error_t *
create_iprops_body(serf_bucket_t **bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
iprops_context_t *iprops_ctx = baton;
serf_bucket_t *body_bkt;
@@ -231,21 +232,6 @@ typedef struct iprop_rq_info_t
svn_ra_serf__handler_t *handler;
} iprop_rq_info_t;
-/* Removes all non regular properties from PROPS */
-static void
-keep_only_regular_props(apr_hash_t *props,
- apr_pool_t *scratch_pool)
-{
- apr_hash_index_t *hi;
-
- for (hi = apr_hash_first(scratch_pool, props); hi; hi = apr_hash_next(hi))
- {
- const char *propname = apr_hash_this_key(hi);
-
- if (svn_property_kind2(propname) != svn_prop_regular_kind)
- svn_hash_sets(props, propname, NULL);
- }
-}
/* Assumes session reparented to the repository root. The old session
root is passed as session_url */
@@ -287,17 +273,19 @@ get_iprops_via_more_requests(svn_ra_sess
rq->props = apr_hash_make(scratch_pool);
SVN_ERR(svn_ra_serf__get_stable_url(&rq->urlpath, NULL, session,
- session->conns[0],
svn_path_url_add_component2(
session->repos_root.path,
relpath, scratch_pool),
revision,
scratch_pool, scratch_pool));
- SVN_ERR(svn_ra_serf__deliver_props(&rq->handler, rq->props, session,
- session->conns[0], rq->urlpath,
- rev_marker, "0", all_props,
- scratch_pool));
+ SVN_ERR(svn_ra_serf__create_propfind_handler(
+ &rq->handler, session,
+ rq->urlpath,
+ rev_marker, "0", all_props,
+ svn_ra_serf__deliver_svn_props,
+ rq->props,
+ scratch_pool));
/* Allow ignoring authz problems */
rq->handler->no_fail_on_http_failure_status = TRUE;
@@ -335,29 +323,18 @@ get_iprops_via_more_requests(svn_ra_sess
apr_hash_t *node_props;
svn_prop_inherited_item_t *new_iprop;
- if (rq->handler->sline.code >= 400 && rq->handler->sline.code != 403)
+ if (rq->handler->sline.code != 207 && rq->handler->sline.code != 403)
{
- return svn_error_trace(
- svn_ra_serf__error_on_status(rq->handler->sline,
- rq->handler->path,
- rq->handler->location));
- }
+ if (rq->handler->server_error)
+ SVN_ERR(svn_ra_serf__server_error_create(rq->handler,
+ scratch_pool));
- /* Obtain the real properties from the double hash */
- node_props = apr_hash_get(rq->props, &rev_marker, sizeof(rev_marker));
-
- if (!node_props)
- continue;
-
- node_props = svn_hash_gets(node_props, rq->urlpath);
-
- if (!node_props)
- continue;
+ return svn_error_trace(svn_ra_serf__unexpected_status(rq->handler));
+ }
- SVN_ERR(svn_ra_serf__flatten_props(&node_props, node_props,
- scratch_pool, scratch_pool));
+ node_props = rq->props;
- keep_only_regular_props(node_props, scratch_pool);
+ svn_ra_serf__keep_only_regular_props(node_props, scratch_pool);
if (!apr_hash_count(node_props))
continue;
@@ -410,7 +387,6 @@ svn_ra_serf__get_inherited_props(svn_ra_
scratch_pool));
}
- /* For now, use implementation in libsvn_ra */
err = get_iprops_via_more_requests(ra_session, iprops, session_uri, path,
revision, result_pool, scratch_pool);
@@ -426,7 +402,6 @@ svn_ra_serf__get_inherited_props(svn_ra_
SVN_ERR(svn_ra_serf__get_stable_url(&req_url,
NULL /* latest_revnum */,
session,
- NULL /* conn */,
NULL /* url */,
revision,
scratch_pool, scratch_pool));
@@ -448,12 +423,12 @@ svn_ra_serf__get_inherited_props(svn_ra_
NULL,
iprops_ctx,
scratch_pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, scratch_pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL,
+ scratch_pool);
handler->method = "REPORT";
handler->path = req_url;
- handler->conn = session->conns[0];
- handler->session = session;
+
handler->body_delegate = create_iprops_body;
handler->body_delegate_baton = iprops_ctx;
handler->body_type = "text/xml";
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/lock.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/lock.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/lock.c Tue Jan 27 23:27:44 2015
@@ -191,7 +191,8 @@ locks_closed(svn_ra_serf__xml_estate_t *
static svn_error_t *
set_lock_headers(serf_bucket_t *headers,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
lock_ctx_t *lock_ctx = baton;
@@ -399,7 +400,8 @@ static svn_error_t *
create_lock_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
lock_ctx_t *ctx = baton;
serf_bucket_t *buckets;
@@ -482,7 +484,8 @@ svn_ra_serf__lock(svn_ra_session_t *ra_s
NULL, locks_closed, NULL,
lock_ctx,
lock_pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, lock_pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL,
+ lock_pool);
handler->method = "LOCK";
handler->path = req_url;
@@ -495,8 +498,6 @@ svn_ra_serf__lock(svn_ra_session_t *ra_s
if (session->cur_conn >= session->num_conns)
session->cur_conn = 0;
- handler->session = session;
-
handler->header_delegate = set_lock_headers;
handler->header_delegate_baton = lock_ctx;
@@ -528,7 +529,8 @@ svn_ra_serf__lock(svn_ra_session_t *ra_s
static svn_error_t *
set_unlock_headers(serf_bucket_t *headers,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
lock_ctx_t *ctx = baton;
@@ -647,12 +649,10 @@ svn_ra_serf__unlock(svn_ra_session_t *ra
req_url = svn_path_url_add_component2(session->session_url.path, lock_ctx->path,
lock_pool);
- handler = svn_ra_serf__create_handler(lock_pool);
+ handler = svn_ra_serf__create_handler(session, lock_pool);
handler->method = "UNLOCK";
handler->path = req_url;
- handler->conn = session->conns[0];
- handler->session = session;
handler->header_delegate = set_unlock_headers;
handler->header_delegate_baton = lock_ctx;
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/log.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/log.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/log.c Tue Jan 27 23:27:44 2015
@@ -412,7 +412,8 @@ static svn_error_t *
create_log_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
serf_bucket_t *buckets;
log_context_t *log_ctx = baton;
@@ -579,7 +580,7 @@ svn_ra_serf__get_log(svn_ra_session_t *r
peg_rev = (start == SVN_INVALID_REVNUM || start > end) ? start : end;
SVN_ERR(svn_ra_serf__get_stable_url(&req_url, NULL /* latest_revnum */,
- session, NULL /* conn */,
+ session,
NULL /* url */, peg_rev,
pool, pool));
@@ -587,15 +588,13 @@ svn_ra_serf__get_log(svn_ra_session_t *r
log_opened, log_closed, NULL,
log_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "REPORT";
handler->path = req_url;
handler->body_delegate = create_log_body;
handler->body_delegate_baton = log_ctx;
handler->body_type = "text/xml";
- handler->conn = session->conns[0];
- handler->session = session;
SVN_ERR(svn_ra_serf__context_run_one(handler, pool));
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/merge.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/merge.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/merge.c Tue Jan 27 23:27:44 2015
@@ -271,7 +271,8 @@ merge_closed(svn_ra_serf__xml_estate_t *
static svn_error_t *
setup_merge_headers(serf_bucket_t *headers,
void *baton,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
merge_context_t *ctx = baton;
@@ -337,7 +338,8 @@ static svn_error_t*
create_merge_body(serf_bucket_t **bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
merge_context_t *ctx = baton;
serf_bucket_t *body_bkt;
@@ -389,7 +391,6 @@ create_merge_body(serf_bucket_t **bkt,
svn_error_t *
svn_ra_serf__run_merge(const svn_commit_info_t **commit_info,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
const char *merge_resource_url,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
@@ -418,14 +419,13 @@ svn_ra_serf__run_merge(const svn_commit_
NULL, merge_closed, NULL,
merge_ctx,
scratch_pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, scratch_pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL,
+ scratch_pool);
handler->method = "MERGE";
handler->path = merge_ctx->merge_url;
handler->body_delegate = create_merge_body;
handler->body_delegate_baton = merge_ctx;
- handler->conn = conn;
- handler->session = session;
handler->header_delegate = setup_merge_headers;
handler->header_delegate_baton = merge_ctx;
@@ -439,5 +439,13 @@ svn_ra_serf__run_merge(const svn_commit_
*commit_info = merge_ctx->commit_info;
+ /* Sanity check (Reported to be triggered by CodePlex's svnbridge) */
+ if (! SVN_IS_VALID_REVNUM(merge_ctx->commit_info->revision))
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
+ _("The MERGE response did not include "
+ "a new revision"));
+ }
+
return SVN_NO_ERROR;
}
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/mergeinfo.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/mergeinfo.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/mergeinfo.c Tue Jan 27 23:27:44 2015
@@ -135,7 +135,8 @@ static svn_error_t *
create_mergeinfo_body(serf_bucket_t **bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
mergeinfo_context_t *mergeinfo_ctx = baton;
serf_bucket_t *body_bkt;
@@ -200,7 +201,7 @@ svn_ra_serf__get_mergeinfo(svn_ra_sessio
*catalog = NULL;
SVN_ERR(svn_ra_serf__get_stable_url(&path, NULL /* latest_revnum */,
- session, NULL /* conn */,
+ session,
NULL /* url */, revision,
pool, pool));
@@ -216,12 +217,11 @@ svn_ra_serf__get_mergeinfo(svn_ra_sessio
NULL, mergeinfo_closed, NULL,
mergeinfo_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "REPORT";
handler->path = path;
- handler->conn = session->conns[0];
- handler->session = session;
+
handler->body_delegate = create_mergeinfo_body;
handler->body_delegate_baton = mergeinfo_ctx;
handler->body_type = "text/xml";
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/multistatus.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/multistatus.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/multistatus.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/multistatus.c Tue Jan 27 23:27:44 2015
@@ -619,7 +619,8 @@ svn_ra_serf__setup_error_parsing(svn_ra_
ms_baton,
ms_baton->pool);
- tmp_handler = svn_ra_serf__create_expat_handler(ms_baton->xmlctx,
+ tmp_handler = svn_ra_serf__create_expat_handler(handler->session,
+ ms_baton->xmlctx,
expected_status,
result_pool);
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/options.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/options.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/options.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/options.c Tue Jan 27 23:27:44 2015
@@ -116,7 +116,8 @@ static svn_error_t *
create_options_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
serf_bucket_t *body;
body = serf_bucket_aggregate_create(alloc);
@@ -388,7 +389,6 @@ options_response_handler(serf_request_t
static svn_error_t *
create_options_req(options_context_t **opt_ctx,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
apr_pool_t *pool)
{
options_context_t *new_ctx;
@@ -405,14 +405,12 @@ create_options_req(options_context_t **o
NULL, options_closed, NULL,
new_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx, NULL, pool);
+ handler = svn_ra_serf__create_expat_handler(session, xmlctx, NULL, pool);
handler->method = "OPTIONS";
handler->path = session->session_url.path;
handler->body_delegate = create_options_body;
handler->body_type = "text/xml";
- handler->conn = conn;
- handler->session = session;
new_ctx->handler = handler;
@@ -429,15 +427,14 @@ create_options_req(options_context_t **o
svn_error_t *
svn_ra_serf__v2_get_youngest_revnum(svn_revnum_t *youngest,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
apr_pool_t *scratch_pool)
{
- svn_ra_serf__session_t *session = conn->session;
options_context_t *opt_ctx;
SVN_ERR_ASSERT(SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session));
- SVN_ERR(create_options_req(&opt_ctx, session, conn, scratch_pool));
+ SVN_ERR(create_options_req(&opt_ctx, session, scratch_pool));
SVN_ERR(svn_ra_serf__context_run_one(opt_ctx->handler, scratch_pool));
if (opt_ctx->handler->sline.code != 200)
@@ -456,21 +453,40 @@ svn_ra_serf__v2_get_youngest_revnum(svn_
svn_error_t *
svn_ra_serf__v1_get_activity_collection(const char **activity_url,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_ra_serf__session_t *session = conn->session;
options_context_t *opt_ctx;
SVN_ERR_ASSERT(!SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session));
- SVN_ERR(create_options_req(&opt_ctx, session, conn, scratch_pool));
+ if (session->activity_collection_url)
+ {
+ *activity_url = apr_pstrdup(result_pool,
+ session->activity_collection_url);
+ return SVN_NO_ERROR;
+ }
+
+ SVN_ERR(create_options_req(&opt_ctx, session, scratch_pool));
SVN_ERR(svn_ra_serf__context_run_one(opt_ctx->handler, scratch_pool));
if (opt_ctx->handler->sline.code != 200)
return svn_error_trace(svn_ra_serf__unexpected_status(opt_ctx->handler));
+ /* Cache the result. */
+ if (opt_ctx->activity_collection)
+ {
+ session->activity_collection_url =
+ apr_pstrdup(session->pool, opt_ctx->activity_collection);
+ }
+ else
+ {
+ return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
+ _("The OPTIONS response did not include the "
+ "requested activity-collection-set value"));
+ }
+
*activity_url = apr_pstrdup(result_pool, opt_ctx->activity_collection);
return SVN_NO_ERROR;
@@ -489,9 +505,11 @@ svn_ra_serf__exchange_capabilities(svn_r
{
options_context_t *opt_ctx;
+ if (corrected_url)
+ *corrected_url = NULL;
+
/* This routine automatically fills in serf_sess->capabilities */
- SVN_ERR(create_options_req(&opt_ctx, serf_sess, serf_sess->conns[0],
- scratch_pool));
+ SVN_ERR(create_options_req(&opt_ctx, serf_sess, scratch_pool));
SVN_ERR(svn_ra_serf__context_run_one(opt_ctx->handler, scratch_pool));
@@ -525,7 +543,8 @@ static svn_error_t *
create_simple_options_body(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
serf_bucket_t *body;
serf_bucket_t *s;
@@ -547,11 +566,9 @@ svn_ra_serf__probe_proxy(svn_ra_serf__se
{
svn_ra_serf__handler_t *handler;
- handler = svn_ra_serf__create_handler(scratch_pool);
+ handler = svn_ra_serf__create_handler(serf_sess, scratch_pool);
handler->method = "OPTIONS";
handler->path = serf_sess->session_url.path;
- handler->conn = serf_sess->conns[0];
- handler->session = serf_sess;
/* We don't care about the response body, so discard it. */
handler->response_handler = svn_ra_serf__handle_discard_body;
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/property.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/property.c?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/property.c (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/property.c Tue Jan 27 23:27:44 2015
@@ -64,8 +64,7 @@ typedef struct propfind_context_t {
/* the requested path */
const char *path;
- /* the requested version (number and string form) */
- svn_revnum_t rev;
+ /* the requested version (in string form) */
const char *label;
/* the request depth */
@@ -74,7 +73,7 @@ typedef struct propfind_context_t {
/* the list of requested properties */
const svn_ra_serf__dav_props_t *find_props;
- svn_ra_serf__prop_func prop_func;
+ svn_ra_serf__prop_func_t prop_func;
void *prop_func_baton;
/* hash table containing all the properties associated with the
@@ -169,6 +168,29 @@ propfind_opened(svn_ra_serf__xml_estate_
return SVN_NO_ERROR;
}
+/* Set PROPS for NS:NAME VAL. Helper for propfind_closed */
+static void
+set_ns_prop(apr_hash_t *ns_props,
+ const char *ns, const char *name,
+ const svn_string_t *val, apr_pool_t *result_pool)
+{
+ apr_hash_t *props = svn_hash_gets(ns_props, ns);
+
+ if (!props)
+ {
+ props = apr_hash_make(result_pool);
+ ns = apr_pstrdup(result_pool, ns);
+ svn_hash_sets(ns_props, ns, props);
+ }
+
+ if (val)
+ {
+ name = apr_pstrdup(result_pool, name);
+ val = svn_string_dup(val, result_pool);
+ }
+
+ svn_hash_sets(props, name, val);
+}
/* Conforms to svn_ra_serf__xml_closed_t */
static svn_error_t *
@@ -226,8 +248,6 @@ propfind_closed(svn_ra_serf__xml_estate_
{
const char *encoding;
const svn_string_t *val_str;
- apr_hash_t *gathered;
- const char *path;
const char *ns;
const char *name;
const char *altvalue;
@@ -253,9 +273,7 @@ propfind_closed(svn_ra_serf__xml_estate_
val_str = cdata;
}
- /* The current path sits on the RESPONSE state. Gather up all the
- state from this PROPVAL to the (grandparent) RESPONSE state,
- and grab the path from there.
+ /* The current path sits on the RESPONSE state.
Now, it would be nice if we could, at this point, know that
the status code for this property indicated a problem -- then
@@ -265,19 +283,12 @@ propfind_closed(svn_ra_serf__xml_estate_
here, setting the property and value as expected. Once we
know for sure the status code associate with the property,
we'll decide its fate. */
- gathered = svn_ra_serf__xml_gather_since(xes, RESPONSE);
-
- /* These will be dup'd into CTX->POOL, as necessary. */
- path = svn_hash_gets(gathered, "path");
- if (path == NULL)
- path = ctx->path;
ns = svn_hash_gets(attrs, "ns");
name = svn_hash_gets(attrs, "name");
- svn_ra_serf__set_ver_prop(ctx->ps_props,
- path, ctx->rev, ns, name, val_str,
- apr_hash_pool_get(ctx->ps_props));
+ set_ns_prop(ctx->ps_props, ns, name, val_str,
+ apr_hash_pool_get(ctx->ps_props));
}
else
{
@@ -285,153 +296,60 @@ propfind_closed(svn_ra_serf__xml_estate_
SVN_ERR_ASSERT(leaving_state == PROPSTAT);
- gathered = svn_ra_serf__xml_gather_since(xes, PROPSTAT);
+ gathered = svn_ra_serf__xml_gather_since(xes, RESPONSE);
/* If we've squirreled away a note that says we want to ignore
these properties, we'll do so. Otherwise, we need to copy
them from the temporary hash into the ctx->ret_props hash. */
if (! svn_hash_gets(gathered, "ignore-prop"))
{
- SVN_ERR(svn_ra_serf__walk_all_paths(ctx->ps_props, ctx->rev,
- ctx->prop_func,
- ctx->prop_func_baton,
- scratch_pool));
- }
+ apr_hash_index_t *hi_ns;
+ const char *path;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- ctx->ps_props = NULL; /* Allocated in PROPSTAT state pool */
- }
-
- return SVN_NO_ERROR;
-}
-
-
-const svn_string_t *
-svn_ra_serf__get_ver_prop_string(apr_hash_t *props,
- const char *path,
- svn_revnum_t rev,
- const char *ns,
- const char *name)
-{
- apr_hash_t *ver_props, *path_props, *ns_props;
- void *val = NULL;
-
- ver_props = apr_hash_get(props, &rev, sizeof(rev));
- if (ver_props)
- {
- path_props = svn_hash_gets(ver_props, path);
- if (path_props)
- {
- ns_props = svn_hash_gets(path_props, ns);
- if (ns_props)
+ path = svn_hash_gets(gathered, "path");
+ if (!path)
+ path = ctx->path;
+
+ for (hi_ns = apr_hash_first(scratch_pool, ctx->ps_props);
+ hi_ns;
+ hi_ns = apr_hash_next(hi_ns))
{
- val = svn_hash_gets(ns_props, name);
+ const char *ns = apr_hash_this_key(hi_ns);
+ apr_hash_t *props = apr_hash_this_val(hi_ns);
+ apr_hash_index_t *hi_prop;
+
+ svn_pool_clear(iterpool);
+
+ for (hi_prop = apr_hash_first(iterpool, props);
+ hi_prop;
+ hi_prop = apr_hash_next(hi_prop))
+ {
+ const char *name = apr_hash_this_key(hi_prop);
+ const svn_string_t *value = apr_hash_this_val(hi_prop);
+
+ SVN_ERR(ctx->prop_func(ctx->prop_func_baton, path,
+ ns, name, value, iterpool));
+ }
}
- }
- }
-
- return val;
-}
-
-const char *
-svn_ra_serf__get_ver_prop(apr_hash_t *props,
- const char *path,
- svn_revnum_t rev,
- const char *ns,
- const char *name)
-{
- const svn_string_t *val;
-
- val = svn_ra_serf__get_ver_prop_string(props, path, rev, ns, name);
-
- if (val)
- {
- return val->data;
- }
-
- return NULL;
-}
-
-const svn_string_t *
-svn_ra_serf__get_prop_string(apr_hash_t *props,
- const char *path,
- const char *ns,
- const char *name)
-{
- return svn_ra_serf__get_ver_prop_string(props, path, SVN_INVALID_REVNUM,
- ns, name);
-}
-
-const char *
-svn_ra_serf__get_prop(apr_hash_t *props,
- const char *path,
- const char *ns,
- const char *name)
-{
- return svn_ra_serf__get_ver_prop(props, path, SVN_INVALID_REVNUM, ns, name);
-}
-
-void
-svn_ra_serf__set_ver_prop(apr_hash_t *props,
- const char *path, svn_revnum_t rev,
- const char *ns, const char *name,
- const svn_string_t *val, apr_pool_t *pool)
-{
- apr_hash_t *ver_props, *path_props, *ns_props;
-
- ver_props = apr_hash_get(props, &rev, sizeof(rev));
- if (!ver_props)
- {
- ver_props = apr_hash_make(pool);
- apr_hash_set(props, apr_pmemdup(pool, &rev, sizeof(rev)), sizeof(rev),
- ver_props);
- }
-
- path_props = svn_hash_gets(ver_props, path);
-
- if (!path_props)
- {
- path_props = apr_hash_make(pool);
- path = apr_pstrdup(pool, path);
- svn_hash_sets(ver_props, path, path_props);
-
- /* todo: we know that we'll fail the next check, but fall through
- * for now for simplicity's sake.
- */
- }
- ns_props = svn_hash_gets(path_props, ns);
- if (!ns_props)
- {
- ns_props = apr_hash_make(pool);
- ns = apr_pstrdup(pool, ns);
- svn_hash_sets(path_props, ns, ns_props);
- }
+ svn_pool_destroy(iterpool);
+ }
- if (val)
- {
- name = apr_pstrdup(pool, name);
- val = svn_string_dup(val, pool);
+ ctx->ps_props = NULL; /* Allocated in PROPSTAT state pool */
}
- svn_hash_sets(ns_props, name, val);
+ return SVN_NO_ERROR;
}
-void
-svn_ra_serf__set_prop(apr_hash_t *props,
- const char *path,
- const char *ns, const char *name,
- const svn_string_t *val, apr_pool_t *pool)
-{
- svn_ra_serf__set_ver_prop(props, path, SVN_INVALID_REVNUM, ns, name,
- val, pool);
-}
static svn_error_t *
setup_propfind_headers(serf_bucket_t *headers,
- void *setup_baton,
- apr_pool_t *pool)
+ void *setup_baton,
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
propfind_context_t *ctx = setup_baton;
@@ -452,7 +370,8 @@ static svn_error_t *
create_propfind_body(serf_bucket_t **bkt,
void *setup_baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *pool)
+ apr_pool_t *pool /* request pool */,
+ apr_pool_t *scratch_pool)
{
propfind_context_t *ctx = setup_baton;
@@ -527,16 +446,15 @@ create_propfind_body(serf_bucket_t **bkt
svn_error_t *
-svn_ra_serf__deliver_props2(svn_ra_serf__handler_t **propfind_handler,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *path,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *find_props,
- svn_ra_serf__prop_func prop_func,
- void *prop_func_baton,
- apr_pool_t *pool)
+svn_ra_serf__create_propfind_handler(svn_ra_serf__handler_t **propfind_handler,
+ svn_ra_serf__session_t *sess,
+ const char *path,
+ svn_revnum_t rev,
+ const char *depth,
+ const svn_ra_serf__dav_props_t *find_props,
+ svn_ra_serf__prop_func_t prop_func,
+ void *prop_func_baton,
+ apr_pool_t *pool)
{
propfind_context_t *new_prop_ctx;
svn_ra_serf__handler_t *handler;
@@ -549,7 +467,6 @@ svn_ra_serf__deliver_props2(svn_ra_serf_
new_prop_ctx->prop_func = prop_func;
new_prop_ctx->prop_func_baton = prop_func_baton;
new_prop_ctx->depth = depth;
- new_prop_ctx->rev = rev;
if (SVN_IS_VALID_REVNUM(rev))
{
@@ -566,7 +483,7 @@ svn_ra_serf__deliver_props2(svn_ra_serf_
NULL,
new_prop_ctx,
pool);
- handler = svn_ra_serf__create_expat_handler(xmlctx,
+ handler = svn_ra_serf__create_expat_handler(sess, xmlctx,
propfind_expected_status,
pool);
@@ -578,8 +495,7 @@ svn_ra_serf__deliver_props2(svn_ra_serf_
handler->header_delegate = setup_propfind_headers;
handler->header_delegate_baton = new_prop_ctx;
- handler->session = sess;
- handler->conn = conn;
+ handler->no_dav_headers = TRUE;
new_prop_ctx->handler = handler;
@@ -588,254 +504,85 @@ svn_ra_serf__deliver_props2(svn_ra_serf_
return SVN_NO_ERROR;
}
-/* Baton for deliver_prop */
-struct deliver_prop_baton_t
-{
- apr_pool_t *result_pool;
- apr_hash_t *prop_vals;
- svn_revnum_t rev;
-};
-
-/* Implements svn_ra_serf__prop_func for svn_ra_serf__deliver_props */
-static svn_error_t *
-deliver_prop(void *baton,
- const char *path,
- const char *ns,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *scratch_pool)
-{
- struct deliver_prop_baton_t *dpb = baton;
-
- svn_ra_serf__set_ver_prop(dpb->prop_vals,
- path, dpb->rev,
- ns, name, value,
- dpb->result_pool);
- return SVN_NO_ERROR;
-}
-
svn_error_t *
-svn_ra_serf__deliver_props(svn_ra_serf__handler_t **propfind_handler,
- apr_hash_t *prop_vals,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *lookup_props,
- apr_pool_t *pool)
+svn_ra_serf__deliver_svn_props(void *baton,
+ const char *path,
+ const char *ns,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
{
- struct deliver_prop_baton_t *dpb = apr_pcalloc(pool, sizeof(*dpb));
-
- dpb->result_pool = apr_hash_pool_get(prop_vals);
- dpb->prop_vals = prop_vals;
- dpb->rev = rev;
-
- return svn_error_trace(svn_ra_serf__deliver_props2(propfind_handler,
- sess, conn,
- url, rev,
- depth,
- lookup_props,
- deliver_prop, dpb,
- pool));
-}
-
-
+ apr_hash_t *props = baton;
+ apr_pool_t *result_pool = apr_hash_pool_get(props);
+ const char *prop_name;
-/*
- * This helper function will block until the PROP_CTX indicates that is done
- * or another error is returned.
- */
-svn_error_t *
-svn_ra_serf__wait_for_props(svn_ra_serf__handler_t *handler,
- apr_pool_t *scratch_pool)
-{
- SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
+ prop_name = svn_ra_serf__svnname_from_wirename(ns, name, result_pool);
+ if (prop_name == NULL)
+ return SVN_NO_ERROR;
- if (handler->sline.code != 207)
- return svn_error_trace(svn_ra_serf__unexpected_status(handler));
+ svn_hash_sets(props, prop_name, svn_string_dup(value, result_pool));
return SVN_NO_ERROR;
}
/*
- * This is a blocking version of deliver_props.
+ * Implementation of svn_ra_serf__prop_func_t that delivers all DAV properties
+ * in (const char * -> apr_hash_t *) on Namespace pointing to a second hash
+ * (const char * -> svn_string_t *) to the values.
*/
-svn_error_t *
-svn_ra_serf__retrieve_props(apr_hash_t **results,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *props,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+static svn_error_t *
+deliver_node_props(void *baton,
+ const char *path,
+ const char *ns,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool)
{
- svn_ra_serf__handler_t *handler;
+ apr_hash_t *nss = baton;
+ apr_hash_t *props;
+ apr_pool_t *result_pool = apr_hash_pool_get(nss);
+
+ props = svn_hash_gets(nss, ns);
- *results = apr_hash_make(result_pool);
+ if (!props)
+ {
+ props = apr_hash_make(result_pool);
- SVN_ERR(svn_ra_serf__deliver_props(&handler, *results, sess, conn, url,
- rev, depth, props, result_pool));
- SVN_ERR(svn_ra_serf__wait_for_props(handler, scratch_pool));
+ ns = apr_pstrdup(result_pool, ns);
+ svn_hash_sets(nss, ns, props);
+ }
+
+ name = apr_pstrdup(result_pool, name);
+ svn_hash_sets(props, name, svn_string_dup(value, result_pool));
return SVN_NO_ERROR;
}
-
svn_error_t *
svn_ra_serf__fetch_node_props(apr_hash_t **results,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *url,
svn_revnum_t revision,
const svn_ra_serf__dav_props_t *which_props,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- apr_hash_t *multiprops;
- apr_hash_t *ver_props;
-
- /* Note: a couple extra hash tables and whatnot get into RESULT_POOL.
- Not a big deal at this point. Theoretically, we could fetch all
- props into SCRATCH_POOL, then copy just the REVISION/URL props
- into RESULT_POOL. Too much work for too little gain... */
- SVN_ERR(svn_ra_serf__retrieve_props(&multiprops, conn->session, conn,
- url, revision, "0", which_props,
- result_pool, scratch_pool));
-
- ver_props = apr_hash_get(multiprops, &revision, sizeof(revision));
- if (ver_props != NULL)
- {
- *results = svn_hash_gets(ver_props, url);
- if (*results != NULL)
- return SVN_NO_ERROR;
- }
-
- return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
- _("The PROPFIND response did not include "
- "the requested properties"));
-}
-
-
-svn_error_t *
-svn_ra_serf__walk_node_props(apr_hash_t *props,
- svn_ra_serf__walker_visitor_t walker,
- void *baton,
- apr_pool_t *scratch_pool)
-{
- apr_pool_t *iterpool;
- apr_hash_index_t *ns_hi;
-
- iterpool = svn_pool_create(scratch_pool);
- for (ns_hi = apr_hash_first(scratch_pool, props); ns_hi;
- ns_hi = apr_hash_next(ns_hi))
- {
- void *ns_val;
- const void *ns_name;
- apr_hash_index_t *name_hi;
-
- /* NOTE: We do not clear ITERPOOL in this loop. Generally, there are
- very few namespaces, so this loop will not have many iterations.
- Instead, ITERPOOL is used for the inner loop. */
-
- apr_hash_this(ns_hi, &ns_name, NULL, &ns_val);
-
- for (name_hi = apr_hash_first(scratch_pool, ns_val); name_hi;
- name_hi = apr_hash_next(name_hi))
- {
- void *prop_val;
- const void *prop_name;
-
- /* See note above, regarding clearing of this pool. */
- svn_pool_clear(iterpool);
-
- apr_hash_this(name_hi, &prop_name, NULL, &prop_val);
-
- SVN_ERR(walker(baton, ns_name, prop_name, prop_val, iterpool));
- }
- }
- svn_pool_destroy(iterpool);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_serf__walk_all_props(apr_hash_t *props,
- const char *name,
- svn_revnum_t rev,
- svn_ra_serf__walker_visitor_t walker,
- void *baton,
- apr_pool_t *scratch_pool)
-{
- apr_hash_t *ver_props;
- apr_hash_t *path_props;
-
- ver_props = apr_hash_get(props, &rev, sizeof(rev));
- if (!ver_props)
- return SVN_NO_ERROR;
-
- path_props = svn_hash_gets(ver_props, name);
- if (!path_props)
- return SVN_NO_ERROR;
-
- return svn_error_trace(svn_ra_serf__walk_node_props(path_props,
- walker, baton,
- scratch_pool));
-}
-
-
-svn_error_t *
-svn_ra_serf__walk_all_paths(apr_hash_t *props,
- svn_revnum_t rev,
- svn_ra_serf__path_rev_walker_t walker,
- void *baton,
- apr_pool_t *pool)
-{
- apr_hash_index_t *path_hi;
- apr_hash_t *ver_props;
-
- ver_props = apr_hash_get(props, &rev, sizeof(rev));
-
- if (!ver_props)
- {
- return SVN_NO_ERROR;
- }
+ apr_hash_t *props;
+ svn_ra_serf__handler_t *handler;
- for (path_hi = apr_hash_first(pool, ver_props); path_hi;
- path_hi = apr_hash_next(path_hi))
- {
- void *path_props;
- const void *path_name;
- apr_hash_index_t *ns_hi;
+ props = apr_hash_make(result_pool);
- apr_hash_this(path_hi, &path_name, NULL, &path_props);
- for (ns_hi = apr_hash_first(pool, path_props); ns_hi;
- ns_hi = apr_hash_next(ns_hi))
- {
- void *ns_val;
- const void *ns_name;
- apr_hash_index_t *name_hi;
- apr_hash_this(ns_hi, &ns_name, NULL, &ns_val);
- for (name_hi = apr_hash_first(pool, ns_val); name_hi;
- name_hi = apr_hash_next(name_hi))
- {
- void *prop_val;
- const void *prop_name;
+ SVN_ERR(svn_ra_serf__create_propfind_handler(&handler, session,
+ url, revision, "0", which_props,
+ deliver_node_props,
+ props, scratch_pool));
- apr_hash_this(name_hi, &prop_name, NULL, &prop_val);
- /* use a subpool? */
- SVN_ERR(walker(baton, path_name, ns_name, prop_name, prop_val,
- pool));
- }
- }
- }
+ SVN_ERR(svn_ra_serf__context_run_one(handler, scratch_pool));
+ *results = props;
return SVN_NO_ERROR;
}
-
const char *
svn_ra_serf__svnname_from_wirename(const char *ns,
const char *name,
@@ -879,96 +626,6 @@ svn_ra_serf__svnname_from_wirename(const
return apr_pstrcat(result_pool, ns, name, SVN_VA_NULL);
}
-
-/* Conforms to svn_ra_serf__walker_visitor_t */
-static svn_error_t *
-set_flat_props(void *baton,
- const char *ns,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *pool)
-{
- apr_hash_t *props = baton;
- apr_pool_t *result_pool = apr_hash_pool_get(props);
- const char *prop_name;
-
- /* ### is VAL in the proper pool? */
-
- prop_name = svn_ra_serf__svnname_from_wirename(ns, name, result_pool);
- if (prop_name != NULL)
- svn_hash_sets(props, prop_name, value);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_serf__flatten_props(apr_hash_t **flat_props,
- apr_hash_t *props,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- *flat_props = apr_hash_make(result_pool);
-
- return svn_error_trace(svn_ra_serf__walk_node_props(
- props,
- set_flat_props,
- *flat_props /* baton */,
- scratch_pool));
-}
-
-
-static svn_error_t *
-select_revprops(void *baton,
- const char *ns,
- const char *name,
- const svn_string_t *val,
- apr_pool_t *scratch_pool)
-{
- apr_hash_t *revprops = baton;
- apr_pool_t *result_pool = apr_hash_pool_get(revprops);
- const char *prop_name;
-
- /* ### copy NAME into the RESULT_POOL? */
- /* ### copy VAL into the RESULT_POOL? */
-
- if (strcmp(ns, SVN_DAV_PROP_NS_CUSTOM) == 0)
- prop_name = name;
- else if (strcmp(ns, SVN_DAV_PROP_NS_SVN) == 0)
- prop_name = apr_pstrcat(result_pool, SVN_PROP_PREFIX, name, SVN_VA_NULL);
- else if (strcmp(ns, SVN_PROP_PREFIX) == 0)
- prop_name = apr_pstrcat(result_pool, SVN_PROP_PREFIX, name, SVN_VA_NULL);
- else if (strcmp(ns, "") == 0)
- prop_name = name;
- else
- {
- /* do nothing for now? */
- return SVN_NO_ERROR;
- }
-
- svn_hash_sets(revprops, prop_name, val);
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
-svn_ra_serf__select_revprops(apr_hash_t **revprops,
- const char *name,
- svn_revnum_t rev,
- apr_hash_t *all_revprops,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
-{
- *revprops = apr_hash_make(result_pool);
-
- return svn_error_trace(svn_ra_serf__walk_all_props(
- all_revprops, name, rev,
- select_revprops, *revprops,
- scratch_pool));
-}
-
-
/*
* Contact the server (using CONN) to calculate baseline
* information for BASELINE_URL at REVISION (which may be
@@ -982,7 +639,7 @@ svn_ra_serf__select_revprops(apr_hash_t
static svn_error_t *
retrieve_baseline_info(svn_revnum_t *actual_revision,
const char **basecoll_url_p,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *baseline_url,
svn_revnum_t revision,
apr_pool_t *result_pool,
@@ -992,7 +649,7 @@ retrieve_baseline_info(svn_revnum_t *act
apr_hash_t *dav_props;
const char *basecoll_url;
- SVN_ERR(svn_ra_serf__fetch_node_props(&props, conn,
+ SVN_ERR(svn_ra_serf__fetch_node_props(&props, session,
baseline_url, revision,
baseline_props,
scratch_pool, scratch_pool));
@@ -1042,7 +699,7 @@ retrieve_baseline_info(svn_revnum_t *act
static svn_error_t *
v1_get_youngest_revnum(svn_revnum_t *youngest,
const char **basecoll_url,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *vcc_url,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -1052,7 +709,7 @@ v1_get_youngest_revnum(svn_revnum_t *you
/* Fetching DAV:checked-in from the VCC (with no Label: to specify a
revision) will return the latest Baseline resource's URL. */
- SVN_ERR(svn_ra_serf__fetch_dav_prop(&baseline_url, conn, vcc_url,
+ SVN_ERR(svn_ra_serf__fetch_dav_prop(&baseline_url, session, vcc_url,
SVN_INVALID_REVNUM,
"checked-in",
scratch_pool, scratch_pool));
@@ -1071,15 +728,15 @@ v1_get_youngest_revnum(svn_revnum_t *you
/* First check baseline information cache. */
SVN_ERR(svn_ra_serf__blncache_get_baseline_info(&bc_url,
youngest,
- conn->session->blncache,
+ session->blncache,
baseline_url,
scratch_pool));
if (!bc_url)
{
- SVN_ERR(retrieve_baseline_info(youngest, &bc_url, conn,
+ SVN_ERR(retrieve_baseline_info(youngest, &bc_url, session,
baseline_url, SVN_INVALID_REVNUM,
scratch_pool, scratch_pool));
- SVN_ERR(svn_ra_serf__blncache_set(conn->session->blncache,
+ SVN_ERR(svn_ra_serf__blncache_set(session->blncache,
baseline_url, *youngest,
bc_url, scratch_pool));
}
@@ -1100,12 +757,12 @@ svn_ra_serf__get_youngest_revnum(svn_rev
if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session))
return svn_error_trace(svn_ra_serf__v2_get_youngest_revnum(
- youngest, session->conns[0], scratch_pool));
+ youngest, session, scratch_pool));
- SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, NULL, scratch_pool));
+ SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, scratch_pool));
return svn_error_trace(v1_get_youngest_revnum(youngest, NULL,
- session->conns[0], vcc_url,
+ session, vcc_url,
scratch_pool, scratch_pool));
}
@@ -1122,9 +779,9 @@ static svn_error_t *
get_baseline_info(const char **bc_url,
svn_revnum_t *revnum_used,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
svn_revnum_t revision,
- apr_pool_t *pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
/* If we detected HTTP v2 support on the server, we can construct
the baseline collection URL ourselves, and fetch the latest
@@ -1138,10 +795,10 @@ get_baseline_info(const char **bc_url,
else
{
SVN_ERR(svn_ra_serf__v2_get_youngest_revnum(
- revnum_used, conn, pool));
+ revnum_used, session, scratch_pool));
}
- *bc_url = apr_psprintf(pool, "%s/%ld",
+ *bc_url = apr_psprintf(result_pool, "%s/%ld",
session->rev_root_stub, *revnum_used);
}
@@ -1150,20 +807,22 @@ get_baseline_info(const char **bc_url,
{
const char *vcc_url;
- SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, conn, pool));
+ SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, scratch_pool));
if (SVN_IS_VALID_REVNUM(revision))
{
/* First check baseline information cache. */
SVN_ERR(svn_ra_serf__blncache_get_bc_url(bc_url,
session->blncache,
- revision, pool));
+ revision, result_pool));
if (!*bc_url)
{
- SVN_ERR(retrieve_baseline_info(NULL, bc_url, conn,
- vcc_url, revision, pool, pool));
+ SVN_ERR(retrieve_baseline_info(NULL, bc_url, session,
+ vcc_url, revision,
+ result_pool, scratch_pool));
SVN_ERR(svn_ra_serf__blncache_set(session->blncache, NULL,
- revision, *bc_url, pool));
+ revision, *bc_url,
+ scratch_pool));
}
*revnum_used = revision;
@@ -1171,8 +830,8 @@ get_baseline_info(const char **bc_url,
else
{
SVN_ERR(v1_get_youngest_revnum(revnum_used, bc_url,
- conn, vcc_url,
- pool, pool));
+ session, vcc_url,
+ result_pool, scratch_pool));
}
}
@@ -1184,7 +843,6 @@ svn_error_t *
svn_ra_serf__get_stable_url(const char **stable_url,
svn_revnum_t *latest_revnum,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
const char *url,
svn_revnum_t revision,
apr_pool_t *result_pool,
@@ -1198,15 +856,10 @@ svn_ra_serf__get_stable_url(const char *
if (! url)
url = session->session_url.path;
- /* If the caller didn't provide a specific connection for us to use,
- we'll use the default connection. */
- if (! conn)
- conn = session->conns[0];
-
SVN_ERR(get_baseline_info(&basecoll_url, &revnum_used,
- session, conn, revision, scratch_pool));
+ session, revision, scratch_pool, scratch_pool));
SVN_ERR(svn_ra_serf__get_relative_path(&repos_relpath, url,
- session, conn, scratch_pool));
+ session, scratch_pool));
*stable_url = svn_path_url_add_component2(basecoll_url, repos_relpath,
result_pool);
@@ -1218,38 +871,8 @@ svn_ra_serf__get_stable_url(const char *
svn_error_t *
-svn_ra_serf__get_resource_type(svn_node_kind_t *kind,
- apr_hash_t *props)
-{
- apr_hash_t *dav_props;
- const char *res_type;
-
- dav_props = apr_hash_get(props, "DAV:", 4);
- res_type = svn_prop_get_value(dav_props, "resourcetype");
- if (!res_type)
- {
- /* How did this happen? */
- return svn_error_create(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL,
- _("The PROPFIND response did not include the "
- "requested resourcetype value"));
- }
-
- if (strcmp(res_type, "collection") == 0)
- {
- *kind = svn_node_dir;
- }
- else
- {
- *kind = svn_node_file;
- }
-
- return SVN_NO_ERROR;
-}
-
-
-svn_error_t *
svn_ra_serf__fetch_dav_prop(const char **value,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *url,
svn_revnum_t revision,
const char *propname,
@@ -1259,7 +882,7 @@ svn_ra_serf__fetch_dav_prop(const char *
apr_hash_t *props;
apr_hash_t *dav_props;
- SVN_ERR(svn_ra_serf__fetch_node_props(&props, conn, url, revision,
+ SVN_ERR(svn_ra_serf__fetch_node_props(&props, session, url, revision,
checked_in_props,
scratch_pool, scratch_pool));
dav_props = apr_hash_get(props, "DAV:", 4);
@@ -1276,3 +899,19 @@ svn_ra_serf__fetch_dav_prop(const char *
return SVN_NO_ERROR;
}
+
+/* Removes all non regular properties from PROPS */
+void
+svn_ra_serf__keep_only_regular_props(apr_hash_t *props,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_index_t *hi;
+
+ for (hi = apr_hash_first(scratch_pool, props); hi; hi = apr_hash_next(hi))
+ {
+ const char *propname = apr_hash_this_key(hi);
+
+ if (svn_property_kind2(propname) != svn_prop_regular_kind)
+ svn_hash_sets(props, propname, NULL);
+ }
+}
Modified: subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/ra_serf.h?rev=1655189&r1=1655188&r2=1655189&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/ra_serf.h Tue Jan 27 23:27:44 2015
@@ -378,23 +378,23 @@ typedef svn_error_t *
/* Callback when the request is done */
typedef svn_error_t *
(*svn_ra_serf__response_done_delegate_t)(serf_request_t *request,
- void *handler_baton,
+ void *done_baton,
apr_pool_t *scratch_pool);
/* Callback for when a request body is needed. */
-/* ### should pass a scratch_pool */
typedef svn_error_t *
(*svn_ra_serf__request_body_delegate_t)(serf_bucket_t **body_bkt,
void *baton,
serf_bucket_alloc_t *alloc,
- apr_pool_t *request_pool);
+ apr_pool_t *request_pool,
+ apr_pool_t *scratch_pool);
/* Callback for when request headers are needed. */
-/* ### should pass a scratch_pool */
typedef svn_error_t *
(*svn_ra_serf__request_header_delegate_t)(serf_bucket_t *headers,
void *baton,
- apr_pool_t *request_pool);
+ apr_pool_t *request_pool,
+ apr_pool_t *scratch_pool);
/* Callback for when a response has an error. */
typedef svn_error_t *
@@ -639,9 +639,11 @@ typedef struct svn_ra_serf__xml_transiti
} svn_ra_serf__xml_transition_t;
-/* Constructor for */
+/* Constructor for svn_ra_serf__handler_t. Initializes a new handler
+ with default settings for SESSION. */
svn_ra_serf__handler_t *
-svn_ra_serf__create_handler(apr_pool_t *result_pool);
+svn_ra_serf__create_handler(svn_ra_serf__session_t *session,
+ apr_pool_t *result_pool);
/* Construct an XML parsing context, based on the TTABLE transition table.
As content is parsed, the CLOSED_CB callback will be invoked according
@@ -685,7 +687,8 @@ svn_ra_serf__xml_context_done(svn_ra_ser
This also initializes HANDLER_POOL to the given RESULT_POOL. */
svn_ra_serf__handler_t *
-svn_ra_serf__create_expat_handler(svn_ra_serf__xml_context_t *xmlctx,
+svn_ra_serf__create_expat_handler(svn_ra_serf__session_t *session,
+ svn_ra_serf__xml_context_t *xmlctx,
const int *expected_status,
apr_pool_t *result_pool);
@@ -916,84 +919,51 @@ svn_ra_serf__add_cdata_len_buckets(serf_
/** PROPFIND-related functions **/
+/* Removes all non regular properties from PROPS */
+void
+svn_ra_serf__keep_only_regular_props(apr_hash_t *props,
+ apr_pool_t *scratch_pool);
+
+
/* Callback used via svn_ra_serf__deliver_props2 */
typedef svn_error_t *
-(*svn_ra_serf__prop_func)(void *baton,
- const char *path,
- const char *ns,
- const char *name,
- const svn_string_t *value,
- apr_pool_t *scratch_pool);
+(*svn_ra_serf__prop_func_t)(void *baton,
+ const char *path,
+ const char *ns,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool);
/*
- * This function will deliver a PROP_CTX PROPFIND request in the SESS
- * serf context for the properties listed in LOOKUP_PROPS at URL for
- * DEPTH ("0","1","infinity").
- *
- * This function will not block waiting for the response. Callers are
- * expected to call svn_ra_serf__wait_for_props().
+ * Implementation of svn_ra_serf__prop_func_t that just delivers svn compatible
+ * properties in the apr_hash_t * that is used as baton.
*/
svn_error_t *
-svn_ra_serf__deliver_props(svn_ra_serf__handler_t **propfind_handler,
- apr_hash_t *prop_vals,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *lookup_props,
- apr_pool_t *pool);
-
+svn_ra_serf__deliver_svn_props(void *baton,
+ const char *path,
+ const char *ns,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *scratch_pool);
/*
- * This function will deliver a PROP_CTX PROPFIND request in the SESS
- * serf context for the properties listed in LOOKUP_PROPS at URL for
- * DEPTH ("0","1","infinity").
- *
- * This function will not block waiting for the response. Callers are
- * expected to call svn_ra_serf__wait_for_props().
- */
-svn_error_t *
-svn_ra_serf__deliver_props2(svn_ra_serf__handler_t **propfind_handler,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *path,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *find_props,
- svn_ra_serf__prop_func prop_func,
- void *prop_func_baton,
- apr_pool_t *pool);
-/*
- * This helper function will block until PROPFIND_HANDLER indicates that is
- * done or another error is returned.
- */
-svn_error_t *
-svn_ra_serf__wait_for_props(svn_ra_serf__handler_t *handler,
- apr_pool_t *scratch_pool);
-
-/* This is a blocking version of deliver_props.
-
- The properties are fetched and placed into RESULTS, allocated in
- RESULT_POOL.
-
- ### more docco about the other params.
-
- Temporary allocations are made in SCRATCH_POOL.
-*/
-svn_error_t *
-svn_ra_serf__retrieve_props(apr_hash_t **results,
- svn_ra_serf__session_t *sess,
- svn_ra_serf__connection_t *conn,
- const char *url,
- svn_revnum_t rev,
- const char *depth,
- const svn_ra_serf__dav_props_t *props,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+ * This function will create a handler for a PROPFIND request, which will deliver
+ * properties to PROP_FUNC() with PROP_BATON for the properties listed in LOOKUP_PROPS
+ * at URL for DEPTH ("0","1","infinity").
+ */
+svn_error_t *
+svn_ra_serf__create_propfind_handler(svn_ra_serf__handler_t **handler,
+ svn_ra_serf__session_t *session,
+ const char *path,
+ svn_revnum_t rev,
+ const char *depth,
+ const svn_ra_serf__dav_props_t *find_props,
+ svn_ra_serf__prop_func_t prop_func,
+ void *prop_func_baton,
+ apr_pool_t *result_pool);
-/* Using CONN, fetch the properties specified by WHICH_PROPS using CONN
+/* Using SESSION, fetch the properties specified by WHICH_PROPS using CONN
for URL at REVISION. The resulting properties are placed into a 2-level
hash in RESULTS, mapping NAMESPACE -> hash<PROPNAME, PROPVALUE>, which
is allocated in RESULT_POOL.
@@ -1006,7 +976,7 @@ svn_ra_serf__retrieve_props(apr_hash_t *
Temporary allocations are made in SCRATCH_POOL. */
svn_error_t *
svn_ra_serf__fetch_node_props(apr_hash_t **results,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *url,
svn_revnum_t revision,
const svn_ra_serf__dav_props_t *which_props,
@@ -1014,7 +984,7 @@ svn_ra_serf__fetch_node_props(apr_hash_t
apr_pool_t *scratch_pool);
-/* Using CONN, fetch a DAV: property from the resource identified by URL
+/* Using SESSION, fetch a DAV: property from the resource identified by URL
within REVISION. The PROPNAME may be one of:
"checked-in"
@@ -1028,66 +998,13 @@ svn_ra_serf__fetch_node_props(apr_hash_t
Temporary allocations are made in SCRATCH_POOL. */
svn_error_t *
svn_ra_serf__fetch_dav_prop(const char **value,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *url,
svn_revnum_t revision,
const char *propname,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/* Set PROPS for PATH at REV revision with a NS:NAME VAL.
- *
- * The POOL governs allocation.
- */
-void
-svn_ra_serf__set_ver_prop(apr_hash_t *props,
- const char *path, svn_revnum_t rev,
- const char *ns, const char *name,
- const svn_string_t *val, apr_pool_t *pool);
-#define svn_ra_serf__set_rev_prop svn_ra_serf__set_ver_prop
-
-/** Property walker functions **/
-
-typedef svn_error_t *
-(*svn_ra_serf__walker_visitor_t)(void *baton,
- const char *ns,
- const char *name,
- const svn_string_t *val,
- apr_pool_t *pool);
-
-svn_error_t *
-svn_ra_serf__walk_all_props(apr_hash_t *props,
- const char *name,
- svn_revnum_t rev,
- svn_ra_serf__walker_visitor_t walker,
- void *baton,
- apr_pool_t *pool);
-
-
-/* Like walk_all_props(), but a 2-level hash. */
-svn_error_t *
-svn_ra_serf__walk_node_props(apr_hash_t *props,
- svn_ra_serf__walker_visitor_t walker,
- void *baton,
- apr_pool_t *scratch_pool);
-
-
-typedef svn_error_t *
-(*svn_ra_serf__path_rev_walker_t)(void *baton,
- const char *path,
- const char *ns,
- const char *name,
- const svn_string_t *val,
- apr_pool_t *pool);
-svn_error_t *
-svn_ra_serf__walk_all_paths(apr_hash_t *props,
- svn_revnum_t rev,
- svn_ra_serf__path_rev_walker_t walker,
- void *baton,
- apr_pool_t *pool);
-
-
/* Map a property name, as passed over the wire, into its corresponding
Subversion-internal name. The returned name will be a static value,
or allocated within RESULT_POOL.
@@ -1099,75 +1016,6 @@ svn_ra_serf__svnname_from_wirename(const
const char *name,
apr_pool_t *result_pool);
-
-/* Select the basic revision properties from the set of "all" properties.
- Return these in *REVPROPS, allocated from RESULT_POOL. */
-svn_error_t *
-svn_ra_serf__select_revprops(apr_hash_t **revprops,
- const char *name,
- svn_revnum_t rev,
- apr_hash_t *all_revprops,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* PROPS is nested hash tables mapping NS -> NAME -> VALUE.
- This function takes the NS:NAME:VALUE hashes and flattens them into a set of
- names to VALUE. The names are composed of NS:NAME, with specific
- rewrite from wire names (DAV) to SVN names. This mapping is managed
- by the svn_ra_serf__set_baton_props() function.
-
- FLAT_PROPS is allocated in RESULT_POOL.
- ### right now, we do a shallow copy from PROPS to FLAT_PROPS. therefore,
- ### the names and values in PROPS must be in the proper pool.
-
- Temporary allocations are made in SCRATCH_POOL. */
-svn_error_t *
-svn_ra_serf__flatten_props(apr_hash_t **flat_props,
- apr_hash_t *props,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/* Return the property value for PATH at REV revision with a NS:NAME.
- * PROPS is a four-level nested hash: (svn_revnum_t => char *path =>
- * char *ns => char *name => svn_string_t *). */
-const svn_string_t *
-svn_ra_serf__get_ver_prop_string(apr_hash_t *props,
- const char *path, svn_revnum_t rev,
- const char *ns, const char *name);
-
-/* Same as svn_ra_serf__get_ver_prop_string(), but returns a C string. */
-const char *
-svn_ra_serf__get_ver_prop(apr_hash_t *props,
- const char *path, svn_revnum_t rev,
- const char *ns, const char *name);
-
-/* Same as svn_ra_serf__get_ver_prop_string(), but for the unknown revision. */
-const svn_string_t *
-svn_ra_serf__get_prop_string(apr_hash_t *props,
- const char *path,
- const char *ns,
- const char *name);
-
-/* Same as svn_ra_serf__get_ver_prop(), but for the unknown revision. */
-const char *
-svn_ra_serf__get_prop(apr_hash_t *props,
- const char *path,
- const char *ns,
- const char *name);
-
-/* Same as svn_ra_serf__set_rev_prop(), but for the unknown revision. */
-void
-svn_ra_serf__set_prop(apr_hash_t *props, const char *path,
- const char *ns, const char *name,
- const svn_string_t *val, apr_pool_t *pool);
-
-svn_error_t *
-svn_ra_serf__get_resource_type(svn_node_kind_t *kind,
- apr_hash_t *props);
-
-
/** MERGE-related functions **/
/* Create an MERGE request aimed at the SESSION url, requesting the
@@ -1178,7 +1026,6 @@ svn_ra_serf__get_resource_type(svn_node_
svn_error_t *
svn_ra_serf__run_merge(const svn_commit_info_t **commit_info,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
const char *merge_resource_url,
apr_hash_t *lock_tokens,
svn_boolean_t keep_locks,
@@ -1206,7 +1053,7 @@ svn_ra_serf__probe_proxy(svn_ra_serf__se
All temporary allocations will be made in SCRATCH_POOL. */
svn_error_t *
svn_ra_serf__v2_get_youngest_revnum(svn_revnum_t *youngest,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
apr_pool_t *scratch_pool);
@@ -1221,35 +1068,29 @@ svn_ra_serf__v2_get_youngest_revnum(svn_
All temporary allocations will be made in SCRATCH_POOL. */
svn_error_t *
svn_ra_serf__v1_get_activity_collection(const char **activity_url,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
/* Set @a VCC_URL to the default VCC for our repository based on @a
* ORIG_PATH for the session @a SESSION, ensuring that the VCC URL and
- * repository root URLs are cached in @a SESSION. Use @a CONN for any
- * required network communications if it is non-NULL; otherwise use the
- * default connection.
+ * repository root URLs are cached in @a SESSION.
*
- * All temporary allocations will be made in @a POOL. */
+ * All temporary allocations will be made in @a SCRATCH_POOL. */
svn_error_t *
svn_ra_serf__discover_vcc(const char **vcc_url,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/* Set @a REPORT_TARGET to the URI of the resource at which generic
- * (path-agnostic) REPORTs should be aimed for @a SESSION. Use @a
- * CONN for any required network communications if it is non-NULL;
- * otherwise use the default connection.
+ * (path-agnostic) REPORTs should be aimed for @a SESSION.
*
* All temporary allocations will be made in @a POOL.
*/
svn_error_t *
svn_ra_serf__report_resource(const char **report_target,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
apr_pool_t *pool);
/* Set @a REL_PATH to a path (not URI-encoded) relative to the root of
@@ -1261,7 +1102,6 @@ svn_error_t *
svn_ra_serf__get_relative_path(const char **rel_path,
const char *orig_path,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
apr_pool_t *pool);
@@ -1288,11 +1128,9 @@ svn_ra_serf__get_youngest_revnum(svn_rev
The DAV RA provider(s) solve this by generating a URL that is specific
to a revision by using a URL into a "baseline collection".
- For a specified SESSION, with an optional CONN (if NULL, then the
- session's default connection will be used; specifically SESSION->conns[0]),
- generate a revision-stable URL for URL at REVISION. If REVISION is
- SVN_INVALID_REVNUM, then the stable URL will refer to the youngest
- revision at the time this function was called.
+ For a specified SESSION, generate a revision-stable URL for URL at
+ REVISION. If REVISION is SVN_INVALID_REVNUM, then the stable URL will
+ refer to the youngest revision at the time this function was called.
If URL is NULL, then the session root will be used.
@@ -1311,7 +1149,6 @@ svn_error_t *
svn_ra_serf__get_stable_url(const char **stable_url,
svn_revnum_t *latest_revnum,
svn_ra_serf__session_t *session,
- svn_ra_serf__connection_t *conn,
const char *url,
svn_revnum_t revision,
apr_pool_t *result_pool,
@@ -1461,7 +1298,12 @@ svn_ra_serf__get_dated_revision(svn_ra_s
apr_time_t tm,
apr_pool_t *pool);
-/* Implements svn_ra__vtable_t.get_commit_editor(). */
+/* Implements svn_ra__vtable_t.get_commit_editor().
+ *
+ * Note: Like other commit editors, the returned editor requires that the
+ * @c copyfrom_path parameter passed to its @c add_file and @c add_directory
+ * methods is a URL, not a relative path.
+ */
svn_error_t *
svn_ra_serf__get_commit_editor(svn_ra_session_t *session,
const svn_delta_editor_t **editor,