git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] rev-list: estimate number of bisection step left

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 17, 2009, 05:09 UTC
Message-ID
<20090217060944.488184b0.chriscool@tuxfamily.org>

This patch teaches "git rev-list --bisect-vars" to output an estimate of the number of bisection step left along with the other variables it already outputs.

The estimate is calculated using log2(all_revisions_left/2 - 1). This is the most straightforward formula and seems to work fine in practice.

We substract 1 to "all_revisions_left/2" because we allready know one bad revision.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 builtin-rev-list.c |   27 +++++++++++++++++++++++++--
 git-bisect.sh      |    2 +-
 2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/builtin-rev-list.c b/builtin-rev-list.c
index 436afa4..ee4abe7 100644
--- a/builtin-rev-list.c
+++ b/builtin-rev-list.c
@@ -574,6 +574,27 @@ static struct commit_list *find_bisection(struct commit_list *list,
 	return best;
 }
 
+/*
+ * Estimate the number of bisect steps left
+ * Taking log2(all_revisions_left/2 - 1) seems to work fine.
+ * "- 1" is because we already know one bad revision.
+ */
+static int estimate_bisect_steps(int all)
+{
+	int log2 = 0;
+	int left = (all >> 1) - 1;
+
+	if (left <= 0)
+		return 0;
+
+	do {
+		left = left >> 1;
+		log2++;
+	} while (left);
+
+	return log2;
+}
+
 int cmd_rev_list(int argc, const char **argv, const char *prefix)
 {
 	struct commit_list *list;
@@ -688,12 +709,14 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
 			       "bisect_nr=%d\n"
 			       "bisect_good=%d\n"
 			       "bisect_bad=%d\n"
-			       "bisect_all=%d\n",
+			       "bisect_all=%d\n"
+			       "bisect_steps=%d\n",
 			       hex,
 			       cnt - 1,
 			       all - reaches - 1,
 			       reaches - 1,
-			       all);
+			       all,
+			       estimate_bisect_steps(all));
 			return 0;
 		}
 	}
diff --git a/git-bisect.sh b/git-bisect.sh
index 85db4ba..6b23439 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -500,7 +500,7 @@ bisect_next() {
 	# commit is also a "skip" commit (see above).
 	exit_if_skipped_commits "$bisect_rev"
 
-	bisect_checkout "$bisect_rev" "$bisect_nr revisions left to test after this"
+	bisect_checkout "$bisect_rev" "$bisect_nr revisions left to test after this (roughtly $bisect_steps steps)"
 }
 
 bisect_visualize() {
-- 
1.6.2.rc0.90.g0753.dirty
Next: Junio C Hamano
Message 1 of 13 in “rev-list: estimate number of bisection step left”
  1. rev-list: estimate number of bisection step leftChristian Couder, Feb 17, 2009
  2. Junio C HamanoFeb 17, 2009
  3. Christian CouderFeb 19, 2009
  4. Christian CouderFeb 19, 2009
  5. Christian CouderFeb 19, 2009
  6. John TapsellFeb 19, 2009
  7. Christian CouderFeb 19, 2009
  8. Johannes SchindelinFeb 17, 2009
  9. John TapsellFeb 17, 2009
  10. Johannes SchindelinFeb 17, 2009
  11. John TapsellFeb 17, 2009
  12. Johannes SchindelinFeb 17, 2009
  13. Thomas RastFeb 17, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.