* [PATCH 16/18] http: use new http API in fetch_index()
@ 2009-05-24 14:20 Tay Ray Chuan
0 siblings, 0 replies; only message in thread
From: Tay Ray Chuan @ 2009-05-24 14:20 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano, Johannes Schindelin, Mike Hommey
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
http.c | 80 ++++++---------------------------------------------------------
1 files changed, 8 insertions(+), 72 deletions(-)
diff --git a/http.c b/http.c
index ea46075..c3f7456 100644
--- a/http.c
+++ b/http.c
@@ -797,40 +797,22 @@ static int fetch_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)
@@ -841,56 +823,10 @@ static int fetch_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;
- }
-
- 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 (http_get_file(url, filename, 0) != HTTP_OK)
+ ret = error("Unable to get pack index %s\n", url);
- 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);
-cleanup_pack:
+cleanup:
free(hex);
free(url);
return ret;
--
1.6.3.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-05-24 14:23 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-24 14:20 [PATCH 16/18] http: use new http API in fetch_index() Tay Ray Chuan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).