diff options
author | Christian Couder <chriscool@tuxfamily.org> | 2007-09-17 05:28:29 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-18 02:58:20 -0700 |
commit | 77c11e064c5daadeb42e79b7fc6b28857e9b6bb6 (patch) | |
tree | 45b9090df84bd7c6e94736ab093d43488244aee0 /builtin-rev-list.c | |
parent | ce0cbad7727457854d631a6314d9aee7c837cb65 (diff) | |
download | git-77c11e064c5daadeb42e79b7fc6b28857e9b6bb6.tar.gz git-77c11e064c5daadeb42e79b7fc6b28857e9b6bb6.tar.xz |
rev-list --bisect: Move some bisection code into best_bisection.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-rev-list.c')
-rw-r--r-- | builtin-rev-list.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/builtin-rev-list.c b/builtin-rev-list.c index 2dae28712..8c9635abe 100644 --- a/builtin-rev-list.c +++ b/builtin-rev-list.c @@ -255,6 +255,30 @@ static void show_list(const char *debug, int counted, int nr, } #endif /* DEBUG_BISECT */ +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)) + continue; + distance = weight(p); + if (nr - distance < distance) + distance = nr - distance; + if (distance > best_distance) { + best = p; + best_distance = distance; + } + } + + return best; +} + /* * zero or positive weight is the number of interesting commits it can * reach, including itself. Especially, weight = 0 means it does not @@ -272,7 +296,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; @@ -377,22 +401,7 @@ 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; - best = list; - for (p = list; p; p = p->next) { - unsigned flags = p->item->object.flags; - - if (revs.prune_fn && !(flags & TREECHANGE)) - continue; - distance = weight(p); - if (nr - distance < distance) - distance = nr - distance; - if (distance > counted) { - best = p; - counted = distance; - } - } - return best; + return best_bisection(list, nr); } static struct commit_list *find_bisection(struct commit_list *list, |