From: Daniel Barkalow Date: Thu, 11 Aug 2005 23:38:09 +0000 (-0400) Subject: [PATCH] Fix parallel pull dependancy tracking. X-Git-Tag: v0.99.5~24^2~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f88fcf8bab6a3dcd1255bc64f50235c745458962;p=git.git [PATCH] Fix parallel pull dependancy tracking. It didn't refetch an object it already had (good), but didn't process it, either (bad). Synchronously process anything you already have. Signed-off-by: Daniel Barkalow Signed-off-by: Junio C Hamano --- diff --git a/pull.c b/pull.c index 950d9f47b..cf3ec7384 100644 --- a/pull.c +++ b/pull.c @@ -98,12 +98,38 @@ static int process_tag(struct tag *tag) static struct object_list *process_queue = NULL; static struct object_list **process_queue_end = &process_queue; -static int process(unsigned char *sha1, const char *type) +static int process_object(struct object *obj) { - struct object *obj; - if (has_sha1_file(sha1)) + if (obj->type == commit_type) { + if (process_commit((struct commit *)obj)) + return -1; + return 0; + } + if (obj->type == tree_type) { + if (process_tree((struct tree *)obj)) + return -1; + return 0; + } + if (obj->type == blob_type) { + return 0; + } + if (obj->type == tag_type) { + if (process_tag((struct tag *)obj)) + return -1; return 0; - obj = lookup_object_type(sha1, type); + } + return error("Unable to determine requirements " + "of type %s for %s", + obj->type, sha1_to_hex(obj->sha1)); +} + +static int process(unsigned char *sha1, const char *type) +{ + struct object *obj = lookup_object_type(sha1, type); + if (has_sha1_file(sha1)) { + /* We already have it, so we should scan it now. */ + return process_object(obj); + } if (object_list_contains(process_queue, obj)) return 0; object_list_insert(obj, process_queue_end); @@ -134,27 +160,8 @@ static int loop(void) return -1; if (!obj->type) parse_object(obj->sha1); - if (obj->type == commit_type) { - if (process_commit((struct commit *)obj)) - return -1; - continue; - } - if (obj->type == tree_type) { - if (process_tree((struct tree *)obj)) - return -1; - continue; - } - if (obj->type == blob_type) { - continue; - } - if (obj->type == tag_type) { - if (process_tag((struct tag *)obj)) - return -1; - continue; - } - return error("Unable to determine requirements " - "of type %s for %s", - obj->type, sha1_to_hex(obj->sha1)); + if (process_object(obj)) + return -1; } return 0; }