From: Nick Hengeveld <nickh@reactrix.com>
To: git@vger.kernel.org
Subject: [PATCH 2/3] Switched back to loading alternates as needed
Date: Fri, 21 Oct 2005 12:06:20 -0700 [thread overview]
Message-ID: <20051021190620.GF6160@reactrix.com> (raw)
Switched back to loading alternates as needed
Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
---
Always loading alternates causes unnecessary requests, especially
when a repository is being cloned and git-http-fetch is run repeatedly
with different commit IDs. On a related note, in such a case could we
pass multiple IDs to the commit walkers (perhaps via stdin?)
http-fetch.c | 45 +++++++++++++++++++++++++++++----------------
1 files changed, 29 insertions(+), 16 deletions(-)
applies-to: 6a0c92c60e0b46581276e7592e4f7a1b12f3dc7e
274889e0d7a97eaf060851653166b7cbc72dd3f6
diff --git a/http-fetch.c b/http-fetch.c
index d26fae8..ed1053a 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -25,6 +25,7 @@
#define PREV_BUF_SIZE 4096
#define RANGE_HEADER_SIZE 30
+static int got_alternates = 0;
static int active_requests = 0;
static int data_received;
@@ -85,6 +86,7 @@ struct active_request_slot
int in_use;
int done;
CURLcode curl_result;
+ long http_code;
struct active_request_slot *next;
};
@@ -235,6 +237,7 @@ static size_t fwrite_sha1_file(void *ptr
static void process_curl_messages(void);
static void process_request_queue(void);
#endif
+static int fetch_alternates(char *base);
static CURL* get_curl_handle(void)
{
@@ -580,6 +583,9 @@ void process_curl_messages(void)
slot->done = 1;
slot->in_use = 0;
slot->curl_result = curl_message->data.result;
+ curl_easy_getinfo(slot->curl,
+ CURLINFO_HTTP_CODE,
+ &slot->http_code);
request = request_queue_head;
while (request != NULL &&
request->slot != slot)
@@ -590,19 +596,20 @@ void process_curl_messages(void)
if (request != NULL) {
request->curl_result =
curl_message->data.result;
- curl_easy_getinfo(slot->curl,
- CURLINFO_HTTP_CODE,
- &request->http_code);
+ request->http_code = slot->http_code;
request->slot = NULL;
+ request->state = COMPLETE;
/* Use alternates if necessary */
- if (request->http_code == 404 &&
- request->repo->next != NULL) {
- request->repo = request->repo->next;
- start_request(request);
+ if (request->http_code == 404) {
+ fetch_alternates(alt->base);
+ if (request->repo->next != NULL) {
+ request->repo =
+ request->repo->next;
+ start_request(request);
+ }
} else {
finish_request(request);
- request->state = COMPLETE;
}
}
} else {
@@ -765,6 +772,9 @@ static int fetch_alternates(char *base)
struct active_request_slot *slot;
+ if (got_alternates)
+ return 0;
+
data = xmalloc(4096);
buffer.size = 4096;
buffer.posn = 0;
@@ -797,6 +807,8 @@ static int fetch_alternates(char *base)
run_active_slot(slot);
if (slot->curl_result != CURLE_OK) {
free(buffer.buffer);
+ if (slot->http_code == 404)
+ got_alternates = 1;
return 0;
}
}
@@ -868,6 +880,7 @@ static int fetch_alternates(char *base)
i = posn + 1;
}
+ got_alternates = 1;
free(buffer.buffer);
return ret;
}
@@ -1059,16 +1072,16 @@ static int fetch_object(struct alt_base
run_active_slot(request->slot);
#ifndef USE_CURL_MULTI
request->curl_result = request->slot->curl_result;
- curl_easy_getinfo(request->slot->curl,
- CURLINFO_HTTP_CODE,
- &request->http_code);
+ request->http_code = request->slot->http_code;
request->slot = NULL;
/* Use alternates if necessary */
- if (request->http_code == 404 &&
- request->repo->next != NULL) {
- request->repo = request->repo->next;
- start_request(request);
+ if (request->http_code == 404) {
+ fetch_alternates(alt->base);
+ if (request->repo->next != NULL) {
+ request->repo = request->repo->next;
+ start_request(request);
+ }
} else {
finish_request(request);
request->state = COMPLETE;
@@ -1121,6 +1134,7 @@ int fetch(unsigned char *sha1)
while (altbase) {
if (!fetch_pack(altbase, sha1))
return 0;
+ fetch_alternates(alt->base);
altbase = altbase->next;
}
return error("Unable to find %s under %s\n", sha1_to_hex(sha1),
@@ -1297,7 +1311,6 @@ int main(int argc, char **argv)
alt->got_indices = 0;
alt->packs = NULL;
alt->next = NULL;
- fetch_alternates(alt->base);
if (pull(commit_id))
return 1;
---
0.99.8.GIT
reply other threads:[~2005-10-21 19:06 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051021190620.GF6160@reactrix.com \
--to=nickh@reactrix.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.