Re: git-rev-list: proper lazy reachability
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Jun 4, 2005, 15:42 UTC
- Message-ID
- <Pine.LNX.4.58.0506040837190.1876@ppc970.osdl.org>
- In-Reply-To
- <7vekbigo8q.fsf@assigned-by-dhcp.cox.net>
On Sat, 4 Jun 2005, Junio C Hamano wrote:
Show 12 quoted lines
> > 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.
Show 5 quoted lines
> 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);