Commit 36a80fda by Vicent Marti

Merge pull request #2195 from libgit2/cmn/revwalk-no-hide

revwalk: don't try to find merge bases when there can be none
parents 7d633572 704b55cc
......@@ -205,6 +205,12 @@ int git_merge__bases_many(git_commit_list **out, git_revwalk *walk, git_commit_l
git_commit_list *result = NULL, *tmp = NULL;
git_pqueue list;
/* If there's only the one commit, there can be no merge bases */
if (twos->length == 0) {
*out = NULL;
return 0;
}
/* if the commit is repeated, we have a our merge base already */
git_vector_foreach(twos, i, two) {
if (one == two)
......
......@@ -141,6 +141,9 @@ static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting,
if (commit == NULL)
return -1; /* error already reported by failed lookup */
if (uninteresting)
walk->did_hide = 1;
commit->uninteresting = uninteresting;
if (walk->one == NULL && !uninteresting) {
walk->one = commit;
......@@ -390,11 +393,18 @@ static int prepare_walk(git_revwalk *walk)
return GIT_ITEROVER;
}
/* first figure out what the merge bases are */
if (git_merge__bases_many(&bases, walk, walk->one, &walk->twos) < 0)
return -1;
/*
* If the user asked to hide commits, we need to figure out
* what the merge bases are so we can know when we can stop
* marking parents uninteresting.
*/
if (walk->did_hide) {
if (git_merge__bases_many(&bases, walk, walk->one, &walk->twos) < 0)
return -1;
git_commit_list_free(&bases);
}
git_commit_list_free(&bases);
if (process_commit(walk, walk->one, walk->one->uninteresting) < 0)
return -1;
......
......@@ -32,7 +32,8 @@ struct git_revwalk {
int (*enqueue)(git_revwalk *, git_commit_list_node *);
unsigned walking:1,
first_parent: 1;
first_parent: 1,
did_hide: 1;
unsigned int sorting;
/* merge base calculation */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment