git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v6 4/6] config: parse http.<url>.<variable> using urlmatch

From
Kyle J. McKay <mackyle@gmail.com>
Date
Jul 31, 2013, 20:51 UTC
Message-ID
<9DDDFC61-2946-4828-AD9E-52D2F0154479@gmail.com>
In-Reply-To
<1375298768-7740-5-git-send-email-gitster@pobox.com>
On Jul 31, 2013, at 12:26, Junio C Hamano wrote:
Show 9 quoted lines
> From: "Kyle J. McKay" <mackyle@gmail.com>
>
> Use the urlmatch_config_entry() to wrap the underlying
> http_options() two-level variable parser in order to set
> http.<variable> to the value with the most specific URL in the
> configuration.
>
> Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Needs Peff's Signed-off-by: for the copious amount of text he wrote that is included verbatim in the documentation part of the patch. He previously gave it for this purpose.

Show 43 quoted lines
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 6e53fc5..60c140f 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1513,6 +1513,50 @@ http.useragent::
> 	of common USER_AGENT strings (but not including those like git/ 
> 1.7.1).
> 	Can be overridden by the 'GIT_HTTP_USER_AGENT' environment variable.
>
> +http.<url>.*::
> +	Any of the http.* options above can be applied selectively to some  
> urls.
> +	For a config key to match a URL, each element of the config key is
> +	compared to that of the URL, in the following order:
> ++
> +--
> +. Scheme (e.g., `https` in `https://example.com/`). This field
> +  must match exactly between the config key and the URL.
> +
> +. Host/domain name (e.g., `example.com` in `https://example.com/`).
> +  This field must match exactly between the config key and the URL.
> +
> +. Port number (e.g., `8080` in `http://example.com:8080/`).
> +  This field must match exactly between the config key and the URL.
> +  Omitted port numbers are automatically converted to the correct
> +  default for the scheme before matching.
> +
> +. Path (e.g., `repo.git` in `https://example.com/repo.git`). The
> +  path field of the config key must match the path field of the URL
> +  either exactly or as a prefix of slash-delimited path elements.   
> This means
> +  a config key with path `foo/` matches URL path `foo/bar`.  A  
> prefix can only
> +  match on a slash (`/`) boundary.  Longer matches take precedence  
> (so a config
> +  key with path `foo/bar` is a better match to URL path `foo/bar`  
> than a config
> +  key with just path `foo/`).
> +
> +. User name (e.g., `user` in `https://user@example.com/repo.git`). If
> +  the config key has a user name it must match the user name in the
> +  URL exactly. If the config key does not have a user name, that
> +  config key will match a URL with any user name (including none).
Missing the single line follow-up patch:
Show 12 quoted lines
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 0dd5566..f2ed9ef 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1568,7 +1568,8 @@ http.<url>.*::
> . User name (e.g., `user` in `https://user@example.com/repo.git`). If
>   the config key has a user name it must match the user name in the
>   URL exactly. If the config key does not have a user name, that
> -  config key will match a URL with any user name (including none).
> +  config key will match a URL with any user name (including none),
> +  but at a lower precedence than a config key with a user name.
> --
Show 9 quoted lines
> diff --git a/test-url-normalize.c b/test-url-normalize.c
> new file mode 100644
> index 0000000..81d3da9
> --- /dev/null
> +++ b/test-url-normalize.c
> @@ -0,0 +1,137 @@
> +#ifdef NO_CURL
> +
> +int main()
Need's Ramsey's patch here:

-int main() +int main(void)

Show 44 quoted lines
> +static int run_http_options(const char *file,
> +			    const char *opt,
> +			    const struct url_info *info)
> +{
> +	struct strbuf opt_lc;
> +	size_t i, len;
> +	struct urlmatch_config config = { STRING_LIST_INIT_DUP };
> +
> +	memcpy(&config.url, info, sizeof(*info));
> +	config.section = "http";
> +	config.collect_fn = http_options;
> +	config.cascade_fn = git_default_config;
> +	config.cb = NULL;
> +
> +	if (git_config_with_options(urlmatch_config_entry, &config, file,  
> 0))
> +		return 1;
> +
> +	len = strlen(opt);
> +	strbuf_init(&opt_lc, len);
> +	for (i = 0; i < len; ++i) {
> +		strbuf_addch(&opt_lc, tolower(opt[i]));
> +	}
> +
> +	if (!strcmp("sslverify", opt_lc.buf))
> +		printf("%s\n", curl_ssl_verify ? "true" : "false");
> +	else if (!strcmp("sslcert", opt_lc.buf))
> +		printf("%s\n", ssl_cert);
> +#if LIBCURL_VERSION_NUM >= 0x070903
> +	else if (!strcmp("sslkey", opt_lc.buf))
> +		printf("%s\n", ssl_key);
> +#endif
> +#if LIBCURL_VERSION_NUM >= 0x070908
> +	else if (!strcmp("sslcapath", opt_lc.buf))
> +		printf("%s\n", ssl_capath);
> +#endif
> +	else if (!strcmp("sslcainfo", opt_lc.buf))
> +		printf("%s\n", ssl_cainfo);
> +	else if (!strcmp("sslcertpasswordprotected", opt_lc.buf))
> +		printf("%s\n", ssl_cert_password_required ? "true" : "false");
> +	else if (!strcmp("ssltry", opt_lc.buf))
> +		printf("%s\n", curl_ssl_try ? "true" : "false");
> +	else if (!strcmp("minsessions", opt_lc.buf))
> +		printf("%d\n", min_curl_sessions);
And here
+#ifdef USE_CURL_MULTI
> +	else if (!strcmp("maxrequests", opt_lc.buf))
> +		printf("%d\n", max_requests);
+#endif
> +	else if (!strcmp("lowspeedlimit", opt_lc.buf))
> +		printf("%ld\n", curl_low_speed_limit);
Otherwise looks good to me.
Previous: Junio C HamanoNext: Junio C Hamano
Message 12 of 23 in “http.<url>.<key> and friends”
  1. 0/6 http.<url>.<key> and friendsJunio C Hamano, Jul 31, 2013
  2. 1/6 http.c: fix parsing of http.sslCertPasswordProtected variableJunio C Hamano, Jul 31, 2013
  3. 2/6 config: add helper to normalize and match URLsJunio C Hamano, Jul 31, 2013
  4. Kyle J. McKayJul 31, 2013
  5. 0/2 http.<url>.<key> and friendsKyle J. McKay, Jul 31, 2013
  6. 2/4 config: add helper to normalize and match URLsKyle J. McKay, Jul 31, 2013
  7. 4/4 config: parse http.<url>.<variable> using urlmatchKyle J. McKay, Jul 31, 2013
  8. Junio C HamanoJul 31, 2013
  9. 4/6 config: parse http.<url>.<variable> using urlmatchKyle J. McKay, Jul 31, 2013
  10. 3/6 config: add generic callback wrapper to parse section.<url>.keyJunio C Hamano, Jul 31, 2013
  11. 4/6 config: parse http.<url>.<variable> using urlmatchJunio C Hamano, Jul 31, 2013
  12. Kyle J. McKayJul 31, 2013
  13. 5/6 builtin/config: refactor collect_config()Junio C Hamano, Jul 31, 2013
  14. 6/6 config: "git config --get-urlmatch" parses section.<url>.keyJunio C Hamano, Jul 31, 2013
  15. Jeff KingJul 31, 2013
  16. Kyle J. McKayJul 31, 2013
  17. Jeff KingJul 31, 2013
  18. Junio C HamanoAug 1, 2013
  19. Jeff KingAug 1, 2013
  20. 4/6 config: parse http.<url>.<variable> using urlmatchKyle J. McKay, Aug 5, 2013
  21. Junio C HamanoAug 5, 2013
  22. Kyle J. McKayAug 5, 2013
  23. Junio C HamanoJul 31, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.