[PATCH 3/4] Move some bisection code into best_bisection.
From: Christian Couder <hidden>
Date: 2016-06-15 22:43:25
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Christian Couder <redacted> --- builtin-rev-list.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/builtin-rev-list.c b/builtin-rev-list.c
index 4e2524a..e5e8011 100644
--- a/builtin-rev-list.c
+++ b/builtin-rev-list.c@@ -258,6 +258,8 @@ static void show_list(const char *debug, int counted, int nr, static struct commit_list *do_find_bisection(struct commit_list *list, int nr, int *weights); +static struct commit_list *best_bisection(struct commit_list *list, int nr); + /* * zero or positive weight is the number of interesting commits it can * reach, including itself. Especially, weight = 0 means it does not
@@ -321,7 +323,7 @@ static struct commit_list *do_find_bisection(struct commit_list *list, int nr, int *weights) { int n, counted, distance; - struct commit_list *p, *best; + struct commit_list *p; counted = 0;
@@ -426,9 +428,17 @@ static struct commit_list *do_find_bisection(struct commit_list *list, show_list("bisection 2 counted all", counted, nr, list); /* Then find the best one */ - counted = -1; + return best_bisection(list, nr); +} + +static struct commit_list *best_bisection(struct commit_list *list, int nr) +{ + struct commit_list *p, *best; + int best_distance = -1; + best = list; for (p = list; p; p = p->next) { + int distance; unsigned flags = p->item->object.flags; if (revs.prune_fn && !(flags & TREECHANGE))
@@ -436,11 +446,12 @@ static struct commit_list *do_find_bisection(struct commit_list *list, distance = weight(p); if (nr - distance < distance) distance = nr - distance; - if (distance > counted) { + if (distance > best_distance) { best = p; - counted = distance; + best_distance = distance; } } + return best; }
--
1.5.2.1.144.gabc40