Item list reversal is part of code counting number of list items changing tree. Move it into the separate function and do the reversal after counting. The stochastic bisection will need to do more operations after the counting but before reversing the list. Signed-off-by: Jan Kara <jack@xxxxxxx> --- bisect.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/bisect.c b/bisect.c index 675e8d433760..8dc1eb7f9d82 100644 --- a/bisect.c +++ b/bisect.c @@ -398,11 +398,24 @@ static struct commit_list *do_find_bisection(struct commit_list *list, return best_bisection_sorted(list, nr); } + +static struct commit_list *reverse_list(struct commit_list *list) +{ + struct commit_list *p, *next, *last = NULL; + + for (p = list; p; p = next) { + next = p->next; + p->next = last; + last = p; + } + return last; +} + void find_bisection(struct commit_list **commit_list, int *reaches, int *all, unsigned bisect_flags) { int nr, on_list; - struct commit_list *list, *p, *best, *next, *last; + struct commit_list *list, *p, *best, *next, **pnext; int *weights; init_commit_weight(&commit_weight); @@ -410,25 +423,25 @@ void find_bisection(struct commit_list **commit_list, int *reaches, /* * Count the number of total and tree-changing items on the - * list, while reversing the list. + * list and trim uninteresting items from the list. */ - for (nr = on_list = 0, last = NULL, p = *commit_list; - p; - p = next) { + list = *commit_list; + pnext = &list; + for (nr = on_list = 0, p = list; p; p = next) { unsigned commit_flags = p->item->object.flags; next = p->next; if (commit_flags & UNINTERESTING) { + *pnext = next; free(p); continue; } - p->next = last; - last = p; + pnext = &p->next; if (!(commit_flags & TREESAME)) nr++; on_list++; } - list = last; + list = reverse_list(list); show_list("bisection 2 sorted", 0, nr, list); *all = nr; -- 2.26.2