Commit Diff


commit - 832c249c3a33c5421502bd9ddd86b05b619ae57c
commit + 4bd3f2bbb76e22f763d47c525de6f91eafb0c53d
blob - 7c351cca7e27d1cc2b09bfce8cd7eb247a9372c8
blob + 7dd5b8be427df3a57ec980255b2022c804e2f12d
--- lib/commit_graph.c
+++ lib/commit_graph.c
@@ -199,7 +199,7 @@ static const struct got_error *
 add_iteration_candidate(struct got_commit_graph *graph,
     struct got_commit_graph_node *node)
 {
-	struct got_commit_graph_node *n;
+	struct got_commit_graph_node *n, *next;
 	
 	if (TAILQ_EMPTY(&graph->iter_candidates)) {
 		TAILQ_INSERT_TAIL(&graph->iter_candidates, node, entry);
@@ -212,10 +212,24 @@ add_iteration_candidate(struct got_commit_graph *graph
 		err = compare_commits(&cmp, node->commit, n->commit);
 		if (err)
 			return err;
-		if (cmp < 0)
-			continue;
-		TAILQ_INSERT_BEFORE(n, node, entry);
-		break;
+		if (cmp < 0) {
+			next = TAILQ_NEXT(n, entry);
+			if (next == NULL) {
+				TAILQ_INSERT_AFTER(&graph->iter_candidates, n,
+				    node, entry);
+				break;
+			}
+			err = compare_commits(&cmp, node->commit, next->commit);
+			if (err)
+				return err;
+			if (cmp >= 0) {
+				TAILQ_INSERT_BEFORE(next, node, entry);
+				break;
+			}
+		} else {
+			TAILQ_INSERT_BEFORE(n, node, entry);
+			break;
+		}
 	}
 
 	return NULL;