From: Junio C Hamano Date: Thu, 30 Aug 2012 23:13:07 GMT Subject: [PATCH 3/4] in_merge_bases(): use paint_down_to_common() Message-ID: <1346368388-23576-4-git-send-email-gitster@pobox.com> In-Reply-To: <1346368388-23576-1-git-send-email-gitster@pobox.com> With paint_down_to_common(), we can tell if "commit" is reachable from "reference" by simply looking at its object flag, instead of iterating over the merge bases. --- commit.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/commit.c b/commit.c index 0058fa5..d39a9e9 100644 --- a/commit.c +++ b/commit.c @@ -786,20 +786,17 @@ int is_descendant_of(struct commit *commit, struct commit_list *with_commit) */ int in_merge_bases(struct commit *commit, struct commit *reference) { - struct commit_list *bases, *b; + struct commit_list *bases; int ret = 0; - bases = merge_bases_many(commit, 1, &reference); + if (parse_commit(commit) || parse_commit(reference)) + return ret; + + bases = paint_down_to_common(commit, 1, &reference); + if (commit->object.flags & PARENT2) + ret = 1; clear_commit_marks(commit, all_flags); clear_commit_marks(reference, all_flags); - - for (b = bases; b; b = b->next) { - if (!hashcmp(commit->object.sha1, b->item->object.sha1)) { - ret = 1; - break; - } - } - free_commit_list(bases); return ret; } -- 1.7.12.293.g6aeebca