summaryrefslogtreecommitdiff
path: root/subversion/libsvn_ra_serf/merge.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_ra_serf/merge.c')
-rw-r--r--subversion/libsvn_ra_serf/merge.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/subversion/libsvn_ra_serf/merge.c b/subversion/libsvn_ra_serf/merge.c
index 0a2fd5465b590..227670b9a2297 100644
--- a/subversion/libsvn_ra_serf/merge.c
+++ b/subversion/libsvn_ra_serf/merge.c
@@ -79,6 +79,7 @@ typedef struct merge_context_t
apr_hash_t *lock_tokens;
svn_boolean_t keep_locks;
+ svn_boolean_t disable_merge_response;
const char *merge_resource_url; /* URL of resource to be merged. */
const char *merge_url; /* URL at which the MERGE request is aimed. */
@@ -275,12 +276,17 @@ setup_merge_headers(serf_bucket_t *headers,
apr_pool_t *scratch_pool)
{
merge_context_t *ctx = baton;
+ apr_array_header_t *vals = apr_array_make(scratch_pool, 2,
+ sizeof(const char *));
if (!ctx->keep_locks)
- {
- serf_bucket_headers_set(headers, SVN_DAV_OPTIONS_HEADER,
- SVN_DAV_OPTION_RELEASE_LOCKS);
- }
+ APR_ARRAY_PUSH(vals, const char *) = SVN_DAV_OPTION_RELEASE_LOCKS;
+ if (ctx->disable_merge_response)
+ APR_ARRAY_PUSH(vals, const char *) = SVN_DAV_OPTION_NO_MERGE_RESPONSE;
+
+ if (vals->nelts > 0)
+ serf_bucket_headers_set(headers, SVN_DAV_OPTIONS_HEADER,
+ svn_cstring_join2(vals, " ", FALSE, scratch_pool));
return SVN_NO_ERROR;
}
@@ -412,6 +418,13 @@ svn_ra_serf__run_merge(const svn_commit_info_t **commit_info,
merge_ctx->lock_tokens = lock_tokens;
merge_ctx->keep_locks = keep_locks;
+ /* We don't need the full merge response when working over HTTPv2.
+ * Over HTTPv1, this response is only required with a non-null
+ * svn_ra_push_wc_prop_func_t callback. */
+ merge_ctx->disable_merge_response =
+ SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session) ||
+ session->wc_callbacks->push_wc_prop == NULL;
+
merge_ctx->commit_info = svn_create_commit_info(result_pool);
merge_ctx->merge_url = session->session_url.path;