On Jul 31, 2013, at 12:26, Junio C Hamano wrote:

From: "Kyle J. McKay" <mack...@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 <mack...@gmail.com>
Signed-off-by: Junio C Hamano <gits...@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.

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://u...@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:

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://u...@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.
--



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)

+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.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to