From: Linus Torvalds Date: Sat, 04 Jun 2005 15:42:46 GMT Subject: Re: git-rev-list: proper lazy reachability Message-ID: In-Reply-To: <7vekbigo8q.fsf@assigned-by-dhcp.cox.net> On Sat, 4 Jun 2005, Junio C Hamano wrote: > > Linus, what do you think rev-list should do given HEADs from two > forks, like this? > > JC git-rev-list JC LT ???? > | > | LT > | | > \ / > | > | > | Ahh. Ok, I'll fix it. Indeed, I think it should give everything up to the merge base. > Current "proper lazy reachability" version, btw, does something > very unexpected for my use pattern. If you have more than one > commits between the fork point and LT HEAD in the above picture, > everything from the beginning of time to JC is given, or > something silly like that. Yes. The whole thing is written to literally expect to see the "stop here" thing, and that's when it starts poisoning the well. Does this fix it for you (untested, of course)? Linus --- diff --git a/rev-list.c b/rev-list.c --- a/rev-list.c +++ b/rev-list.c @@ -160,6 +160,8 @@ int main(int argc, char **argv) end = lookup_commit_reference(sha1[1]); if (!end || parse_commit(end) < 0) die("bad ending commit object"); + end->object.flags |= UNINTERESTING; + commit_list_insert(end, &list); } commit_list_insert(commit, &list);