]> git.ipfire.org Git - thirdparty/git.git/blobdiff - commit-reach.c
commit-reach: use fast logic in repo_in_merge_base
[thirdparty/git.git] / commit-reach.c
index 4ca7e706a18ecf3c6cf862966b9d2f81d02bc964..43e303d5f25b8dc51bee95ebceb52d0818fa858f 100644 (file)
@@ -283,7 +283,9 @@ struct commit_list *repo_get_merge_bases(struct repository *r,
 /*
  * Is "commit" a descendant of one of the elements on the "with_commit" list?
  */
-int is_descendant_of(struct commit *commit, struct commit_list *with_commit)
+static int repo_is_descendant_of(struct repository *r,
+                                struct commit *commit,
+                                struct commit_list *with_commit)
 {
        if (!with_commit)
                return 1;
@@ -301,13 +303,18 @@ int is_descendant_of(struct commit *commit, struct commit_list *with_commit)
 
                        other = with_commit->item;
                        with_commit = with_commit->next;
-                       if (in_merge_bases(other, commit))
+                       if (repo_in_merge_bases_many(r, other, 1, &commit))
                                return 1;
                }
                return 0;
        }
 }
 
+int is_descendant_of(struct commit *commit, struct commit_list *with_commit)
+{
+       return repo_is_descendant_of(the_repository, commit, with_commit);
+}
+
 /*
  * Is "commit" an ancestor of one of the "references"?
  */
@@ -348,7 +355,15 @@ int repo_in_merge_bases(struct repository *r,
                        struct commit *commit,
                        struct commit *reference)
 {
-       return repo_in_merge_bases_many(r, commit, 1, &reference);
+       int res;
+       struct commit_list *list = NULL;
+       struct commit_list **next = &list;
+
+       next = commit_list_append(commit, next);
+       res = repo_is_descendant_of(r, reference, list);
+       free_commit_list(list);
+
+       return res;
 }
 
 struct commit_list *reduce_heads(struct commit_list *heads)