Commit fedc05c89ceb545f29c57bf35ffd066bd9e49386

Carlos Martín Nieto 2016-10-06T18:13:34

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.

diff --git a/src/revwalk.c b/src/revwalk.c
index 4753a37..0ada587 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();