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

[PATCH 04/26] bisect.c: libify `exit_if_skipped_commits` to `error_if_skipped...`

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

Since we want to get rid of git-bisect.sh it would be necessary to convert those exit() calls to return statements so that errors can be reported.

Emulate try catch in C by converting `exit(<positive-value>)` to `return <negetive-value>`. Follow POSIX conventions to return <negative-value> to indicate error. Modify `cmd_bisect_helper()` to handle these negative returns.

Turn `exit()` to `return` calls in `exit_if_skipped_commits()` and rename the method to `error_if_skipped_commits()`.

Handle this return in dependant method `bisect_next_all()`.
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>
---
 bisect.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/bisect.c b/bisect.c
index 487675c672..bb926f09d0 100644
--- a/bisect.c
+++ b/bisect.c
@@ -659,11 +659,11 @@ static void bisect_common(struct rev_info *revs)
 		mark_edges_uninteresting(revs, NULL);
 }
 
-static void exit_if_skipped_commits(struct commit_list *tried,
+static int error_if_skipped_commits(struct commit_list *tried,
 				    const struct object_id *bad)
 {
 	if (!tried)
-		return;
+		return 0;
 
 	printf("There are only 'skip'ped commits left to test.\n"
 	       "The first %s commit could be any of:\n", term_bad);
@@ -674,7 +674,13 @@ static void exit_if_skipped_commits(struct commit_list *tried,
 	if (bad)
 		printf("%s\n", oid_to_hex(bad));
 	printf(_("We cannot bisect more!\n"));
-	exit(2);
+
+	/*
+	 * We don't want to clean the bisection state
+	 * as we need to get back to where we started
+	 * by using `git bisect reset`.
+	 */
+	return -2;
 }
 
 static int is_expected_rev(const struct object_id *oid)
@@ -949,7 +955,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
 {
 	struct rev_info revs;
 	struct commit_list *tried;
-	int reaches = 0, all = 0, nr, steps;
+	int reaches = 0, all = 0, nr, steps, res;
 	struct object_id *bisect_rev;
 	char *steps_msg;
 
@@ -972,8 +978,9 @@ int bisect_next_all(const char *prefix, int no_checkout)
 		 * We should exit here only if the "bad"
 		 * commit is also a "skip" commit.
 		 */
-		exit_if_skipped_commits(tried, NULL);
-
+		res = error_if_skipped_commits(tried, NULL);
+		if (res)
+			exit(-res);
 		printf(_("%s was both %s and %s\n"),
 		       oid_to_hex(current_bad_oid),
 		       term_good,
@@ -990,7 +997,9 @@ int bisect_next_all(const char *prefix, int no_checkout)
 	bisect_rev = &revs.commits->item->object.oid;
 
 	if (oideq(bisect_rev, current_bad_oid)) {
-		exit_if_skipped_commits(tried, current_bad_oid);
+		res = error_if_skipped_commits(tried, current_bad_oid);
+		if (res)
+			exit(-res);
 		printf("%s is the first %s commit\n", oid_to_hex(bisect_rev),
 			term_bad);
 		show_diff_tree(prefix, revs.commits->item);
-- 
gitgitgadget
Previous: Pranit Bauva via GitGitGadgetNext: Pranit Bauva via GitGitGadget
Message 5 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.