/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_getdate_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool /* request pool */, apr_pool_t *scratch_pool) { serf_bucket_t *buckets; date_context_t *date_ctx = baton; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:dated-rev-report", "xmlns:S", SVN_XML_NAMESPACE, "xmlns:D", "DAV:", SVN_VA_NULL); svn_ra_serf__add_tag_buckets(buckets, "D:" SVN_DAV__CREATIONDATE, svn_time_to_cstring(date_ctx->time, pool), alloc); svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:dated-rev-report"); *body_bkt = buckets; return SVN_NO_ERROR; }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_mergeinfo_body(serf_bucket_t **bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool /* request pool */, apr_pool_t *scratch_pool) { mergeinfo_context_t *mergeinfo_ctx = baton; serf_bucket_t *body_bkt; body_bkt = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(body_bkt, alloc, "S:" SVN_DAV__MERGEINFO_REPORT, "xmlns:S", SVN_XML_NAMESPACE, SVN_VA_NULL); svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__REVISION, apr_ltoa(pool, mergeinfo_ctx->revision), alloc); svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__INHERIT, svn_inheritance_to_word(mergeinfo_ctx->inherit), alloc); if (mergeinfo_ctx->include_descendants) { svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__INCLUDE_DESCENDANTS, "yes", alloc); } if (mergeinfo_ctx->paths) { int i; for (i = 0; i < mergeinfo_ctx->paths->nelts; i++) { const char *this_path = APR_ARRAY_IDX(mergeinfo_ctx->paths, i, const char *); svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__PATH, this_path, alloc); } }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_file_revs_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool /* request pool */, apr_pool_t *scratch_pool) { serf_bucket_t *buckets; blame_context_t *blame_ctx = baton; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:file-revs-report", "xmlns:S", SVN_XML_NAMESPACE, SVN_VA_NULL); svn_ra_serf__add_tag_buckets(buckets, "S:start-revision", apr_ltoa(pool, blame_ctx->start), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:end-revision", apr_ltoa(pool, blame_ctx->end), alloc); if (blame_ctx->include_merged_revisions) { svn_ra_serf__add_empty_tag_buckets(buckets, alloc, "S:include-merged-revisions", SVN_VA_NULL); } svn_ra_serf__add_tag_buckets(buckets, "S:path", blame_ctx->path, alloc); svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:file-revs-report"); *body_bkt = buckets; return SVN_NO_ERROR; }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_gls_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { serf_bucket_t *buckets; gls_context_t *gls_ctx = baton; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:get-location-segments", "xmlns:S", SVN_XML_NAMESPACE, NULL); svn_ra_serf__add_tag_buckets(buckets, "S:path", gls_ctx->path, alloc); svn_ra_serf__add_tag_buckets(buckets, "S:peg-revision", apr_ltoa(pool, gls_ctx->peg_revision), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:start-revision", apr_ltoa(pool, gls_ctx->start_rev), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:end-revision", apr_ltoa(pool, gls_ctx->end_rev), alloc); svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:get-location-segments"); *body_bkt = buckets; return SVN_NO_ERROR; }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_get_locations_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { serf_bucket_t *buckets; loc_context_t *loc_ctx = baton; int i; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:get-locations", "xmlns:S", SVN_XML_NAMESPACE, "xmlns:D", "DAV:", NULL); svn_ra_serf__add_tag_buckets(buckets, "S:path", loc_ctx->path, alloc); svn_ra_serf__add_tag_buckets(buckets, "S:peg-revision", apr_ltoa(pool, loc_ctx->peg_revision), alloc); for (i = 0; i < loc_ctx->location_revisions->nelts; i++) { svn_revnum_t rev = APR_ARRAY_IDX(loc_ctx->location_revisions, i, svn_revnum_t); svn_ra_serf__add_tag_buckets(buckets, "S:location-revision", apr_ltoa(pool, rev), alloc); } svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:get-locations"); *body_bkt = buckets; return SVN_NO_ERROR; }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_getdrev_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { serf_bucket_t *buckets; drev_context_t *drev_ctx = baton; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:get-deleted-rev-report", "xmlns:S", SVN_XML_NAMESPACE, "xmlns:D", "DAV:", NULL, NULL); svn_ra_serf__add_tag_buckets(buckets, "S:path", drev_ctx->path, alloc); svn_ra_serf__add_tag_buckets(buckets, "S:peg-revision", apr_ltoa(pool, drev_ctx->peg_revision), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:end-revision", apr_ltoa(pool, drev_ctx->end_revision), alloc); svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:get-deleted-rev-report"); *body_bkt = buckets; return SVN_NO_ERROR; }
void svn_ra_serf__merge_lock_token_list(apr_hash_t *lock_tokens, const char *parent, serf_bucket_t *body, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { apr_hash_index_t *hi; if (!lock_tokens || apr_hash_count(lock_tokens) == 0) return; svn_ra_serf__add_open_tag_buckets(body, alloc, "S:lock-token-list", "xmlns:S", SVN_XML_NAMESPACE, SVN_VA_NULL); for (hi = apr_hash_first(pool, lock_tokens); hi; hi = apr_hash_next(hi)) { const void *key; apr_ssize_t klen; void *val; svn_string_t path; apr_hash_this(hi, &key, &klen, &val); path.data = key; path.len = klen; if (parent && !svn_relpath_skip_ancestor(parent, key)) continue; svn_ra_serf__add_open_tag_buckets(body, alloc, "S:lock", SVN_VA_NULL); svn_ra_serf__add_open_tag_buckets(body, alloc, "lock-path", SVN_VA_NULL); svn_ra_serf__add_cdata_len_buckets(body, alloc, path.data, path.len); svn_ra_serf__add_close_tag_buckets(body, alloc, "lock-path"); svn_ra_serf__add_tag_buckets(body, "lock-token", val, alloc); svn_ra_serf__add_close_tag_buckets(body, alloc, "S:lock"); } svn_ra_serf__add_close_tag_buckets(body, alloc, "S:lock-token-list"); }
static svn_error_t * create_options_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { serf_bucket_t *body; body = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_xml_header_buckets(body, alloc); svn_ra_serf__add_open_tag_buckets(body, alloc, "D:options", "xmlns:D", "DAV:", NULL); svn_ra_serf__add_tag_buckets(body, "D:activity-collection-set", NULL, alloc); svn_ra_serf__add_close_tag_buckets(body, alloc, "D:options"); *body_bkt = body; return SVN_NO_ERROR; }
svn_error_t * svn_ra_serf__get_location_segments(svn_ra_session_t *ra_session, const char *path, svn_revnum_t peg_revision, svn_revnum_t start_rev, svn_revnum_t end_rev, svn_location_segment_receiver_t receiver, void *receiver_baton, apr_pool_t *pool) { gls_context_t *gls_ctx; svn_ra_serf__session_t *session = ra_session->priv; svn_ra_serf__handler_t *handler; svn_ra_serf__xml_parser_t *parser_ctx; serf_bucket_t *buckets; const char *relative_url, *basecoll_url, *req_url; svn_error_t *err; gls_ctx = apr_pcalloc(pool, sizeof(*gls_ctx)); gls_ctx->receiver = receiver; gls_ctx->receiver_baton = receiver_baton; gls_ctx->subpool = svn_pool_create(pool); gls_ctx->inside_report = FALSE; gls_ctx->error = SVN_NO_ERROR; gls_ctx->done = FALSE; buckets = serf_bucket_aggregate_create(session->bkt_alloc); svn_ra_serf__add_open_tag_buckets(buckets, session->bkt_alloc, "S:get-location-segments", "xmlns:S", SVN_XML_NAMESPACE, NULL); svn_ra_serf__add_tag_buckets(buckets, "S:path", path, session->bkt_alloc); svn_ra_serf__add_tag_buckets(buckets, "S:peg-revision", apr_ltoa(pool, peg_revision), session->bkt_alloc); svn_ra_serf__add_tag_buckets(buckets, "S:start-revision", apr_ltoa(pool, start_rev), session->bkt_alloc); svn_ra_serf__add_tag_buckets(buckets, "S:end-revision", apr_ltoa(pool, end_rev), session->bkt_alloc); svn_ra_serf__add_close_tag_buckets(buckets, session->bkt_alloc, "S:get-location-segments"); SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session, NULL, NULL, peg_revision, NULL, pool)); req_url = svn_path_url_add_component(basecoll_url, relative_url, pool); handler = apr_pcalloc(pool, sizeof(*handler)); handler->method = "REPORT"; handler->path = req_url; handler->body_buckets = buckets; handler->body_type = "text/xml"; handler->conn = session->conns[0]; handler->session = session; parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx)); parser_ctx->pool = pool; parser_ctx->user_data = gls_ctx; parser_ctx->start = start_gls; parser_ctx->end = end_gls; parser_ctx->status_code = &gls_ctx->status_code; parser_ctx->done = &gls_ctx->done; handler->response_handler = svn_ra_serf__handle_xml_parser; handler->response_baton = parser_ctx; svn_ra_serf__request_create(handler); err = svn_ra_serf__context_run_wait(&gls_ctx->done, session, pool); if (gls_ctx->error || parser_ctx->error) { svn_error_clear(err); err = SVN_NO_ERROR; SVN_ERR(gls_ctx->error); SVN_ERR(parser_ctx->error); } if (gls_ctx->inside_report) err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, _("Location segment report failed on '%s'@'%ld'"), path, peg_revision); SVN_ERR(svn_ra_serf__error_on_status(gls_ctx->status_code, handler->path)); svn_pool_destroy(gls_ctx->subpool); if (err && (err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)) return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err, NULL); return err; }
/* Implements svn_ra_serf__request_body_delegate_t */ static svn_error_t * create_list_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool /* request pool */, apr_pool_t *scratch_pool) { serf_bucket_t *buckets; list_context_t *list_ctx = baton; int i; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:list-report", "xmlns:S", SVN_XML_NAMESPACE, SVN_VA_NULL); svn_ra_serf__add_tag_buckets(buckets, "S:path", list_ctx->path, alloc); svn_ra_serf__add_tag_buckets(buckets, "S:revision", apr_ltoa(pool, list_ctx->revision), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:depth", svn_depth_to_word(list_ctx->depth), alloc); if (list_ctx->patterns) { for (i = 0; i < list_ctx->patterns->nelts; i++) { char *name = APR_ARRAY_IDX(list_ctx->patterns, i, char *); svn_ra_serf__add_tag_buckets(buckets, "S:pattern", name, alloc); } if (list_ctx->patterns->nelts == 0) { svn_ra_serf__add_empty_tag_buckets(buckets, alloc, "S:no-patterns", SVN_VA_NULL); } } for (i = 0; i < list_ctx->props->nelts; i++) { const svn_ra_serf__dav_props_t *prop = &APR_ARRAY_IDX(list_ctx->props, i, const svn_ra_serf__dav_props_t); const char *name = apr_pstrcat(pool, prop->xmlns, prop->name, SVN_VA_NULL); svn_ra_serf__add_tag_buckets(buckets, "S:prop", name, alloc); } svn_ra_serf__add_close_tag_buckets(buckets, alloc, "S:list-report"); *body_bkt = buckets; return SVN_NO_ERROR; }
static svn_error_t * create_log_body(serf_bucket_t **body_bkt, void *baton, serf_bucket_alloc_t *alloc, apr_pool_t *pool) { serf_bucket_t *buckets; log_context_t *log_ctx = baton; buckets = serf_bucket_aggregate_create(alloc); svn_ra_serf__add_open_tag_buckets(buckets, alloc, "S:log-report", "xmlns:S", SVN_XML_NAMESPACE, NULL); svn_ra_serf__add_tag_buckets(buckets, "S:start-revision", apr_ltoa(pool, log_ctx->start), alloc); svn_ra_serf__add_tag_buckets(buckets, "S:end-revision", apr_ltoa(pool, log_ctx->end), alloc); if (log_ctx->limit) { svn_ra_serf__add_tag_buckets(buckets, "S:limit", apr_ltoa(pool, log_ctx->limit), alloc); } if (log_ctx->changed_paths) { svn_ra_serf__add_tag_buckets(buckets, "S:discover-changed-paths", NULL, alloc); } if (log_ctx->strict_node_history) { svn_ra_serf__add_tag_buckets(buckets, "S:strict-node-history", NULL, alloc); } if (log_ctx->include_merged_revisions) { svn_ra_serf__add_tag_buckets(buckets, "S:include-merged-revisions", NULL, alloc); } if (log_ctx->revprops) { int i; for (i = 0; i < log_ctx->revprops->nelts; i++) { char *name = APR_ARRAY_IDX(log_ctx->revprops, i, char *); svn_ra_serf__add_tag_buckets(buckets, "S:revprop", name, alloc); } if (log_ctx->revprops->nelts == 0) { svn_ra_serf__add_tag_buckets(buckets, "S:no-revprops", NULL, alloc); } }