void add_request(unsigned char *sha1, char *lock_token)
{
struct transfer_request *request = request_queue_head;
- struct transfer_request *tail;
struct packed_git *target;
while (request != NULL && memcmp(request->sha1, sha1, 20))
request->lock_token = lock_token;
request->headers = NULL;
request->state = NEED_CHECK;
- request->next = NULL;
-
- if (request_queue_head == NULL) {
- request_queue_head = request;
- } else {
- tail = request_queue_head;
- while (tail->next != NULL) {
- tail = tail->next;
- }
- tail->next = request;
- }
+ request->next = request_queue_head;
+ request_queue_head = request;
#ifdef USE_CURL_MULTI
process_request_queue();
process_curl_messages();
FILE *indexfile;
struct active_request_slot *slot;
+ /* Don't use the index if the pack isn't there */
+ url = xmalloc(strlen(remote->url) + 65);
+ sprintf(url, "%s/objects/pack/pack-%s.pack", remote->url, hex);
+ slot = get_active_slot();
+ 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 (slot->curl_result != CURLE_OK) {
+ free(url);
+ return error("Unable to verify pack %s is available",
+ hex);
+ }
+ } else {
+ return error("Unable to start request");
+ }
+
if (has_pack_index(sha1))
return 0;
if (push_verbosely)
fprintf(stderr, "Getting index for pack %s\n", hex);
- url = xmalloc(strlen(remote->url) + 64);
sprintf(url, "%s/objects/pack/pack-%s.idx", remote->url, hex);
filename = sha1_pack_index_name(sha1);
filename);
slot = get_active_slot();
+ 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);
static int setup_index(unsigned char *sha1)
{
struct packed_git *new_pack;
- if (has_pack_file(sha1))
- return 0; // don't list this as something we can get
if (fetch_index(sha1))
return -1;
while (request != NULL) {
next_request = request->next;
release_request(request);
- free(request);
request = next_request;
}