Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Rast <trast@student.ethz.ch>2012-08-23 18:20:41 +0400
committerJunio C Hamano <gitster@pobox.com>2012-08-28 19:37:07 +0400
commitb0f9e9eeef0ed4f21fc9bfa92f1314e3112d5cc1 (patch)
treee0983e31157fd5c62fc43b880c1192169b3e8fe0 /commit.c
parent6571225137b1ba270b49a0dfc6a30aab6f4b86ba (diff)
in_merge_bases(): omit unnecessary redundant common ancestor reduction
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>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/commit.c b/commit.c
index 0a05a1075a..12e5396e4c 100644
--- a/commit.c
+++ b/commit.c
@@ -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;