commit fe8df4c20ba7f071fe1ce416388a69c241201c69 from: Stefan Sperling date: Sat Jun 16 21:52:47 2018 UTC undo previous; it broke tog(1) with openssl repo commit - 98fdf1e045e1e5aca2bddf8ca07778ef7dd86a78 commit + fe8df4c20ba7f071fe1ce416388a69c241201c69 blob - 4ec98d9b24d734b3a32faf3dae874a0ca67ac6dc blob + 958b66ec82b4dd7e18be4a27f9d081e78e7b6484 --- lib/commit_graph.c +++ lib/commit_graph.c @@ -155,6 +155,23 @@ add_node_to_iter_list(struct got_commit_graph *graph, return; } + /* Ensure that an iteration in progress will see this new commit. */ + if (graph->iter_node) { + n = graph->iter_node; + while (n) { + next = TAILQ_NEXT(n, entry); + if (next && + node->commit_timestamp >= next->commit_timestamp) { + TAILQ_INSERT_BEFORE(next, node, entry); + return; + } + n = next; + } + TAILQ_INSERT_AFTER(&graph->iter_list, graph->iter_node, + node, entry); + return; + } + /* * If a child node is known, begin looping over the list there * instead of beginning from the list head. @@ -164,10 +181,6 @@ add_node_to_iter_list(struct got_commit_graph *graph, /* Insert into list based on committer timestamp. */ do { if (node->commit_timestamp == n->commit_timestamp) { - /* - * Insert after, rather than before, so that an - * iteration in progress will see this new commit. - */ TAILQ_INSERT_AFTER(&graph->iter_list, n, node, entry); break; } else if (node->commit_timestamp < n->commit_timestamp) {