Merge branch 'jk/smart-http-switch'
authorJunio C Hamano <gitster@pobox.com>
Sun, 30 Sep 2012 05:28:24 +0000 (22:28 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 30 Sep 2012 05:28:25 +0000 (22:28 -0700)
Allows users to turn off smart-http when talking to dumb-only
servers.

* jk/smart-http-switch:
remote-curl: let users turn off smart http
remote-curl: rename is_http variable

remote-curl.c
t/t5551-http-fetch.sh
index a2696082fb8881d74de7a2f9c473fb03f82d81ec..10fa8f1ac59910a776dc8118d8c2f32fce7b46d3 100644 (file)
@@ -95,15 +95,16 @@ static struct discovery* discover_refs(const char *service)
        struct strbuf buffer = STRBUF_INIT;
        struct discovery *last = last_discovery;
        char *refs_url;
-       int http_ret, is_http = 0;
+       int http_ret, maybe_smart = 0;
 
        if (last && !strcmp(service, last->service))
                return last;
        free_discovery(last);
 
        strbuf_addf(&buffer, "%sinfo/refs", url);
-       if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) {
-               is_http = 1;
+       if ((!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) &&
+            git_env_bool("GIT_SMART_HTTP", 1)) {
+               maybe_smart = 1;
                if (!strchr(url, '?'))
                        strbuf_addch(&buffer, '?');
                else
@@ -131,7 +132,7 @@ static struct discovery* discover_refs(const char *service)
        last->buf_alloc = strbuf_detach(&buffer, &last->len);
        last->buf = last->buf_alloc;
 
-       if (is_http && 5 <= last->len && last->buf[4] == '#') {
+       if (maybe_smart && 5 <= last->len && last->buf[4] == '#') {
                /* smart HTTP response; validate that the service
                 * pkt-line matches our request.
                 */
index 380c17541efd39946fe14c924b84bc212c435f17..5060879d6d93d1f10a1db690bd42c19ee5ec1ae4 100755 (executable)
@@ -130,6 +130,18 @@ test_expect_success 'clone from auth-only-for-push repository' '
        test_cmp expect actual
 '
 
+test_expect_success 'disable dumb http on server' '
+       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \
+               config http.getanyfile false
+'
+
+test_expect_success 'GIT_SMART_HTTP can disable smart http' '
+       (GIT_SMART_HTTP=0 &&
+        export GIT_SMART_HTTP &&
+        cd clone &&
+        test_must_fail git fetch)
+'
+
 test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE
 
 test_expect_success EXPENSIVE 'create 50,000 tags in the repo' '