Skip to content

Commit 02572c2

Browse files
peffgitster
authored andcommitted
remote-curl: let users turn off smart http
Usually there is no need for users to specify whether an http remote is smart or dumb; the protocol is designed so that a single initial request is made, and the client can determine the server's capability from the response. However, some misconfigured dumb-only servers may not like the initial request by a smart client, as it contains a query string. Until recently, commit 703e6e7 worked around this by making a second request. However, that commit was recently reverted due to its side effect of masking the initial request's error code. Since git has had that workaround for several years, we don't know exactly how many such misconfigured servers are out there. The reversion of 703e6e7 assumes they are rare enough not to worry about. Still, that reversion leaves somebody who does run into such a server with no escape hatch at all. Let's give them an environment variable they can tweak to perform the "dumb" request. This is intentionally not a documented interface. It's overly simple and is really there for debugging in case somebody does complain about git not working with their server. A real user-facing interface would entail a per-remote or per-URL config variable. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 243c329 commit 02572c2

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

remote-curl.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ static struct discovery* discover_refs(const char *service)
102102
free_discovery(last);
103103

104104
strbuf_addf(&buffer, "%sinfo/refs", url);
105-
if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) {
105+
if ((!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) &&
106+
git_env_bool("GIT_SMART_HTTP", 1)) {
106107
maybe_smart = 1;
107108
if (!strchr(url, '?'))
108109
strbuf_addch(&buffer, '?');

t/t5551-http-fetch.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,18 @@ test_expect_success 'clone from auth-only-for-push repository' '
129129
test_cmp expect actual
130130
'
131131

132+
test_expect_success 'disable dumb http on server' '
133+
git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \
134+
config http.getanyfile false
135+
'
136+
137+
test_expect_success 'GIT_SMART_HTTP can disable smart http' '
138+
(GIT_SMART_HTTP=0 &&
139+
export GIT_SMART_HTTP &&
140+
cd clone &&
141+
test_must_fail git fetch)
142+
'
143+
132144
test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE
133145

134146
test_expect_success EXPENSIVE 'create 50,000 tags in the repo' '

0 commit comments

Comments
 (0)