]> git.ipfire.org Git - thirdparty/git.git/commitdiff
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

1  2 
remote-curl.c
t/t5551-http-fetch.sh

diff --combined remote-curl.c
index a2696082fb8881d74de7a2f9c473fb03f82d81ec,7b19ebb0f8f09d4074e2e9f1ccdb4b356d35b066..10fa8f1ac59910a776dc8118d8c2f32fce7b46d3
@@@ -95,15 -95,16 +95,16 @@@ static struct discovery* discover_refs(
        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
        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.
                 */
@@@ -379,7 -380,7 +380,7 @@@ static int probe_rpc(struct rpc_state *
        curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
        curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
        curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
 -      curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
 +      curl_easy_setopt(slot->curl, CURLOPT_ENCODING, NULL);
        curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, "0000");
        curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, 4);
        curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
@@@ -435,7 -436,7 +436,7 @@@ static int post_rpc(struct rpc_state *r
        curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
        curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
        curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
 -      curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
 +      curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");
  
        headers = curl_slist_append(headers, rpc->hdr_content_type);
        headers = curl_slist_append(headers, rpc->hdr_accept);
diff --combined t/t5551-http-fetch.sh
index 380c17541efd39946fe14c924b84bc212c435f17,8427943f0e74730a6c5bff0b27a6c50f1108bf7f..5060879d6d93d1f10a1db690bd42c19ee5ec1ae4
@@@ -32,14 -32,13 +32,14 @@@ setup_askpass_helpe
  cat >exp <<EOF
  > GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1
  > Accept: */*
 +> Accept-Encoding: gzip
  > Pragma: no-cache
  < HTTP/1.1 200 OK
  < Pragma: no-cache
  < Cache-Control: no-cache, max-age=0, must-revalidate
  < Content-Type: application/x-git-upload-pack-advertisement
  > POST /smart/repo.git/git-upload-pack HTTP/1.1
 -> Accept-Encoding: deflate, gzip
 +> Accept-Encoding: gzip
  > Content-Type: application/x-git-upload-pack-request
  > Accept: application/x-git-upload-pack-result
  > Content-Length: xxx
@@@ -130,6 -129,18 +130,18 @@@ test_expect_success 'clone from auth-on
        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' '