git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Kyle J. McKay" <mackyle@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>
Subject: Re: [PATCH ALTERNATIVE v6.v3 4/6] config: parse http.<url>.<variable> using urlmatch
Date: Mon, 5 Aug 2013 16:57:23 -0700	[thread overview]
Message-ID: <503E9E2D-93E5-43CB-BB61-499052B35F4F@gmail.com> (raw)
In-Reply-To: <7vsiyniw63.fsf@alter.siamese.dyndns.org>

On Aug 5, 2013, at 15:56, Junio C Hamano wrote:
> "Kyle J. McKay" <mackyle@gmail.com> writes:
>
>> 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: Jeff King <peff@peff.net>
>> Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
>> Signed-off-by: Junio C Hamano <gitster@pobox.com>
>> ---
>
> Oops, what did we sign-off?

Some code removal.  No new additions.  Actually this:

On Aug 1, 2013, at 14:44, Junio C Hamano wrote:

> * jc/url-match (2013-07-31) 6 commits
> - config: "git config --get-urlmatch" parses section.<url>.key
> - builtin/config: refactor collect_config()
> - config: parse http.<url>.<variable> using urlmatch
> - config: add generic callback wrapper to parse section.<url>.key
> - config: add helper to normalize and match URLs
> - http.c: fix parsing of http.sslCertPasswordProtected variable
>
> Reroll of km/http-curl-config-per-url topic.  Peff raises many good
> points about the tests for http.* variables.
>
> Waiting for the discussion to conclude, hopefully with a replacement  
> test.

As requested.

>> This version of 4/6 moves the tests to t0110 since urlmatch is now  
>> global.
>> The config tests are removed since part 6/6 already has those and  
>> they no
>> longer belong with the urlmatch normalization tests.
>>
>> The Makefile rule has been removed since it's no longer needed to  
>> build
>> correctly as the test program no longer includes http.c.
>>
>> Other than those changes (and a minor rename to reflect the new  
>> location),
>> this patch is identical to the previous v6.v2 4/6.
>
> Ahh, figures.  Thanks.

The remaining tests, by the way, have not changed.  They are identical  
to previous versions.

> Peff, any comments?
>
>> diff --git a/t/t0110-urlmatch-normalization.sh b/t/t0110-urlmatch- 
>> normalization.sh
>> new file mode 100755
>> index 00000000..8d6096d4
>> --- /dev/null
>> +++ b/t/t0110-urlmatch-normalization.sh
>> @@ -0,0 +1,177 @@
>> +#!/bin/sh
>> +
>> +test_description='urlmatch URL normalization'
>> +. ./test-lib.sh
>> +
>> +# The base name of the test url files
>> +tu="$TEST_DIRECTORY/t0110/url"
>> +
>> +# Note that only file: URLs should be allowed without a host
>
> It is somewhat unfortunate that the form most commonly used for
> pushing is not supported at all, i.e.
>
> 	host:path

That is an SSH extension and they are certainly not URLs according to  
RFC 3986 because that would require every host to be its own scheme.

Also, host:path cannot in the general case, be unambiguously  
translated to a URL.

For example, repo.or.cz:srv/git/alt-git, has no translation.  It is  
different from repo.or.cz:/srv/git/alt-git which does have a  
translation.  There's no guarantee that inserting a '/' will not  
change the meaning of the URL (that only happens to be the case on  
repo.or.cz because all the ssh git users in the chroot jail have a '/'  
home directory).

> Current configuration set may not have anything interesting to
> affect the git-over-ssh push codepath, so in practice it may not
> matter, though.
>
>> +test_expect_success 'url authority' '
>
> "authority" refers to the host part? (not a complaint, but is a
> question)

It refers to this production from RFC 3986 Section "3.2 Authority":

authority = [ userinfo "@" ] host [ ":" port ]

>> +test_expect_success 'url port checks' '
>> +	test-urlmatch-normalization "xyz://q@some.host:" &&
>
> This is presumably replaced by a default port for xyz:// scheme,
> whatever the default port is, in other words, it is as if no colon
> is given at the end?

Yes.

The "port" production above is:

port = *DIGIT

which means 0 or more digits.

>> +	test-urlmatch-normalization "xyz://q@some.host:456/" &&
>> +	! test-urlmatch-normalization "xyz://q@some.host:0" &&
>> +	! test-urlmatch-normalization "xyz://q@some.host:0000000" &&
>
> Port #0 is disallowed?

Intentionally so.

The comments from urlmatch.c talk about this:

/*
  * Port number must be all digits with leading 0s removed
  * and since all the protocols we deal with have a 16-bit
  * port number it must also be in the range 1..65535
  * 0 is not allowed because that means "next available"
  * on just about every system and therefore cannot be used
  */

>> +	test-urlmatch-normalization "xyz://q@some.host:0000001?" &&
>
> Is it the same as specifying "xyz://q@some.host:1?" and does it
> match "xyz://q@some.host:1"?
>
>> +	test-urlmatch-normalization "xyz://q@some.host:065535#" &&
>
> Ditto, for 65535 and without #-fragment at the end?
>
>> +test_expect_success 'url port normalization' '
>> +	test "$(test-urlmatch-normalization -p "http://x:800")" = "http:// 
>> x:800/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:0800")" =  
>> "http://x:800/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:00000800")" =  
>> "http://x:800/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:065535")" =  
>> "http://x:65535/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:1")" = "http://x: 
>> 1/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:80")" = "http:// 
>> x/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:080")" = "http:// 
>> x/" &&
>> +	test "$(test-urlmatch-normalization -p "http://x:000000080")" =  
>> "http://x/" &&
>> +	test "$(test-urlmatch-normalization -p "https://x:443")" = "https://x/ 
>> " &&
>> +	test "$(test-urlmatch-normalization -p "https://x:0443")" = "https://x/ 
>> " &&
>> +	test "$(test-urlmatch-normalization -p "https://x:000000443")" = "https://x/ 
>> "
>> +'
>
> OK, these answer most of the previous questions.
>
>> +# http://@foo specifies an empty user name but does not specify a  
>> password
>> +# http://foo  specifies neither a user name nor a password
>> +# So they should not be equivalent
>> +test_expect_success 'url equivalents' '
>> +	test-urlmatch-normalization "httP://x" "Http://X/" &&
>> +	test-urlmatch-normalization "Http://%4d%65:%4d^%70@The.Host" "hTTP://Me 
>> :%4D^p@the.HOST:80/" &&
>> +	! test-urlmatch-normalization "https://@x.y/^" "httpS://x.y:443/ 
>> ^" &&
>
> The comment is about this test, which seems to make sense.  What is
> "^"?  Just a random valid character that can appear in the path?
> (not a complaint, but is a question).

The character '^' is one of the always-unsafe characters that must  
always be escaped.  It's also one of the always-unsafe characters  
that's easy to include in the tests as it doesn't require escaping or  
backslashing or binary includes.  It doesn't otherwise have any  
special meaning.

  reply	other threads:[~2013-08-05 23:57 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
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 [this message]
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=503E9E2D-93E5-43CB-BB61-499052B35F4F@gmail.com \
    --to=mackyle@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.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.
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).