X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=rev-list.c;h=c410bc33dca0e74d3f0820896382bb152ad1711c;hb=b93aa3ec9506618e9a22c04d775b35f31e7e068f;hp=2d97cdb64bdad56046c1dfd2fd784af54d420ca5;hpb=10d781b9caa4f71495c7b34963bef137216f86a8;p=git.git diff --git a/rev-list.c b/rev-list.c index 2d97cdb6..c410bc33 100644 --- a/rev-list.c +++ b/rev-list.c @@ -231,8 +231,6 @@ static void mark_parents_uninteresting(struct commit *commit) { struct commit_list *parents = commit->parents; - if (tree_objects) - mark_tree_uninteresting(commit->tree); while (parents) { struct commit *commit = parents->item; commit->object.flags |= UNINTERESTING; @@ -272,29 +270,6 @@ static int everybody_uninteresting(struct commit_list *orig) continue; return 0; } - - /* - * Ok, go back and mark all the edge trees uninteresting, - * since otherwise we can have situations where a parent - * that was marked uninteresting (and we never even had - * to look at) had lots of objects that we don't want to - * include. - * - * NOTE! This still doesn't mean that the object list is - * "correct", since we may end up listing objects that - * even older commits (that we don't list) do actually - * reference, but it gets us to a minimal list (or very - * close) in practice. - */ - if (!tree_objects) - return 1; - - while (orig) { - struct commit *commit = orig->item; - if (!parse_commit(commit) && commit->tree) - mark_tree_uninteresting(commit->tree); - orig = orig->next; - } return 1; } @@ -370,6 +345,19 @@ static struct commit_list *find_bisection(struct commit_list *list) return best; } +static void mark_edges_uninteresting(struct commit_list *list) +{ + for ( ; list; list = list->next) { + struct commit_list *parents = list->item->parents; + + for ( ; parents; parents = parents->next) { + struct commit *commit = parents->item; + if (commit->object.flags & UNINTERESTING) + mark_tree_uninteresting(commit->tree); + } + } +} + static struct commit_list *limit_list(struct commit_list *list) { struct commit_list *newlist = NULL; @@ -388,6 +376,8 @@ static struct commit_list *limit_list(struct commit_list *list) } p = &commit_list_insert(commit, p)->next; } + if (tree_objects) + mark_edges_uninteresting(newlist); if (bisect_list) newlist = find_bisection(newlist); return newlist; @@ -582,6 +572,8 @@ int main(int argc, char **argv) handle_one_commit(commit, &list); } + save_commit_buffer = verbose_header; + if (!merge_order) { sort_by_date(&list); if (limited)