diff options
| author | Tay Ray Chuan <rctay89@gmail.com> | 2009-06-06 16:44:00 +0800 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2009-06-06 11:03:11 -0700 | 
| commit | 39dc52cf4ff04e9cd4d2562218ad619e23a81efa (patch) | |
| tree | 934ed2801c75531540e40e3ab4f4ced683ef978c /http.c | |
| parent | b8caac2b8ab6482e7ab59c8ec18f1c3d90e7387d (diff) | |
| download | git-39dc52cf4ff04e9cd4d2562218ad619e23a81efa.tar.gz | |
http: use new http API in fetch_index()
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http.c')
| -rw-r--r-- | http.c | 81 | 
1 files changed, 8 insertions, 73 deletions
@@ -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;  | 
