From ee4f439fea8974c4d9de798460eb95a2ac001156 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 1 May 2005 21:07:40 -0700 Subject: [PATCH] [PATCH] Do not call fetch() when we have it. Currently pull() calls fetch() without checking whether we have the wanted object but all of the existing fetch() implementations perform this check and return success themselves. This patch moves the check to the caller. I will be sending a trivial git-local-pull which depends on this in the next message. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- http-pull.c | 4 ---- pull.c | 17 ++++++++++++----- rpull.c | 2 -- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/http-pull.c b/http-pull.c index d877c4abe3..f693aba61b 100644 --- a/http-pull.c +++ b/http-pull.c @@ -53,10 +53,6 @@ int fetch(unsigned char *sha1) char *url; char *posn; - if (has_sha1_file(sha1)) { - return 0; - } - local = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666); if (local < 0) diff --git a/pull.c b/pull.c index 86a7b6901f..bbef245fc8 100644 --- a/pull.c +++ b/pull.c @@ -8,6 +8,13 @@ int get_tree = 0; int get_history = 0; int get_all = 0; +static int make_sure_we_have_it(unsigned char *sha1) +{ + if (has_sha1_file(sha1)) + return 0; + return fetch(sha1); +} + static int process_tree(unsigned char *sha1) { struct tree *tree = lookup_tree(sha1); @@ -17,7 +24,7 @@ static int process_tree(unsigned char *sha1) return -1; for (entries = tree->entries; entries; entries = entries->next) { - if (fetch(entries->item.tree->object.sha1)) + if (make_sure_we_have_it(entries->item.tree->object.sha1)) return -1; if (entries->directory) { if (process_tree(entries->item.tree->object.sha1)) @@ -31,14 +38,14 @@ static int process_commit(unsigned char *sha1) { struct commit *obj = lookup_commit(sha1); - if (fetch(sha1)) + if (make_sure_we_have_it(sha1)) return -1; if (parse_commit(obj)) return -1; if (get_tree) { - if (fetch(obj->tree->object.sha1)) + if (make_sure_we_have_it(obj->tree->object.sha1)) return -1; if (process_tree(obj->tree->object.sha1)) return -1; @@ -50,7 +57,7 @@ static int process_commit(unsigned char *sha1) for (; parents; parents = parents->next) { if (has_sha1_file(parents->item->object.sha1)) continue; - if (fetch(parents->item->object.sha1)) { + if (make_sure_we_have_it(parents->item->object.sha1)) { /* The server might not have it, and * we don't mind. */ @@ -70,7 +77,7 @@ int pull(char *target) retval = get_sha1_hex(target, sha1); if (retval) return retval; - retval = fetch(sha1); + retval = make_sure_we_have_it(sha1); if (retval) return retval; return process_commit(sha1); diff --git a/rpull.c b/rpull.c index 6624440d5a..d4d4b9b9ae 100644 --- a/rpull.c +++ b/rpull.c @@ -14,8 +14,6 @@ static int fd_out; int fetch(unsigned char *sha1) { - if (has_sha1_file(sha1)) - return 0; write(fd_out, sha1, 20); return write_sha1_from_fd(sha1, fd_in); }