[[[ Follow up to r28251: transmit the new include_descendents boolean over DAV. * subversion/include/private/svn_dav_protocol.h (SVN_DAV__INCLUDE_DESCENDENTS): New child element. * subversion/mod_dav_svn/reports/mergeinfo.c (dav_svn__get_mergeinfo_report): Read "include-descendents", pass along the resulting value to svn_repos_fs_get_mergeinfo(). * subversion/libsvn_ra_serf/mergeinfo.c (struct mergeinfo_context_t): New include_descendents member. (svn_ra_serf__get_mergeinfo): Set include_descendents in mergeinfo_ctx. (create_mergeinfo_body): Add include_descendents element iff mergeinfo_ctx->include_descendents is true. * subversion/libsvn_ra_neon/mergeinfo.c (svn_ra_neon__get_mergeinfo): Send include_descendents. ]]] Index: subversion/include/private/svn_dav_protocol.h =================================================================== --- subversion/include/private/svn_dav_protocol.h (revision 28474) +++ subversion/include/private/svn_dav_protocol.h (working copy) @@ -38,6 +38,7 @@ #define SVN_DAV__PATH "path" #define SVN_DAV__INHERIT "inherit" #define SVN_DAV__REVISION "revision" +#define SVN_DAV__INCLUDE_DESCENDENTS "include-descendents" #define SVN_DAV__VERSION_NAME "version-name" #ifdef __cplusplus Index: subversion/libsvn_ra_serf/mergeinfo.c =================================================================== --- subversion/libsvn_ra_serf/mergeinfo.c (revision 28474) +++ subversion/libsvn_ra_serf/mergeinfo.c (working copy) @@ -57,6 +57,7 @@ const apr_array_header_t *paths; svn_revnum_t revision; svn_mergeinfo_inheritance_t inherit; + svn_boolean_t include_descendents; } mergeinfo_context_t; static svn_error_t * @@ -191,6 +192,13 @@ svn_ra_serf__add_tag_buckets(body_bkt, "S:" SVN_DAV__INHERIT, svn_inheritance_to_word(mergeinfo_ctx->inherit), alloc); + if (mergeinfo_ctx->include_descendents) + { + svn_ra_serf__add_tag_buckets(body_bkt, "S:" + SVN_DAV__INCLUDE_DESCENDENTS, + "yes", alloc); + } + if (mergeinfo_ctx->paths) { for (i = 0; i < mergeinfo_ctx->paths->nelts; i++) @@ -221,7 +229,7 @@ const apr_array_header_t *paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit, - svn_boolean_t include_descendents, /*### TODO(reint): implement*/ + svn_boolean_t include_descendents, apr_pool_t *pool) { svn_error_t *err; @@ -248,6 +256,7 @@ mergeinfo_ctx->paths = paths; mergeinfo_ctx->revision = revision; mergeinfo_ctx->inherit = inherit; + mergeinfo_ctx->include_descendents = include_descendents; handler = apr_pcalloc(pool, sizeof(*handler)); Index: subversion/libsvn_ra_neon/mergeinfo.c =================================================================== --- subversion/libsvn_ra_neon/mergeinfo.c (revision 28474) +++ subversion/libsvn_ra_neon/mergeinfo.c (working copy) @@ -157,7 +157,7 @@ const apr_array_header_t *paths, svn_revnum_t revision, svn_mergeinfo_inheritance_t inherit, - svn_boolean_t include_descendents, /*### TODO(reint): implement*/ + svn_boolean_t include_descendents, apr_pool_t *pool) { int i, status_code; @@ -185,6 +185,16 @@ "%s" "", svn_inheritance_to_word(inherit))); + + if (include_descendents) + { + /* Send it only if true; server will default to "no". */ + svn_stringbuf_appendcstr(request_body, + apr_pstrdup(pool, + "yes" + "")); + } + if (paths) { for (i = 0; i < paths->nelts; i++) Index: subversion/mod_dav_svn/reports/mergeinfo.c =================================================================== --- subversion/mod_dav_svn/reports/mergeinfo.c (revision 28474) +++ subversion/mod_dav_svn/reports/mergeinfo.c (working copy) @@ -45,6 +45,7 @@ dav_error *derr = NULL; apr_xml_elem *child; apr_hash_t *mergeinfo; + svn_boolean_t include_descendents = FALSE; dav_svn__authz_read_baton arb; const dav_svn_repos *repos = resource->info->repos; const char *action; @@ -93,6 +94,14 @@ resource->pool); (*((const char **)(apr_array_push(paths)))) = target; } + else if (strcmp(child->name, SVN_DAV__INCLUDE_DESCENDENTS) == 0) + { + const char *word = dav_xml_get_cdata(child, resource->pool, 1); + if (strcmp(word, "yes") == 0) + include_descendents = TRUE; + /* Else the client isn't supposed to send anyway, so just + leave it false. */ + } /* else unknown element; skip it */ } @@ -104,7 +113,7 @@ bb = apr_brigade_create(resource->pool, output->c->bucket_alloc); serr = svn_repos_fs_get_mergeinfo(&mergeinfo, repos->repos, paths, rev, - inherit, FALSE, /* ### TODO(reint): get from client */ + inherit, include_descendents, dav_svn__authz_read_func(&arb), &arb, resource->pool); if (serr)