"Ryan Hendrickson via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > @@ -5,8 +5,8 @@ http.proxy:: > proxy string with a user name but no password, in which case git will > attempt to acquire one in the same way it does for other credentials. See > linkgit:gitcredentials[7] for more information. The syntax thus is > - '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden > - on a per-remote basis; see remote.<name>.proxy > + '[protocol://][user[:password]@]proxyhost[:port][/path]'. This can be > + overridden on a per-remote basis; see remote.<name>.proxy OK. > diff --git a/http.c b/http.c > index 623ed234891..a50ba095889 100644 > --- a/http.c > +++ b/http.c > @@ -1227,6 +1227,7 @@ static CURL *get_curl_handle(void) > */ > curl_easy_setopt(result, CURLOPT_PROXY, ""); > } else if (curl_http_proxy) { > + struct strbuf proxy = STRBUF_INIT; > if (starts_with(curl_http_proxy, "socks5h")) > curl_easy_setopt(result, > CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME); In a block with local variable decl, be more friendly to readers by having a blank line between the end of declarations and the first statement. > + strbuf_addstr(&proxy, proxy_auth.host); > + if (proxy_auth.path) { > + curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW); > + if (ver->version_num < 0x075400) > + die("libcurl 7.84 or later is required to support paths in proxy URLs"); > + > + if (!starts_with(proxy_auth.protocol, "socks")) > + die("Invalid proxy URL '%s': only SOCKS proxies support paths", > + curl_http_proxy); > + > + if (strcasecmp(proxy_auth.host, "localhost")) > + die("Invalid proxy URL '%s': host must be localhost if a path is present", > + curl_http_proxy); We insist that it must be "localhost", so let's not do strcasecmp() but just do strcmp(). > diff --git a/t/t5564-http-proxy.sh b/t/t5564-http-proxy.sh > index bb35b87071d..7fcffba67a2 100755 > --- a/t/t5564-http-proxy.sh > +++ b/t/t5564-http-proxy.sh > @@ -39,4 +39,50 @@ test_expect_success 'clone can prompt for proxy password' ' > expect_askpass pass proxuser > ' > > +start_socks() { > + mkfifo socks_output && > + { > + "$PERL_PATH" "$TEST_DIRECTORY/socks4-proxy.pl" "$1" >socks_output & > + socks_pid=$! > + } && > + read line <socks_output && > + test "$line" = ready > +} > + > +test_expect_success PERL 'try to start SOCKS proxy' ' > + # The %30 tests that the correct amount of percent-encoding is applied > + # to the proxy string passed to curl. > + if start_socks %30.sock > + then > + test_set_prereq SOCKS_PROXY > + fi > +' Making it a regular test_expect_success would mean GIT_SKIP_TEST mechansim can be used to skip it, which is probably not what you want. Can't this be a more common test_lazy_prereq, perhaps like test_lazy_prereq SOCKS_PROXY ' # useful comment about 30% here ... test_have_prereq PERL && start_socks %30.sock ' or something? Thanks.