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

[PATCH 11/26] bisect--helper: Finish `bisect_start()` conversion

From
Pranit Bauva via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 24, 2019, 10:11 UTC
Message-ID
<c4b5884f657c5670409b669afcd2a71583794920.1551003074.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.117.git.gitgitgadget@gmail.com>
From: Pranit Bauva <pranit.bauva@gmail.com>

With the conversion of `bisect_auto_next()` in previous commit, `bisect_start()` has been successfully ported to C.

Add the subcommands to `git bisect--helper` and call it from git-bisect.sh.

Remove `bisect_start()` shell method and call `git bisect--helper --bisect-start` subcommand from git-bisect.sh.

Removing the part about signals as we are not doing anything anymore to trap signals. While at it, "trap" is changed to "handle". As "trap" is a reference to the shell "trap" builtin, which isn't used anymore.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com>
Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com>
---
 builtin/bisect--helper.c | 29 +++++++++++++++++++++++++++--
 git-bisect.sh            | 29 +++--------------------------
 2 files changed, 30 insertions(+), 28 deletions(-)
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index 2f19924471..d538cb04fb 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -697,9 +697,9 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
 		return -1;
 
 	/*
-	 * In case of mistaken revs or checkout error, or signals received,
+	 * In case of mistaken revs or checkout error,
 	 * "bisect_auto_next" below may exit or misbehave.
-	 * We have to trap this to be able to clean up using
+	 * We have to handle this to be able to clean up using
 	 * "bisect_clean_state".
 	 */
 
@@ -743,6 +743,31 @@ static int bisect_start(struct bisect_terms *terms, int no_checkout,
 	string_list_clear(&states, 0);
 	strbuf_release(&start_head);
 	strbuf_release(&bisect_names);
+	if (res)
+		return res;
+
+	res = bisect_auto_next(terms, NULL);
+	/*
+	 * In case of mistaken revs or checkout error, or signals received,
+	 * "bisect_auto_next" below may exit or misbehave.
+	 * We have to trap this to be able to clean up using
+	 * "bisect_clean_state".
+	 * return code -11 is special code that indicates special success.
+	 *	-> bisect_start()
+	 *	   . res = bisect_auto_next()
+	 *	    -> bisect_auto_next()
+	 *	       . return bisect_next()
+	 *	       -> bisect_next()
+	 *		  . res = bisect_next_all()
+	 *		  -> bisect_next_all()
+	 *		     . res = check_good_are_ancestors_of_bad()
+	 *		     -> check_good_are_ancestors_of_bad()
+	 *			. res = check_merge_bases()
+	 *			-> check_merge_bases()
+	 *			   . res = -11
+	 */
+	if (res && res != -11)
+		bisect_clean_state();
 	return res;
 }
 
diff --git a/git-bisect.sh b/git-bisect.sh
index 7531b74708..fec527e1ef 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -63,35 +63,13 @@ bisect_autostart() {
 			[Nn]*)
 				exit ;;
 			esac
-			bisect_start
+			git bisect--helper --bisect-start
 		else
 			exit 1
 		fi
 	}
 }
 
-bisect_start() {
-	git bisect--helper --bisect-start $@ || exit
-
-	#
-	# Change state.
-	# In case of mistaken revs or checkout error, or signals received,
-	# "bisect_auto_next" below may exit or misbehave.
-	# We have to trap this to be able to clean up using
-	# "bisect_clean_state".
-	#
-	trap 'git bisect--helper --bisect-clean-state' 0
-	trap 'exit 255' 1 2 3 15
-
-	#
-	# Check if we can proceed to the next bisect state.
-	#
-	get_terms
-	git bisect--helper --bisect-auto-next || exit
-
-	trap '-' 0
-}
-
 bisect_skip() {
 	all=''
 	for arg in "$@"
@@ -184,8 +162,7 @@ bisect_replay () {
 		get_terms
 		case "$command" in
 		start)
-			cmd="bisect_start $rev"
-			eval "$cmd" ;;
+			eval "git bisect--helper --bisect-start $rev" ;;
 		"$TERM_GOOD"|"$TERM_BAD"|skip)
 			git bisect--helper --bisect-write "$command" "$rev" "$TERM_GOOD" "$TERM_BAD" || exit;;
 		terms)
@@ -284,7 +261,7 @@ case "$#" in
 	help)
 		git bisect -h ;;
 	start)
-		bisect_start "$@" ;;
+		git bisect--helper --bisect-start "$@" ;;
 	bad|good|new|old|"$TERM_BAD"|"$TERM_GOOD")
 		bisect_state "$cmd" "$@" ;;
 	skip)
-- 
gitgitgadget
Previous: Pranit Bauva via GitGitGadgetNext: Pranit Bauva via GitGitGadget
Message 10 of 27 in “Git bisect part3”
  1. 00/26 Git bisect part3Tanushree Tumane via GitGitGadget, Feb 24, 2019
  2. 01/26 bisect--helper: refer branch.buf before strbuf_release(...)Tanushree Tumane via GitGitGadget, Feb 24, 2019
  3. 02/26 bisect--helper: change `retval` to `res`Tanushree Tumane via GitGitGadget, Feb 24, 2019
  4. 05/26 bisect.c: libify `bisect_checkout` and its dependantsPranit Bauva via GitGitGadget, Feb 24, 2019
  5. 04/26 bisect.c: libify `exit_if_skipped_commits` to `error_if_skipped...`Pranit Bauva via GitGitGadget, Feb 24, 2019
  6. 06/26 bisect.c: libify `check_merge_bases` and its dependents.Pranit Bauva via GitGitGadget, Feb 24, 2019
  7. 08/26 bisect.c: libify `handle_bad_merge_base` and its dependantsPranit Bauva via GitGitGadget, Feb 24, 2019
  8. 07/26 bisect.c: libify `check_good_are_ancestors_of_bad` and its dependentsPranit Bauva via GitGitGadget, Feb 24, 2019
  9. 09/26 bisect.c: libify `bisect_next_all` and its dependantsPranit Bauva via GitGitGadget, Feb 24, 2019
  10. 11/26 bisect--helper: Finish `bisect_start()` conversionPranit Bauva via GitGitGadget, Feb 24, 2019
  11. 12/26 bisect--helper: dequote arguments in `bisect-start`Pranit Bauva via GitGitGadget, Feb 24, 2019
  12. 10/26 bisect--helper: `bisect_next` and `bisect_auto_next` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  13. 03/26 bisect--helper: `decide_next()` helper function.Tanushree Tumane via GitGitGadget, Feb 24, 2019
  14. 23/26 bisect--helper: retire `--bisect-auto-next` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  15. 21/26 bisect--helper: retire `--bisect-write` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  16. 20/26 bisect--helper: `bisect_replay` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  17. 22/26 bisect--helper: retire `--bisect-autostart` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  18. 19/26 bisect--helper: `bisect_log` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  19. 17/26 bisect--helper: retire `--check-expected-revs` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  20. 18/26 bisect--helper: retire `--write-terms` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  21. 16/26 bisect--helper: `bisect_state` & `bisect_head` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  22. 24/26 bisect--helper: remove the dequote in bisect_start()Pranit Bauva via GitGitGadget, Feb 24, 2019
  23. 25/26 bisect--helper: `bisect_skip` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  24. 15/26 bisect--helper: `bisect_autostart` shell function in CPranit Bauva via GitGitGadget, Feb 24, 2019
  25. 26/26 bisect--helper: retire `--check-and-set-terms` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  26. 14/26 bisect--helper: retire `--next-all` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019
  27. 13/26 bisect--helper: retire `--bisect-clean-state` subcommandPranit Bauva via GitGitGadget, Feb 24, 2019

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.