From cf46733632c7279a9fd0fe6ce26f9185a4ae82a9 Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Sat, 5 Aug 2017 16:22:51 +0000 Subject: subversion-1.9.7 --- subversion/mod_dav_svn/merge.c | 95 ++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 46 deletions(-) (limited to 'subversion/mod_dav_svn/merge.c') diff --git a/subversion/mod_dav_svn/merge.c b/subversion/mod_dav_svn/merge.c index 3d6d80b..5407a0f 100644 --- a/subversion/mod_dav_svn/merge.c +++ b/subversion/mod_dav_svn/merge.c @@ -72,21 +72,20 @@ send_response(const dav_svn_repos *repos, svn_fs_root_t *root, const char *path, svn_boolean_t is_dir, - ap_filter_t *output, + dav_svn__output *output, apr_bucket_brigade *bb, apr_pool_t *pool) { const char *href; const char *vsn_url; - apr_status_t status; svn_revnum_t rev_to_use; href = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_PUBLIC, SVN_IGNORED_REVNUM, path, 0 /* add_href */, pool); rev_to_use = dav_svn__get_safe_cr(root, path, pool); vsn_url = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_VERSION, - rev_to_use, path, 0 /* add_href */, pool); - status = ap_fputstrs(output, bb, + rev_to_use, path, FALSE /* add_href */, pool); + SVN_ERR(dav_svn__brigade_putstrs(bb, output, "" DEBUG_CR "", apr_xml_quote_string(pool, href, 1), @@ -103,9 +102,7 @@ send_response(const dav_svn_repos *repos, "HTTP/1.1 200 OK" DEBUG_CR "" DEBUG_CR "" DEBUG_CR, - NULL); - if (status != APR_SUCCESS) - return svn_error_wrap_apr(status, "Can't write response to output"); + SVN_VA_NULL)); return SVN_NO_ERROR; } @@ -115,7 +112,7 @@ static svn_error_t * do_resources(const dav_svn_repos *repos, svn_fs_root_t *root, svn_revnum_t revision, - ap_filter_t *output, + dav_svn__output *output, apr_bucket_brigade *bb, apr_pool_t *pool) { @@ -136,12 +133,13 @@ do_resources(const dav_svn_repos *repos, const void *key; void *val; const char *path; + apr_ssize_t path_len; svn_fs_path_change2_t *change; svn_boolean_t send_self; svn_boolean_t send_parent; svn_pool_clear(subpool); - apr_hash_this(hi, &key, NULL, &val); + apr_hash_this(hi, &key, &path_len, &val); path = key; change = val; @@ -170,14 +168,14 @@ do_resources(const dav_svn_repos *repos, { /* If we haven't already sent this path, send it (and then remember that we sent it). */ - if (! svn_hash_gets(sent, path)) + if (! apr_hash_get(sent, path, path_len)) { svn_node_kind_t kind; SVN_ERR(svn_fs_check_path(&kind, root, path, subpool)); SVN_ERR(send_response(repos, root, path, kind == svn_node_dir, output, bb, subpool)); - svn_hash_sets(sent, path, (void *)1); + apr_hash_set(sent, path, path_len, (void *)1); } } if (send_parent) @@ -208,7 +206,7 @@ do_resources(const dav_svn_repos *repos, */ dav_error * -dav_svn__merge_response(ap_filter_t *output, +dav_svn__merge_response(dav_svn__output *output, const dav_svn_repos *repos, svn_revnum_t new_rev, const char *post_commit_err, @@ -224,7 +222,6 @@ dav_svn__merge_response(ap_filter_t *output, svn_string_t *creationdate, *creator_displayname; const char *post_commit_err_elem = NULL, *post_commit_header_info = NULL; - apr_status_t status; serr = svn_fs_revision_root(&root, repos->fs, new_rev, pool); if (serr != NULL) @@ -235,13 +232,14 @@ dav_svn__merge_response(ap_filter_t *output, repos->pool); } - bb = apr_brigade_create(pool, output->c->bucket_alloc); + bb = apr_brigade_create(pool, + dav_svn__output_get_bucket_alloc(output)); /* prep some strings */ /* the HREF for the baseline is actually the VCC */ vcc = dav_svn__build_uri(repos, DAV_SVN__BUILD_URI_VCC, SVN_IGNORED_REVNUM, - NULL, 0 /* add_href */, pool); + NULL, FALSE /* add_href */, pool); /* the version-name of the baseline is the revision number */ rev = apr_psprintf(pool, "%ld", new_rev); @@ -285,7 +283,7 @@ dav_svn__merge_response(ap_filter_t *output, } - status = ap_fputstrs(output, bb, + serr = dav_svn__brigade_putstrs(bb, output, DAV_XML_HEADER DEBUG_CR "" DEBUG_CR, post_commit_err_elem, DEBUG_CR "", rev, "" DEBUG_CR, - NULL); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + SVN_VA_NULL); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); if (creationdate) { - status = ap_fputstrs(output, bb, + serr = dav_svn__brigade_putstrs(bb, output, "", apr_xml_quote_string(pool, creationdate->data, 1), "" DEBUG_CR, - NULL); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + SVN_VA_NULL); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); } if (creator_displayname) { - status = ap_fputstrs(output, bb, + serr = dav_svn__brigade_putstrs(bb, output, "", apr_xml_quote_string(pool, creator_displayname->data, 1), "" DEBUG_CR, - NULL); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + SVN_VA_NULL); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); } - status = ap_fputstrs(output, bb, + serr = dav_svn__brigade_putstrs(bb, output, "" DEBUG_CR "HTTP/1.1 200 OK" DEBUG_CR "" DEBUG_CR "" DEBUG_CR, - - NULL); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + SVN_VA_NULL); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); /* ONLY have dir_delta drive the editor if the caller asked us to generate a full MERGE response. svn clients can ask us to @@ -370,18 +371,20 @@ dav_svn__merge_response(ap_filter_t *output, } /* wrap up the merge response */ - status = ap_fputs(output, bb, - "" DEBUG_CR - "" DEBUG_CR); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + serr = dav_svn__brigade_puts(bb, output, + "" DEBUG_CR + "" DEBUG_CR); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); /* send whatever is left in the brigade */ - status = ap_pass_brigade(output, bb); - if (status != APR_SUCCESS) - return dav_svn__new_error(repos->pool, HTTP_INTERNAL_SERVER_ERROR, 0, - "Could not write output"); + serr = dav_svn__output_pass_brigade(output, bb); + if (serr != NULL) + return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR, + "Could not write output", + repos->pool); return NULL; } -- cgit v1.2.1