From fedc05c89ceb545f29c57bf35ffd066bd9e49386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 6 Oct 2016 18:13:34 +0200 Subject: revwalk: don't show commits that become uninteresting after being enqueued When we read from the list which `limit_list()` gives us, we need to check that the commit is still interesting, as it might have become uninteresting after it was added to the list. --- src/revwalk.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/revwalk.c b/src/revwalk.c index 4753a3723..0ada5870a 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -246,9 +246,12 @@ static int revwalk_next_unsorted(git_commit_list_node **object_out, git_revwalk { git_commit_list_node *next; - if ((next = git_commit_list_pop(&walk->iterator_rand)) != NULL) { - *object_out = next; - return 0; + while ((next = git_commit_list_pop(&walk->iterator_rand)) != NULL) { + /* Some commits might become uninteresting after being added to the list */ + if (!next->uninteresting) { + *object_out = next; + return 0; + } } giterr_clear(); @@ -257,12 +260,14 @@ static int revwalk_next_unsorted(git_commit_list_node **object_out, git_revwalk static int revwalk_next_toposort(git_commit_list_node **object_out, git_revwalk *walk) { - git_commit_list_node *node; + git_commit_list_node *next; - node = git_commit_list_pop(&walk->iterator_topo); - if (node) { - *object_out = node; - return 0; + while ((next = git_commit_list_pop(&walk->iterator_topo)) != NULL) { + /* Some commits might become uninteresting after being added to the list */ + if (!next->uninteresting) { + *object_out = next; + return 0; + } } giterr_clear(); -- cgit v1.2.1