commit - 832c249c3a33c5421502bd9ddd86b05b619ae57c
commit + 4bd3f2bbb76e22f763d47c525de6f91eafb0c53d
blob - 7c351cca7e27d1cc2b09bfce8cd7eb247a9372c8
blob + 7dd5b8be427df3a57ec980255b2022c804e2f12d
--- lib/commit_graph.c
+++ lib/commit_graph.c
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);
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;