[[[
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)