static void log_show_early(struct rev_info *revs, struct commit_list *list) { int i = revs->early_output; int show_header = 1; sort_in_topological_order(&list, revs->lifo); while (list && i) { struct commit *commit = list->item; switch (simplify_commit(revs, commit)) { case commit_show: if (show_header) { int n = estimate_commit_count(revs, list); show_early_header(revs, "incomplete", n); show_header = 0; } log_tree_commit(revs, commit); i--; break; case commit_ignore: break; case commit_error: return; } list = list->next; } /* Did we already get enough commits for the early output? */ if (!i) return; /* * ..if no, then repeat it twice a second until we * do. * * NOTE! We don't use "it_interval", because if the * reader isn't listening, we want our output to be * throttled by the writing, and not have the timer * trigger every second even if we're blocked on a * reader! */ early_output_timer.it_value.tv_sec = 0; early_output_timer.it_value.tv_usec = 500000; setitimer(ITIMER_REAL, &early_output_timer, NULL); }
static struct commit *get_revision_1(struct rev_info *revs) { if (!revs->commits) return NULL; do { struct commit_list *entry = revs->commits; struct commit *commit = entry->item; revs->commits = entry->next; free(entry); if (revs->reflog_info) fake_reflog_parent(revs->reflog_info, commit); /* * If we haven't done the list limiting, we need to look at * the parents here. We also need to do the date-based limiting * that we'd otherwise have done in limit_list(). */ if (!revs->limited) { if (revs->max_age != -1 && (commit->date < revs->max_age)) continue; if (add_parents_to_list(revs, commit, &revs->commits, NULL) < 0) die("Failed to traverse parents of commit %s", sha1_to_hex(commit->object.sha1)); } switch (simplify_commit(revs, commit)) { case commit_ignore: continue; case commit_error: die("Failed to simplify parents of commit %s", sha1_to_hex(commit->object.sha1)); default: return commit; } } while (revs->commits); return NULL; }