Re: [PATCH] First cut at libifying revlist generation
- From
Junio C Hamano <junkio@cox.net>
- Date
- Feb 27, 2006, 03:11 UTC
- Message-ID
- <7vpsl93395.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0602251608160.22647@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> Comments? I think this is safe to apply, because I've done a diff of the > old non-split rev-list.c against both the new rev-list.c and revision.c, > and all the changes _look_ like just moving things around and taking the > new "struct rev_info" into account.
I think you would need something the attached patch, at least.
I have a suspicion that this was your easter egg to see how careful I am reading what I apply -- and I failed. Johannes gets a test-pilot star for this. This also means we need a bit better set of tests.
The diff between old rev-list.c and new split files would not have caught the static variable gotcha.
I am clueless about the "limited = (list && list->next)" part, but there is only one commit involved hence the test is false with my testcase "git-rev-list --objects v1.0.0^0..v1.0.0"; I think the old code said dotdot is a limited case.
---
diff --git a/rev-list.c b/rev-list.c index d1c52a6..630626e 100644 --- a/rev-list.c +++ b/rev-list.c @@ -214,8 +214,6 @@ static struct object_list **process_tree return p; } -static struct object_list *pending_objects = NULL; - static void show_commit_list(struct commit_list *list) { struct object_list *objects = NULL, **p = &objects, *pending; @@ -226,7 +224,7 @@ static void show_commit_list(struct comm if (process_commit(commit) == STOP) break; } - for (pending = pending_objects; pending; pending = pending->next) { + for (pending = revs.pending_objects; pending; pending = pending->next) { struct object *obj = pending->item; const char *name = pending->name; if (obj->flags & (UNINTERESTING | SEEN)) @@ -675,7 +673,7 @@ int main(int argc, const char **argv) } list = revs.commits; - if (list && list->next) + if (list) limited = 1; if (revs.topo_order) @@ -689,7 +687,7 @@ int main(int argc, const char **argv) limited = 1; diff_tree_setup_paths(revs.paths); } - if (revs.max_age || revs.min_age) + if (revs.max_age != -1 || revs.min_age != -1) limited = 1; save_commit_buffer = verbose_header;