Skip to content

Commit

Permalink
in_merge_bases(): omit unnecessary redundant common ancestor reduction
Browse files Browse the repository at this point in the history
The function get_merge_bases() needs to postprocess the result from
merge_bases_many() in order to make sure none of the commit is a
true ancestor of another commit, which is expensive.  However, when
checking if a commit is an ancestor of another commit, we only need
to see if the commit is a common ancestor between the two, and do
not have to care if other common ancestors merge_bases_many() finds
are true merge bases or an ancestor of another merge base.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Thomas Rast authored and Junio C Hamano committed Aug 28, 2012
1 parent 6571225 commit b0f9e9e
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -780,7 +780,10 @@ int in_merge_bases(struct commit *commit, struct commit *reference)
struct commit_list *bases, *b;
int ret = 0;

bases = get_merge_bases(commit, reference, 1);
bases = merge_bases_many(commit, 1, &reference);
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;
Expand Down

0 comments on commit b0f9e9e

Please sign in to comment.