@@ -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;
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@suse.cz> --- bisect.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-)