Skip to content

Commit

Permalink
Verify remote packs, speed up pending request queue
Browse files Browse the repository at this point in the history
Verify that remote packs exist before using the pack index, add requests to
the beginning of the queue to locate pending requests faster.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Nick Hengeveld authored and Junio C Hamano committed Nov 6, 2005
1 parent 58e60dd commit c17fb6e
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions http-push.c
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,6 @@ void process_waiting_requests(void)
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))
Expand All @@ -745,17 +744,8 @@ void add_request(unsigned char *sha1, char *lock_token)
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();
Expand All @@ -775,13 +765,29 @@ static int fetch_index(unsigned char *sha1)
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);
Expand All @@ -792,6 +798,8 @@ static int fetch_index(unsigned char *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);
Expand Down Expand Up @@ -833,8 +841,6 @@ static int fetch_index(unsigned char *sha1)
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;
Expand Down Expand Up @@ -1610,7 +1616,6 @@ int main(int argc, char **argv)
while (request != NULL) {
next_request = request->next;
release_request(request);
free(request);
request = next_request;
}

Expand Down

0 comments on commit c17fb6e

Please sign in to comment.