[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Add config option to disable neon compression

From: Karl Fogel <kfogel_at_newton.ch.collab.net>
Date: 2002-11-18 03:30:01 CET

Justin Erenkrantz <jerenkrantz@apache.org> writes:
> This patch allows the user to add:
>
> [miscellany]
> do_compression = no
>
> and Subversion will not send 'Accept-Encoding: gzip' to the server for
> any DAV requests.

+1 on the feature, but two concerns about this interface:

First, how about just "compression" instead of "do_compression"?

Second, "miscellany" :-)? The entire `config' file is already a
grab-bag of shameless miscellany, heh. But in this case, I think we
could categorize a little more specifically, since this option really
applies only to ra_dav:

   [dav]
   compression = no

There may be other uses of `compression' in the future, such as
compressed text-bases in the working copy, or a different compression
for a different network layer, or whatever. And from the other side,
there will probably be more [dav] options in the future anyway.

I see you've checked it in already, which is fine. We can get a
consensus here before changing it...

-K

> Works for me in both cases...
>
> Please yell at me (literally in the case of those here at the
> Hackathon) if you have any questions! -- justin* subversion/libsvn_ra_dav/fetch.c (custom_get_request),
> subversion/libsvn_ra_dav/util.c (svn_ra_dav__parsed_request):
> Look for [miscellany].do_compression in the config file, then
> conditionally disable neon's zlib compression if value isn't 'yes'
>
> Index: subversion/libsvn_ra_dav/fetch.c
> ===================================================================
> --- subversion/libsvn_ra_dav/fetch.c (revision 3814)
> +++ subversion/libsvn_ra_dav/fetch.c (working copy)
> @@ -44,6 +44,7 @@
> #include "svn_xml.h"
> #include "svn_dav.h"
> #include "svn_time.h"
> +#include "svn_config.h"
>
> #include "ra_dav.h"
>
> @@ -444,12 +445,25 @@
> {
> custom_get_ctx_t cgc = { 0 };
> const char *delta_base;
> + const char *do_compression;
> ne_request *req;
> ne_decompress *decompress;
> svn_error_t *err;
> + svn_config_t *cfg;
> int code;
> int decompress_rv;
> + int decompress_on;
>
> + SVN_ERR( svn_config_read_config(&cfg, pool) );
> +
> + svn_config_get(cfg, &do_compression, "miscellany",
> "do_compression", "yes");
> + if (strcasecmp(do_compression, "yes") == 0) {
> + decompress_on = 1;
> + }
> + else {
> + decompress_on = 0;
> + }
> +
> /* See if we can get a version URL for this resource. This will
> refer to
> what we already have in the working copy, thus we can get a diff
> against
> this particular resource. */
> @@ -482,7 +496,13 @@
> }
>
> /* add in a reader to capture the body of the response. */
> - decompress = ne_decompress_reader(req, ne_accept_2xx, reader, &cgc);
> + if (decompress_on) {
> + decompress = ne_decompress_reader(req, ne_accept_2xx, reader,
> &cgc);
> + }
> + else {
> + decompress = NULL;
> + ne_add_response_body_reader(req, ne_accept_2xx, reader, &cgc);
> + }
>
> /* complete initialization of the body reading context */
> cgc.subctx = subctx;
> @@ -493,7 +513,12 @@
> 226 /* IM Used */,
> pool);
>
> - decompress_rv = ne_decompress_destroy(decompress);
> + if (decompress) {
> + decompress_rv = ne_decompress_destroy(decompress);
> + }
> + else {
> + decompress_rv = 0;
> + }
>
> /* we no longer need this */
> if (cgc.ctype.value != NULL)
> Index: subversion/libsvn_ra_dav/util.c
> ===================================================================
> --- subversion/libsvn_ra_dav/util.c (revision 3814)
> +++ subversion/libsvn_ra_dav/util.c (working copy)
> @@ -25,6 +25,7 @@
> #include "svn_string.h"
> #include "svn_xml.h"
> #include "svn_path.h"
> +#include "svn_config.h"
>
> #include "ra_dav.h"
>
> @@ -216,10 +217,23 @@
> ne_xml_parser *error_parser;
> int rv;
> int decompress_rv;
> + int decompress_on;
> int code;
> const char *msg;
> + const char *do_compression;
> + svn_config_t *cfg;
> svn_error_t *err = SVN_NO_ERROR;
>
> + SVN_ERR( svn_config_read_config(&cfg, pool) );
> +
> + svn_config_get(cfg, &do_compression, "miscellany",
> "do_compression", "yes");
> + if (strcasecmp(do_compression, "yes") == 0) {
> + decompress_on = 1;
> + }
> + else {
> + decompress_on = 0;
> + }
> +
> /* create/prep the request */
> req = ne_request_create(ras->sess, method, url);
>
> @@ -243,27 +257,51 @@
>
> /* Register the "main" accepter and body-reader with the request --
> the one to use when the HTTP status is 2XX */
> - decompress_main = ne_decompress_reader(req, ne_accept_2xx,
> - ne_xml_parse_v,
> success_parser);
> + if (decompress_on)
> + {
> + decompress_main = ne_decompress_reader(req, ne_accept_2xx,
> + ne_xml_parse_v,
> success_parser);
> + }
> + else
> + {
> + decompress_main = NULL;
> + ne_add_response_body_reader(req, ne_accept_2xx, ne_xml_parse_v,
> + success_parser);
> + }
>
> /* Register the "error" accepter and body-reader with the request --
> the one to use when HTTP status is *not* 2XX */
> - decompress_err = ne_decompress_reader(req, ra_dav_error_accepter,
> - ne_xml_parse_v, error_parser);
> + if (decompress_on)
> + {
> + decompress_err = ne_decompress_reader(req,
> ra_dav_error_accepter,
> + ne_xml_parse_v,
> error_parser);
> + }
> + else
> + {
> + decompress_err = NULL;
> + ne_add_response_body_reader(req, ra_dav_error_accepter,
> ne_xml_parse_v,
> + error_parser);
> + }
>
> /* run the request and get the resulting status code. */
> rv = ne_request_dispatch(req);
>
> - decompress_rv = ne_decompress_destroy(decompress_main);
> - if (decompress_rv != 0)
> + if (decompress_main)
> {
> - rv = decompress_rv;
> + decompress_rv = ne_decompress_destroy(decompress_main);
> + if (decompress_rv != 0)
> + {
> + rv = decompress_rv;
> + }
> }
>
> - decompress_rv = ne_decompress_destroy(decompress_err);
> - if (decompress_rv != 0)
> + if (decompress_err)
> {
> - rv = decompress_rv;
> + decompress_rv = ne_decompress_destroy(decompress_err);
> + if (decompress_rv != 0)
> + {
> + rv = decompress_rv;
> + }
> }
>
> code = ne_get_status(req)->code;
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Mon Nov 18 04:04:57 2002

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.