summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 58e60dd)
raw | patch | inline | side by side (parent: 58e60dd)
author | Nick Hengeveld <nickh@reactrix.com> | |
Fri, 4 Nov 2005 22:22:18 +0000 (14:22 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 6 Nov 2005 09:14:44 +0000 (01:14 -0800) |
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>
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>
http-push.c | patch | blob | history |
diff --git a/http-push.c b/http-push.c
index e85f1c17089a1da95b264909cfc50235c74471da..134d405ba2e6dd41c7501aa9e078a8879ba8025f 100644 (file)
--- a/http-push.c
+++ b/http-push.c
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;
}