From: Junio C Hamano Date: Wed, 09 Nov 2005 10:20:22 GMT Subject: Re: Comments on recursive merge.. Message-ID: <7v4q6mgm1l.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <7v8xvyd2bh.fsf@assigned-by-dhcp.cox.net> Junio C Hamano writes: > Linus Torvalds writes: > >> It does: >> >> struct commit *commit = pop_one_commit(list_p); >> int still_interesting = !!interesting(*list_p); >> >> in that order: it looks whether there are any interesting commits left >> _after_ it has popped the top-of-stack. > > The problem is most of the time hidden,... As you pointed out, still_interesting means "after we are done with this commit, do we still have something interesting to be processed?", and the later "extra < 0" check compensates for this. After I pop the last interesting commit, I still look at its parents and push them back into the list. It seems to be doing the right thing after all. I hate to admit it, but I have been having hard time figuring out how this thing works X-<. In the meantime, I've checked commits from linux-2.6 history that have more than one merge-base candidates. "git-merge-base --all" and "git-show-branch --merge-base" give the same answer to all of them [*1*]. I do not think "git-show-branch --merge-base" can be any more efficient than "git-merge-base --all". It does _more_ things (probably unnecessary things as well). Pasky's number could be just an artifact of hot/cold cache difference. [Footnote] *1* Here are the commits I used from linux-2.6 repository that have more than one commits: ba9b543d5bec0a7605952e2ba501fb8b0f3b6407 84ffa747520edd4556b136bdfc9df9eb1673ce12 da28c12089dfcfb8695b6b555cdb8e03dda2b690 3190186362466658f01b2e354e639378ce07e1a9 0c168775709faa74c1b87f1e61046e0c51ade7f3 0e396ee43e445cb7c215a98da4e76d0ce354d9d7 467ca22d3371f132ee225a5591a1ed0cd518cb3d