git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, "Kyle J. McKay" <mackyle@gmail.com>
Subject: Re: [PATCH v6 6/6] config: "git config --get-urlmatch" parses section.<url>.key
Date: Wed, 31 Jul 2013 15:45:13 -0700	[thread overview]
Message-ID: <20130731224511.GA25882@sigill.intra.peff.net> (raw)
In-Reply-To: <1375298768-7740-7-git-send-email-gitster@pobox.com>

On Wed, Jul 31, 2013 at 12:26:08PM -0700, Junio C Hamano wrote:

> Using the same urlmatch_config_entry() infrastructure, add a new
> mode "--get-urlmatch" to the "git config" command, to learn values
> for the "virtual" two-level variables customized for the specific
> URL.
> 
>     git config [--<type>] --get-urlmatch <section>[.<key>] <url>

Do we want something like this on top, to convert the third form of
test-url-normalize into git-config calls?

It would be nicer squashed in, but we the tests are added earlier in the
series than "--get-urlmatch", so we would have to rip the tests out of
the earlier patches and have a "[PATCH 7/6] add tests for url
normalizing".

Two things to note about my test conversion:

  1. Git-config expects pre-canonicalized variable names (so http.noepsv
     instead of "http.noEPSV"). I think the "git config --get" code path
     does this for the caller, so we should probably do the same for
     "--get-urlmatch". And it is even easier here, because we know that
     "http.noEPSV" does not contain a case-sensitive middle part. :)

  2. I turned the many 'test "$(git foo)" = "bar"' invocations into a
     wrapper function that uses test_cmp. This helped immensely with
     debugging (1).

     The wrapper is a little ugly. I do wonder if we actually need all
     of these tests (i.e., it is not clear to me what different things
     each is testing, and if it is not simply trying to exercise the
     different variable names, which now all follow the same code path,
     because git-config does not care about the particular names).

---
 t/t5200-url-normalize.sh | 40 ++++++++-------
 test-url-normalize.c     | 93 ++---------------------------------
 2 files changed, 27 insertions(+), 106 deletions(-)

diff --git a/t/t5200-url-normalize.sh b/t/t5200-url-normalize.sh
index f79bb0f..a5190f7 100755
--- a/t/t5200-url-normalize.sh
+++ b/t/t5200-url-normalize.sh
@@ -3,11 +3,6 @@ test_description='url normalization'
 test_description='url normalization'
 . ./test-lib.sh
 
-if test -n "$NO_CURL"; then
-	skip_all='skipping test, git built without http support'
-	test_done
-fi
-
 # The base name of the test url files
 tu="$TEST_DIRECTORY/t5200/url"
 
@@ -182,18 +177,27 @@ test_expect_success 'url equivalents' '
 	test-url-normalize "https://@x.y/^/.." "httpS://@x.y:0443/"
 '
 
-test_expect_success 'url config normalization matching' '
-	test "$(test-url-normalize -c "$tc-1" "useragent" "https://other.example.com/")" = "other-agent" &&
-	test "$(test-url-normalize -c "$tc-1" "useragent" "https://example.com/")" = "example-agent" &&
-	test "$(test-url-normalize -c "$tc-1" "sslVerify" "https://example.com/")" = "false" &&
-	test "$(test-url-normalize -c "$tc-1" "useragent" "https://example.com/path/sub")" = "path-agent" &&
-	test "$(test-url-normalize -c "$tc-1" "sslVerify" "https://example.com/path/sub")" = "false" &&
-	test "$(test-url-normalize -c "$tc-1" "noEPSV" "https://elsewhere.com/")" = "true" &&
-	test "$(test-url-normalize -c "$tc-1" "noEPSV" "https://example.com")" = "true" &&
-	test "$(test-url-normalize -c "$tc-1" "noEPSV" "https://example.com/path")" = "true" &&
-	test "$(test-url-normalize -c "$tc-2" "useragent" "HTTPS://example.COM/p%61th")" = "example-agent" &&
-	test "$(test-url-normalize -c "$tc-2" "sslVerify" "HTTPS://example.COM/p%61th")" = "false" &&
-	test "$(test-url-normalize -c "$tc-3" "sslcainfo" "https://user@example.com/path/name/here")" = "file-1"
-'
+check_url_config() {
+	config=$1; shift
+	expect=$1; shift
+
+	test_expect_success "config normalization ($*)" "
+		echo '$expect' >expect &&
+		git config --file="\$config" --get-urlmatch $* >actual &&
+		test_cmp expect actual
+	"
+}
+
+check_url_config "$tc-1" other-agent http.useragent https://other.example.com/
+check_url_config "$tc-1" example-agent http.useragent https://example.com/
+check_url_config "$tc-1" false --bool http.sslverify https://example.com/
+check_url_config "$tc-1" path-agent http.useragent https://example.com/path/sub
+check_url_config "$tc-1" false --bool http.sslverify https://example.com/path/sub
+check_url_config "$tc-1" true --bool http.noepsv https://elsewhere.com/
+check_url_config "$tc-1" true --bool http.noepsv https://example.com
+check_url_config "$tc-1" true --bool http.noepsv https://example.com/path
+check_url_config "$tc-2" example-agent http.useragent HTTPS://example.COM/p%61th
+check_url_config "$tc-2" false --bool http.sslverify HTTPS://example.COM/p%61th
+check_url_config "$tc-3" file-1 http.sslcainfo https://user@example.com/path/name/here
 
 test_done
diff --git a/test-url-normalize.c b/test-url-normalize.c
index 81d3da9..34a1a67 100644
--- a/test-url-normalize.c
+++ b/test-url-normalize.c
@@ -1,84 +1,11 @@ int main(int argc, char **argv)
-#ifdef NO_CURL
-
-int main()
-{
-	return 125;
-}
-
-#else /* !NO_CURL */
-
-#include "http.c"
-
-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);
-	else if (!strcmp("maxrequests", opt_lc.buf))
-		printf("%d\n", max_requests);
-	else if (!strcmp("lowspeedlimit", opt_lc.buf))
-		printf("%ld\n", curl_low_speed_limit);
-	else if (!strcmp("lowspeedtime", opt_lc.buf))
-		printf("%ld\n", curl_low_speed_time);
-	else if (!strcmp("noepsv", opt_lc.buf))
-		printf("%s\n", curl_ftp_no_epsv ? "true" : "false");
-	else if (!strcmp("proxy", opt_lc.buf))
-		printf("%s\n", curl_http_proxy);
-	else if (!strcmp("cookiefile", opt_lc.buf))
-		printf("%s\n", curl_cookie_file);
-	else if (!strcmp("postbuffer", opt_lc.buf))
-		printf("%u\n", (unsigned)http_post_buffer);
-	else if (!strcmp("useragent", opt_lc.buf))
-		printf("%s\n", user_agent);
-
-	return 0;
-}
+#include "git-compat-util.h"
+#include "urlmatch.h"
 
 int main(int argc, char **argv)
 {
-	const char *usage = "test-url-normalize [-p | -l] <url1> | <url1> <url2>"
-		" | -c file option <url1>";
+	const char *usage = "test-url-normalize [-p | -l] <url1> | <url1> <url2>";
 	char *url1, *url2;
-	int opt_p = 0, opt_l = 0, opt_c = 0;
-	char *file = NULL, *optname = NULL;
+	int opt_p = 0, opt_l = 0;
 
 	/*
 	 * For one url, succeed if url_normalize succeeds on it, fail otherwise.
@@ -101,12 +28,6 @@ int main(int argc, char **argv)
 		opt_l = 1;
 		argc--;
 		argv++;
-	} else if (argc > 3 && !strcmp(argv[1], "-c")) {
-		opt_c = 1;
-		file = argv[2];
-		optname = argv[3];
-		argc -= 3;
-		argv += 3;
 	}
 
 	if (argc < 2 || argc > 3)
@@ -121,17 +42,13 @@ int main(int argc, char **argv)
 			printf("%s\n", url1);
 		if (opt_l)
 			printf("%u\n", (unsigned)info.url_len);
-		if (opt_c)
-			return run_http_options(file, optname, &info);
 		return 0;
 	}
 
-	if (opt_p || opt_l || opt_c)
+	if (opt_p || opt_l)
 		die(usage);
 
 	url1 = url_normalize(argv[1], NULL);
 	url2 = url_normalize(argv[2], NULL);
 	return (url1 && url2 && !strcmp(url1, url2)) ? 0 : 1;
 }
-
-#endif /* !NO_CURL */

  reply	other threads:[~2013-07-31 22:45 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-31 19:26 [PATCH v6 0/6] http.<url>.<key> and friends Junio C Hamano
2013-07-31 19:26 ` [PATCH v6 1/6] http.c: fix parsing of http.sslCertPasswordProtected variable Junio C Hamano
2013-07-31 19:26 ` [PATCH v6 2/6] config: add helper to normalize and match URLs Junio C Hamano
2013-07-31 20:50   ` Kyle J. McKay
2013-07-31 19:26 ` [PATCH v6 3/6] config: add generic callback wrapper to parse section.<url>.key Junio C Hamano
2013-07-31 19:26 ` [PATCH v6 4/6] config: parse http.<url>.<variable> using urlmatch Junio C Hamano
2013-07-31 20:51   ` Kyle J. McKay
2013-07-31 20:51   ` [PATCH ALTERNATIVE v6 0/2] http.<url>.<key> and friends Kyle J. McKay
2013-07-31 20:52     ` [PATCH ALTERNATIVE v6 2/4] config: add helper to normalize and match URLs Kyle J. McKay
2013-07-31 20:52     ` [PATCH ALTERNATIVE v6 4/4] config: parse http.<url>.<variable> using urlmatch Kyle J. McKay
2013-07-31 22:01     ` [PATCH ALTERNATIVE v6 0/2] http.<url>.<key> and friends Junio C Hamano
2013-07-31 22:41     ` [PATCH ALTERNATIVE v6.v2 4/6] config: parse http.<url>.<variable> using urlmatch Kyle J. McKay
2013-07-31 19:26 ` [PATCH v6 5/6] builtin/config: refactor collect_config() Junio C Hamano
2013-07-31 19:26 ` [PATCH v6 6/6] config: "git config --get-urlmatch" parses section.<url>.key Junio C Hamano
2013-07-31 22:45   ` Jeff King [this message]
2013-07-31 23:03     ` Kyle J. McKay
2013-07-31 23:44       ` Jeff King
2013-08-01 17:25         ` Junio C Hamano
2013-08-01 17:30           ` Jeff King
2013-08-05 20:20       ` [PATCH ALTERNATIVE v6.v3 4/6] config: parse http.<url>.<variable> using urlmatch Kyle J. McKay
2013-08-05 22:56         ` Junio C Hamano
2013-08-05 23:57           ` Kyle J. McKay
2013-07-31 23:47     ` [PATCH v6 6/6] config: "git config --get-urlmatch" parses section.<url>.key Junio C Hamano

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20130731224511.GA25882@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=mackyle@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).