All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	Matthew John Cheetham <mjcheetham@outlook.com>,
	M Hickford <mirth.hickford@gmail.com>
Subject: Re: [PATCH 03/13] http: use new headers for each object request
Date: Wed, 27 Mar 2024 09:02:31 +0100	[thread overview]
Message-ID: <ZgPSl0hWjH5B45Rt@tanuki> (raw)
In-Reply-To: <20240324011301.1553072-4-sandals@crustytoothpaste.net>

[-- Attachment #1: Type: text/plain, Size: 4997 bytes --]

On Sun, Mar 24, 2024 at 01:12:51AM +0000, brian m. carlson wrote:
> Currently we create one set of headers for all object requests and reuse
> it.  However, we'll need to adjust the headers for authentication
> purposes in the future, so let's create a new set for each request so
> that we can adjust them if the authentication changes.
> 
> Note that the cost of allocation here is tiny compared to the fact that
> we're making a network call, not to mention probably a full TLS
> connection, so this shouldn't have a significant impact on performance.
> Moreover, nobody who cares about performance is using the dumb HTTP
> protocol anyway, since it often makes huge numbers of requests compared
> to the smart protocol.
> 
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
>  http.c | 19 +++++++++++--------
>  http.h |  2 ++
>  2 files changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/http.c b/http.c
> index e73b136e58..1c2200da77 100644
> --- a/http.c
> +++ b/http.c
> @@ -128,7 +128,6 @@ static unsigned long empty_auth_useless =
>  	| CURLAUTH_DIGEST;
>  
>  static struct curl_slist *pragma_header;
> -static struct curl_slist *no_pragma_header;
>  static struct string_list extra_http_headers = STRING_LIST_INIT_DUP;
>  
>  static struct curl_slist *host_resolutions;

Nice to see that this also allows us to get rid of one more global
variable.

> @@ -299,6 +298,11 @@ size_t fwrite_null(char *ptr UNUSED, size_t eltsize UNUSED, size_t nmemb,
>  	return nmemb;
>  }
>  
> +static struct curl_slist *object_request_headers(void)
> +{
> +	return curl_slist_append(http_copy_default_headers(), "Pragma:");
> +}
> +
>  static void closedown_active_slot(struct active_request_slot *slot)
>  {
>  	active_requests--;
> @@ -1275,8 +1279,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
>  
>  	pragma_header = curl_slist_append(http_copy_default_headers(),
>  		"Pragma: no-cache");
> -	no_pragma_header = curl_slist_append(http_copy_default_headers(),
> -		"Pragma:");
>  
>  	{
>  		char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
> @@ -1360,8 +1362,6 @@ void http_cleanup(void)
>  	curl_slist_free_all(pragma_header);
>  	pragma_header = NULL;
>  
> -	curl_slist_free_all(no_pragma_header);
> -	no_pragma_header = NULL;
>  

Nit: this leaves behind two consecutive empty lines.

Patrick

>  	curl_slist_free_all(host_resolutions);
>  	host_resolutions = NULL;
> @@ -2370,6 +2370,7 @@ void release_http_pack_request(struct http_pack_request *preq)
>  	}
>  	preq->slot = NULL;
>  	strbuf_release(&preq->tmpfile);
> +	curl_slist_free_all(preq->headers);
>  	free(preq->url);
>  	free(preq);
>  }
> @@ -2454,11 +2455,11 @@ struct http_pack_request *new_direct_http_pack_request(
>  	}
>  
>  	preq->slot = get_active_slot();
> +	preq->headers = object_request_headers();
>  	curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEDATA, preq->packfile);
>  	curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
>  	curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
> -	curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
> -		no_pragma_header);
> +	curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER, preq->headers);
>  
>  	/*
>  	 * If there is data present from a previous transfer attempt,
> @@ -2624,13 +2625,14 @@ struct http_object_request *new_http_object_request(const char *base_url,
>  	}
>  
>  	freq->slot = get_active_slot();
> +	freq->headers = object_request_headers();
>  
>  	curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
>  	curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
>  	curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
>  	curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
>  	curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
> -	curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
> +	curl_easy_setopt(freq->slot->curl, CURLOPT_HTTPHEADER, freq->headers);
>  
>  	/*
>  	 * If we have successfully processed data from a previous fetch
> @@ -2718,5 +2720,6 @@ void release_http_object_request(struct http_object_request *freq)
>  		release_active_slot(freq->slot);
>  		freq->slot = NULL;
>  	}
> +	curl_slist_free_all(freq->headers);
>  	strbuf_release(&freq->tmpfile);
>  }
> diff --git a/http.h b/http.h
> index 3af19a8bf5..c5f8cc4620 100644
> --- a/http.h
> +++ b/http.h
> @@ -196,6 +196,7 @@ struct http_pack_request {
>  	FILE *packfile;
>  	struct strbuf tmpfile;
>  	struct active_request_slot *slot;
> +	struct curl_slist *headers;
>  };
>  
>  struct http_pack_request *new_http_pack_request(
> @@ -229,6 +230,7 @@ struct http_object_request {
>  	int zret;
>  	int rename;
>  	struct active_request_slot *slot;
> +	struct curl_slist *headers;
>  };
>  
>  struct http_object_request *new_http_object_request(
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2024-03-27  8:02 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-24  1:12 [PATCH 00/13] Support for arbitrary schemes in credentials brian m. carlson
2024-03-24  1:12 ` [PATCH 01/13] credential: add an authtype field brian m. carlson
2024-03-24  1:12 ` [PATCH 02/13] remote-curl: reset headers on new request brian m. carlson
2024-03-24  1:12 ` [PATCH 03/13] http: use new headers for each object request brian m. carlson
2024-03-27  8:02   ` Patrick Steinhardt [this message]
2024-03-24  1:12 ` [PATCH 04/13] credential: add a field for pre-encoded credentials brian m. carlson
2024-03-24  1:12 ` [PATCH 05/13] credential: gate new fields on capability brian m. carlson
2024-03-27  8:02   ` Patrick Steinhardt
2024-03-27 21:33     ` brian m. carlson
2024-04-02 10:04       ` Patrick Steinhardt
2024-04-04  0:39         ` brian m. carlson
2024-04-04  4:07           ` Patrick Steinhardt
2024-03-28 10:20   ` Jeff King
2024-03-28 16:13     ` Junio C Hamano
2024-03-28 16:29       ` Jeff King
2024-03-28 17:25         ` Junio C Hamano
2024-03-28 21:18     ` brian m. carlson
2024-03-24  1:12 ` [PATCH 06/13] docs: indicate new credential protocol fields brian m. carlson
2024-03-25 23:16   ` M Hickford
2024-03-25 23:37     ` brian m. carlson
2024-03-30 13:00       ` M Hickford
2024-03-31 21:43         ` brian m. carlson
2024-03-24  1:12 ` [PATCH 07/13] http: add support for authtype and credential brian m. carlson
2024-03-24  1:12 ` [PATCH 08/13] credential: add an argument to keep state brian m. carlson
2024-04-01 21:05   ` mirth hickford
2024-04-01 22:14     ` brian m. carlson
2024-03-24  1:12 ` [PATCH 09/13] credential: enable state capability brian m. carlson
2024-03-24  1:12 ` [PATCH 10/13] docs: set a limit on credential line length brian m. carlson
2024-03-24  1:12 ` [PATCH 11/13] t5563: refactor for multi-stage authentication brian m. carlson
2024-03-24  1:13 ` [PATCH 12/13] strvec: implement swapping two strvecs brian m. carlson
2024-03-27  8:02   ` Patrick Steinhardt
2024-03-27 21:22     ` Junio C Hamano
2024-03-27 21:34       ` brian m. carlson
2024-03-24  1:13 ` [PATCH 13/13] credential: add support for multistage credential rounds brian m. carlson
2024-03-28  8:00   ` M Hickford
2024-03-28 21:53     ` brian m. carlson
2024-04-01 20:51       ` M Hickford
2024-03-24  2:24 ` [PATCH 00/13] Support for arbitrary schemes in credentials Junio C Hamano
2024-03-24 15:21   ` brian m. carlson
2024-03-24 16:13     ` Junio C Hamano
2024-03-30  8:00 ` M Hickford
2024-03-30  8:16 ` M Hickford
2024-04-02 22:26 ` Calvin Wan
2024-04-04  1:01   ` brian m. carlson
2024-04-08 18:42     ` Jackson Toeniskoetter
2024-04-11  7:00       ` M Hickford
2024-04-12  0:09       ` brian m. carlson
2024-04-11  7:00 ` M Hickford
2024-04-12  0:13   ` brian m. carlson
2024-04-17  0:02 ` [PATCH v2 00/16] " brian m. carlson
2024-04-17  0:02   ` [PATCH v2 01/16] credential: add an authtype field brian m. carlson
2024-04-17  0:02   ` [PATCH v2 02/16] remote-curl: reset headers on new request brian m. carlson
2024-04-17  0:02   ` [PATCH v2 03/16] http: use new headers for each object request brian m. carlson
2024-04-17  0:02   ` [PATCH v2 04/16] credential: add a field for pre-encoded credentials brian m. carlson
2024-04-17  0:02   ` [PATCH v2 05/16] credential: gate new fields on capability brian m. carlson
2024-04-17  0:02   ` [PATCH v2 06/16] credential: add a field called "ephemeral" brian m. carlson
2024-04-17  0:02   ` [PATCH v2 07/16] docs: indicate new credential protocol fields brian m. carlson
2024-04-17  0:02   ` [PATCH v2 08/16] http: add support for authtype and credential brian m. carlson
2024-04-17  0:02   ` [PATCH v2 09/16] credential: add an argument to keep state brian m. carlson
2024-04-17  0:02   ` [PATCH v2 10/16] credential: enable state capability brian m. carlson
2024-04-17  0:02   ` [PATCH v2 11/16] docs: set a limit on credential line length brian m. carlson
2024-04-17  0:02   ` [PATCH v2 12/16] t5563: refactor for multi-stage authentication brian m. carlson
2024-04-17  0:02   ` [PATCH v2 13/16] credential: add support for multistage credential rounds brian m. carlson
2024-04-17  0:02   ` [PATCH v2 14/16] t: add credential tests for authtype brian m. carlson
2024-04-17  0:02   ` [PATCH v2 15/16] credential-cache: implement authtype capability brian m. carlson
2024-04-17  0:02   ` [PATCH v2 16/16] credential: add method for querying capabilities brian m. carlson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZgPSl0hWjH5B45Rt@tanuki \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=mirth.hickford@gmail.com \
    --cc=mjcheetham@outlook.com \
    --cc=sandals@crustytoothpaste.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.