For stochastic bisection we will need to keep more information for each commit than plain int. Factor out initialization of commit weight storage into a separate function so that stochastic bisection can more easily alter it. Signed-off-by: Jan Kara <jack@xxxxxxx> --- bisect.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/bisect.c b/bisect.c index 8dc1eb7f9d82..dd2f6b68ae3d 100644 --- a/bisect.c +++ b/bisect.c @@ -280,19 +280,17 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n * or positive distance. */ static struct commit_list *do_find_bisection(struct commit_list *list, - int nr, int *weights, - unsigned bisect_flags) + int nr, unsigned bisect_flags) { - int n, counted; + int counted; struct commit_list *p; counted = 0; - for (n = 0, p = list; p; p = p->next) { + for (p = list; p; p = p->next) { struct commit *commit = p->item; unsigned commit_flags = commit->object.flags; - *commit_weight_at(&commit_weight, p->item) = &weights[n++]; switch (count_interesting_parents(commit, bisect_flags)) { case 0: if (!(commit_flags & TREESAME)) { @@ -398,6 +396,20 @@ static struct commit_list *do_find_bisection(struct commit_list *list, return best_bisection_sorted(list, nr); } +static void *setup_commit_weight_array(struct commit_list *list, int nodes) +{ + int entry_size = sizeof(int); + void *array; + struct commit_list *p; + int n; + + array = xcalloc(nodes, entry_size); + for (n = 0, p = list; p; p = p->next, n++) { + *commit_weight_at(&commit_weight, p->item) = + array + n * entry_size; + } + return array; +} static struct commit_list *reverse_list(struct commit_list *list) { @@ -416,7 +428,7 @@ void find_bisection(struct commit_list **commit_list, int *reaches, { int nr, on_list; struct commit_list *list, *p, *best, *next, **pnext; - int *weights; + void *weights; init_commit_weight(&commit_weight); show_list("bisection 2 entry", 0, 0, *commit_list); @@ -441,14 +453,14 @@ void find_bisection(struct commit_list **commit_list, int *reaches, nr++; on_list++; } + weights = setup_commit_weight_array(list, on_list); list = reverse_list(list); show_list("bisection 2 sorted", 0, nr, list); *all = nr; - CALLOC_ARRAY(weights, on_list); /* Do the real work of finding bisection commit. */ - best = do_find_bisection(list, nr, weights, bisect_flags); + best = do_find_bisection(list, nr, bisect_flags); if (best) { if (!(bisect_flags & FIND_BISECTION_ALL)) { list->item = best->item; -- 2.26.2