Code

http: use new http API in fetch_index()
authorTay Ray Chuan <rctay89@gmail.com>
Sat, 6 Jun 2009 08:44:00 +0000 (16:44 +0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 6 Jun 2009 18:03:11 +0000 (11:03 -0700)
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http.c

diff --git a/http.c b/http.c
index 96d83d5c3cfaea66ae9471b84024e34fdd7d5b3b..0701a6f6eb6de5a454bb451cb0e1683d0757716a 100644 (file)
--- a/http.c
+++ b/http.c
@@ -798,40 +798,22 @@ static int fetch_pack_index(unsigned char *sha1, const char *base_url)
        char *hex = xstrdup(sha1_to_hex(sha1));
        char *filename;
        char *url;
-       char tmpfile[PATH_MAX];
-       long prev_posn = 0;
-       char range[RANGE_HEADER_SIZE];
        struct strbuf buf = STRBUF_INIT;
-       struct curl_slist *range_header = NULL;
-
-       FILE *indexfile;
-       struct active_request_slot *slot;
-       struct slot_results results;
 
        /* Don't use the index if the pack isn't there */
        end_url_with_slash(&buf, base_url);
        strbuf_addf(&buf, "objects/pack/pack-%s.pack", hex);
        url = strbuf_detach(&buf, 0);
 
-       slot = get_active_slot();
-       slot->results = &results;
-       curl_easy_setopt(slot->curl, CURLOPT_URL, url);
-       curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
-       if (start_active_slot(slot)) {
-               run_active_slot(slot);
-               if (results.curl_result != CURLE_OK) {
-                       ret = error("Unable to verify pack %s is available",
-                                   hex);
-                       goto cleanup_pack;
-               }
-       } else {
-               ret = error("Unable to start request");
-               goto cleanup_pack;
+       if (http_get_strbuf(url, NULL, 0)) {
+               ret = error("Unable to verify pack %s is available",
+                           hex);
+               goto cleanup;
        }
 
        if (has_pack_index(sha1)) {
                ret = 0;
-               goto cleanup_pack;
+               goto cleanup;
        }
 
        if (http_is_verbose)
@@ -842,57 +824,10 @@ static int fetch_pack_index(unsigned char *sha1, const char *base_url)
        url = strbuf_detach(&buf, NULL);
 
        filename = sha1_pack_index_name(sha1);
-       snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
-       indexfile = fopen(tmpfile, "a");
-       if (!indexfile) {
-               ret = error("Unable to open local file %s for pack index",
-                           tmpfile);
-               goto cleanup_pack;
-       }
+       if (http_get_file(url, filename, 0) != HTTP_OK)
+               ret = error("Unable to get pack index %s\n", url);
 
-       slot = get_active_slot();
-       slot->results = &results;
-       curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
-       curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
-       curl_easy_setopt(slot->curl, CURLOPT_FILE, indexfile);
-       curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
-       curl_easy_setopt(slot->curl, CURLOPT_URL, url);
-       curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
-       slot->local = indexfile;
-
-       /*
-        * If there is data present from a previous transfer attempt,
-        * resume where it left off
-        */
-       prev_posn = ftell(indexfile);
-       if (prev_posn>0) {
-               if (http_is_verbose)
-                       fprintf(stderr,
-                               "Resuming fetch of index for pack %s at byte %ld\n",
-                               hex, prev_posn);
-               sprintf(range, "Range: bytes=%ld-", prev_posn);
-               range_header = curl_slist_append(range_header, range);
-               curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, range_header);
-       }
-
-       if (start_active_slot(slot)) {
-               run_active_slot(slot);
-               if (results.curl_result != CURLE_OK) {
-                       ret = error("Unable to get pack index %s\n%s",
-                                   url, curl_errorstr);
-                       goto cleanup_index;
-               }
-       } else {
-               ret = error("Unable to start request");
-               goto cleanup_index;
-       }
-
-       ret = move_temp_to_file(tmpfile, filename);
-
-cleanup_index:
-       fclose(indexfile);
-       slot->local = NULL;
-cleanup_pack:
+cleanup:
        free(hex);
        free(url);
        return ret;