Skip to content

Commit

Permalink
[PATCH] Fix parallel pull dependancy tracking.
Browse files Browse the repository at this point in the history
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 <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Daniel Barkalow authored and Junio C Hamano committed Aug 12, 2005
1 parent a6bc313 commit f88fcf8
Showing 1 changed file with 32 additions and 25 deletions.
57 changes: 32 additions & 25 deletions pull.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit f88fcf8

Please sign in to comment.