You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2010/06/13 00:46:29 UTC
svn commit: r954145 - in /subversion/trunk/subversion/libsvn_ra_serf:
blame.c getlocations.c getlocationsegments.c
Author: ivan
Date: Sat Jun 12 22:46:29 2010
New Revision: 954145
URL: http://svn.apache.org/viewvc?rev=954145&view=rev
Log:
Create request body buckets on demand in libsvn_ra_serf.
* subversion/libsvn_ra_serf/blame.c
(blame_context_t): Add include_merged_revisions member.
(create_file_revs_body): New function.
(svn_ra_serf__get_file_revs): Copy parameters to blame_ctx and setup
create body delegate.
* subversion/libsvn_ra_serf/getlocations.c
(loc_context_t): Add path, location_revisions and peg_revision members
to use them to create body delegate.
(create_get_locations_body): New function.
(svn_ra_serf__get_locations): Copy parameters to loc_ctx and setup create
body delegate.
* subversion/libsvn_ra_serf/getlocationsegments.c
(gls_context_t): Add peg_revision, start_rev, end_rev and path members
to use them to create body delegate
(create_gls_body): New function.
(svn_ra_serf__get_location_segments): Copy parameters to gls_ctx and
setup create body delegate.
Modified:
subversion/trunk/subversion/libsvn_ra_serf/blame.c
subversion/trunk/subversion/libsvn_ra_serf/getlocations.c
subversion/trunk/subversion/libsvn_ra_serf/getlocationsegments.c
Modified: subversion/trunk/subversion/libsvn_ra_serf/blame.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/blame.c?rev=954145&r1=954144&r2=954145&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/blame.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/blame.c Sat Jun 12 22:46:29 2010
@@ -104,6 +104,7 @@ typedef struct {
const char *path;
svn_revnum_t start;
svn_revnum_t end;
+ svn_boolean_t include_merged_revisions;
/* are we done? */
svn_boolean_t done;
@@ -381,6 +382,46 @@ cdata_blame(svn_ra_serf__xml_parser_t *p
return SVN_NO_ERROR;
}
+static serf_bucket_t*
+create_file_revs_body(void *baton,
+ serf_bucket_alloc_t *alloc,
+ apr_pool_t *pool)
+{
+ serf_bucket_t *buckets;
+ blame_context_t *blame_ctx = baton;
+
+ buckets = serf_bucket_aggregate_create(alloc);
+
+ svn_ra_serf__add_open_tag_buckets(buckets, alloc,
+ "S:file-revs-report",
+ "xmlns:S", SVN_XML_NAMESPACE,
+ NULL);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:start-revision", apr_ltoa(pool, blame_ctx->start),
+ alloc);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:end-revision", apr_ltoa(pool, blame_ctx->end),
+ alloc);
+
+ if (blame_ctx->include_merged_revisions)
+ {
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:include-merged-revisions", NULL,
+ alloc);
+ }
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:path", blame_ctx->path,
+ alloc);
+
+ svn_ra_serf__add_close_tag_buckets(buckets, alloc,
+ "S:file-revs-report");
+
+ return buckets;
+}
+
svn_error_t *
svn_ra_serf__get_file_revs(svn_ra_session_t *ra_session,
const char *path,
@@ -395,48 +436,20 @@ svn_ra_serf__get_file_revs(svn_ra_sessio
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_parser_t *parser_ctx;
- serf_bucket_t *buckets;
const char *relative_url, *basecoll_url, *req_url;
int status_code;
svn_error_t *err;
blame_ctx = apr_pcalloc(pool, sizeof(*blame_ctx));
blame_ctx->pool = pool;
+ blame_ctx->path = path;
blame_ctx->file_rev = rev_handler;
blame_ctx->file_rev_baton = rev_handler_baton;
blame_ctx->start = start;
blame_ctx->end = end;
+ blame_ctx->include_merged_revisions = include_merged_revisions;
blame_ctx->done = FALSE;
- buckets = serf_bucket_aggregate_create(session->bkt_alloc);
-
- svn_ra_serf__add_open_tag_buckets(buckets, session->bkt_alloc,
- "S:file-revs-report",
- "xmlns:S", SVN_XML_NAMESPACE,
- NULL);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:start-revision", apr_ltoa(pool, start),
- session->bkt_alloc);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:end-revision", apr_ltoa(pool, end),
- session->bkt_alloc);
-
- if (include_merged_revisions)
- {
- svn_ra_serf__add_tag_buckets(buckets,
- "S:include-merged-revisions", NULL,
- session->bkt_alloc);
- }
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:path", path,
- session->bkt_alloc);
-
- svn_ra_serf__add_close_tag_buckets(buckets, session->bkt_alloc,
- "S:file-revs-report");
-
SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
NULL, session->repos_url.path,
end, NULL, pool));
@@ -446,8 +459,9 @@ svn_ra_serf__get_file_revs(svn_ra_sessio
handler->method = "REPORT";
handler->path = req_url;
- handler->body_buckets = buckets;
handler->body_type = "text/xml";
+ handler->body_delegate = create_file_revs_body;
+ handler->body_delegate_baton = blame_ctx;
handler->conn = session->conns[0];
handler->session = session;
Modified: subversion/trunk/subversion/libsvn_ra_serf/getlocations.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/getlocations.c?rev=954145&r1=954144&r2=954145&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/getlocations.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/getlocations.c Sat Jun 12 22:46:29 2010
@@ -63,6 +63,11 @@ typedef struct {
/* pool to allocate memory from */
apr_pool_t *pool;
+ /* parameters set by our caller */
+ const char *path;
+ const apr_array_header_t *location_revisions;
+ svn_revnum_t peg_revision;
+
/* Returned location hash */
apr_hash_t *paths;
@@ -175,6 +180,45 @@ end_getloc(svn_ra_serf__xml_parser_t *pa
return SVN_NO_ERROR;
}
+static serf_bucket_t*
+create_get_locations_body(void *baton,
+ serf_bucket_alloc_t *alloc,
+ apr_pool_t *pool)
+{
+ serf_bucket_t *buckets;
+ loc_context_t *loc_ctx = baton;
+ int i;
+
+ buckets = serf_bucket_aggregate_create(alloc);
+
+ svn_ra_serf__add_open_tag_buckets(buckets, alloc,
+ "S:get-locations",
+ "xmlns:S", SVN_XML_NAMESPACE,
+ "xmlns:D", "DAV:",
+ NULL);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:path", loc_ctx->path,
+ alloc);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:peg-revision", apr_ltoa(pool, loc_ctx->peg_revision),
+ alloc);
+
+ for (i = 0; i < loc_ctx->location_revisions->nelts; i++)
+ {
+ svn_revnum_t rev = APR_ARRAY_IDX(loc_ctx->location_revisions, i, svn_revnum_t);
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:location-revision", apr_ltoa(pool, rev),
+ alloc);
+ }
+
+ svn_ra_serf__add_close_tag_buckets(buckets, alloc,
+ "S:get-locations");
+
+ return buckets;
+}
+
svn_error_t *
svn_ra_serf__get_locations(svn_ra_session_t *ra_session,
apr_hash_t **locations,
@@ -187,45 +231,19 @@ svn_ra_serf__get_locations(svn_ra_sessio
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_parser_t *parser_ctx;
- serf_bucket_t *buckets;
const char *relative_url, *basecoll_url, *req_url;
- int i;
svn_error_t *err;
loc_ctx = apr_pcalloc(pool, sizeof(*loc_ctx));
loc_ctx->pool = pool;
+ loc_ctx->path = path;
+ loc_ctx->peg_revision = peg_revision;
+ loc_ctx->location_revisions = location_revisions;
loc_ctx->done = FALSE;
loc_ctx->paths = apr_hash_make(loc_ctx->pool);
*locations = loc_ctx->paths;
- buckets = serf_bucket_aggregate_create(session->bkt_alloc);
-
- svn_ra_serf__add_open_tag_buckets(buckets, session->bkt_alloc,
- "S:get-locations",
- "xmlns:S", SVN_XML_NAMESPACE,
- "xmlns:D", "DAV:",
- NULL);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:path", path,
- session->bkt_alloc);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:peg-revision", apr_ltoa(pool, peg_revision),
- session->bkt_alloc);
-
- for (i = 0; i < location_revisions->nelts; i++)
- {
- svn_revnum_t rev = APR_ARRAY_IDX(location_revisions, i, svn_revnum_t);
- svn_ra_serf__add_tag_buckets(buckets,
- "S:location-revision", apr_ltoa(pool, rev),
- session->bkt_alloc);
- }
-
- svn_ra_serf__add_close_tag_buckets(buckets, session->bkt_alloc,
- "S:get-locations");
-
SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
NULL, NULL, peg_revision, NULL,
pool));
@@ -236,7 +254,8 @@ svn_ra_serf__get_locations(svn_ra_sessio
handler->method = "REPORT";
handler->path = req_url;
- handler->body_buckets = buckets;
+ handler->body_delegate = create_get_locations_body;
+ handler->body_delegate_baton = loc_ctx;
handler->body_type = "text/xml";
handler->conn = session->conns[0];
handler->session = session;
Modified: subversion/trunk/subversion/libsvn_ra_serf/getlocationsegments.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/getlocationsegments.c?rev=954145&r1=954144&r2=954145&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/getlocationsegments.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/getlocationsegments.c Sat Jun 12 22:46:29 2010
@@ -40,6 +40,12 @@
typedef struct {
+ /* parameters set by our caller */
+ svn_revnum_t peg_revision;
+ svn_revnum_t start_rev;
+ svn_revnum_t end_rev;
+ const char *path;
+
/* location segment callback function/baton */
svn_location_segment_receiver_t receiver;
void *receiver_baton;
@@ -120,6 +126,45 @@ end_gls(svn_ra_serf__xml_parser_t *parse
return SVN_NO_ERROR;
}
+serf_bucket_t *create_gls_body(void *baton,
+ serf_bucket_alloc_t *alloc,
+ apr_pool_t *pool)
+{
+ serf_bucket_t *buckets;
+ gls_context_t *gls_ctx = baton;
+
+ buckets = serf_bucket_aggregate_create(alloc);
+
+ svn_ra_serf__add_open_tag_buckets(buckets, alloc,
+ "S:get-location-segments",
+ "xmlns:S", SVN_XML_NAMESPACE,
+ NULL);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:path", gls_ctx->path,
+ alloc);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:peg-revision",
+ apr_ltoa(pool, gls_ctx->peg_revision),
+ alloc);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:start-revision",
+ apr_ltoa(pool, gls_ctx->start_rev),
+ alloc);
+
+ svn_ra_serf__add_tag_buckets(buckets,
+ "S:end-revision",
+ apr_ltoa(pool, gls_ctx->end_rev),
+ alloc);
+
+ svn_ra_serf__add_close_tag_buckets(buckets, alloc,
+ "S:get-location-segments");
+
+ return buckets;
+}
+
svn_error_t *
svn_ra_serf__get_location_segments(svn_ra_session_t *ra_session,
const char *path,
@@ -134,46 +179,20 @@ svn_ra_serf__get_location_segments(svn_r
svn_ra_serf__session_t *session = ra_session->priv;
svn_ra_serf__handler_t *handler;
svn_ra_serf__xml_parser_t *parser_ctx;
- serf_bucket_t *buckets;
const char *relative_url, *basecoll_url, *req_url;
svn_error_t *err;
gls_ctx = apr_pcalloc(pool, sizeof(*gls_ctx));
+ gls_ctx->path = path;
+ gls_ctx->peg_revision = peg_revision;
+ gls_ctx->start_rev = start_rev;
+ gls_ctx->end_rev = end_rev;
gls_ctx->receiver = receiver;
gls_ctx->receiver_baton = receiver_baton;
gls_ctx->subpool = svn_pool_create(pool);
gls_ctx->inside_report = FALSE;
gls_ctx->done = FALSE;
- buckets = serf_bucket_aggregate_create(session->bkt_alloc);
-
- svn_ra_serf__add_open_tag_buckets(buckets, session->bkt_alloc,
- "S:get-location-segments",
- "xmlns:S", SVN_XML_NAMESPACE,
- NULL);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:path", path,
- session->bkt_alloc);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:peg-revision",
- apr_ltoa(pool, peg_revision),
- session->bkt_alloc);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:start-revision",
- apr_ltoa(pool, start_rev),
- session->bkt_alloc);
-
- svn_ra_serf__add_tag_buckets(buckets,
- "S:end-revision",
- apr_ltoa(pool, end_rev),
- session->bkt_alloc);
-
- svn_ra_serf__add_close_tag_buckets(buckets, session->bkt_alloc,
- "S:get-location-segments");
-
SVN_ERR(svn_ra_serf__get_baseline_info(&basecoll_url, &relative_url, session,
NULL, NULL, peg_revision, NULL, pool));
@@ -183,7 +202,8 @@ svn_ra_serf__get_location_segments(svn_r
handler->method = "REPORT";
handler->path = req_url;
- handler->body_buckets = buckets;
+ handler->body_delegate = create_gls_body;
+ handler->body_delegate_baton = gls_ctx;
handler->body_type = "text/xml";
handler->conn = session->conns[0];
handler->session = session;