diff options
Diffstat (limited to 'subversion/libsvn_ra_serf/merge.c')
-rw-r--r-- | subversion/libsvn_ra_serf/merge.c | 21 |
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; |