All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miriam Rubio <mirucam@gmail.com>
To: git@vger.kernel.org
Cc: Pranit Bauva <pranit.bauva@gmail.com>,
	Christian Couder <chriscool@tuxfamily.org>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Tanushree Tumane <tanushreetumane@gmail.com>,
	Miriam Rubio <mirucam@gmail.com>
Subject: [PATCH v3 08/13] bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
Date: Sat,  8 Feb 2020 10:06:59 +0100	[thread overview]
Message-ID: <20200208090704.26506-9-mirucam@gmail.com> (raw)
In-Reply-To: <20200208090704.26506-1-mirucam@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 <negative-value>`. Follow POSIX conventions to return
<negative-value> to indicate error.

Update all callers to handle the error returns.

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>
Signed-off-by: Miriam Rubio <mirucam@gmail.com>
---
 bisect.c | 17 +++++++++++------
 bisect.h |  5 ++++-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/bisect.c b/bisect.c
index e4573c7ba1..85bda3500b 100644
--- a/bisect.c
+++ b/bisect.c
@@ -661,11 +661,11 @@ static void bisect_common(struct rev_info *revs)
 		mark_edges_uninteresting(revs, NULL, 0);
 }
 
-static void exit_if_skipped_commits(struct commit_list *tried,
+static enum bisect_error error_if_skipped_commits(struct commit_list *tried,
 				    const struct object_id *bad)
 {
 	if (!tried)
-		return;
+		return BISECT_OK;
 
 	printf("There are only 'skip'ped commits left to test.\n"
 	       "The first %s commit could be any of:\n", term_bad);
@@ -676,7 +676,8 @@ 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);
+
+	return BISECT_ONLY_SKIPPED_LEFT;
 }
 
 static int is_expected_rev(const struct object_id *oid)
@@ -950,6 +951,7 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix, int
 	struct rev_info revs;
 	struct commit_list *tried;
 	int reaches = 0, all = 0, nr, steps;
+	enum bisect_error res = BISECT_OK;
 	struct object_id *bisect_rev;
 	char *steps_msg;
 
@@ -972,8 +974,9 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix, int
 		 * 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 < 0)
+			exit(-res);
 		printf(_("%s was both %s and %s\n"),
 		       oid_to_hex(current_bad_oid),
 		       term_good,
@@ -990,7 +993,9 @@ enum bisect_error bisect_next_all(struct repository *r, const char *prefix, int
 	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(r, prefix, revs.commits->item);
diff --git a/bisect.h b/bisect.h
index c921ead02c..19d90e4870 100644
--- a/bisect.h
+++ b/bisect.h
@@ -37,10 +37,13 @@ struct rev_list_info {
  * commit has been found (and possibly checked out) and it
  * should be tested.
  * BISECT_FAILED error code: default error code.
+ * BISECT_ONLY_SKIPPED_LEFT error code: only skipped
+ * commits left to be tested.
  */
 enum bisect_error {
 	BISECT_OK = 0,
-	BISECT_FAILED = -1
+	BISECT_FAILED = -1,
+	BISECT_ONLY_SKIPPED_LEFT = -2
 };
 
 enum bisect_error bisect_next_all(struct repository *r,
-- 
2.25.0


  parent reply	other threads:[~2020-02-08  9:08 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-08  9:06 [Outreachy] [PATCH v3 00/13] Finish converting git bisect to C part 1 Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 01/13] bisect--helper: convert `vocab_*` char pointers to char arrays Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 02/13] bisect--helper: change `retval` to `res` Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 03/13] bisect: use the standard 'if (!var)' way to check for 0 Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 04/13] run-command: make `exists_in_PATH()` non-static Miriam Rubio
2020-02-08 10:55   ` René Scharfe
2020-02-09  9:59     ` Miriam R.
     [not found]       ` <CAN7CjDC46xTHBxvkbWvYfUt91Z6sdPP1tT3rJBoc4x6QCrv+2A@mail.gmail.com>
     [not found]         ` <47b51655-6373-0d5f-1397-8cbbb73d6661@web.de>
2020-02-10 16:05           ` Miriam R.
2020-02-09 23:16   ` Taylor Blau
2020-02-08  9:06 ` [PATCH v3 05/13] bisect--helper: introduce new `decide_next()` function Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 06/13] bisect: add enum to represent bisect returning codes Miriam Rubio
2020-02-08  9:06 ` [PATCH v3 07/13] bisect--helper: return error codes from `cmd_bisect__helper()` Miriam Rubio
2020-02-08  9:06 ` Miriam Rubio [this message]
2020-02-08  9:07 ` [PATCH v3 09/13] bisect: libify `bisect_checkout` Miriam Rubio
2020-02-08  9:07 ` [PATCH v3 10/13] bisect: libify `check_merge_bases` and its dependents Miriam Rubio
2020-02-08  9:07 ` [PATCH v3 11/13] bisect: libify `check_good_are_ancestors_of_bad` " Miriam Rubio
2020-02-08  9:07 ` [PATCH v3 12/13] bisect: libify `handle_bad_merge_base` " Miriam Rubio
2020-02-08  9:07 ` [PATCH v3 13/13] bisect: libify `bisect_next_all` Miriam Rubio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200208090704.26506-9-mirucam@gmail.com \
    --to=mirucam@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=pranit.bauva@gmail.com \
    --cc=tanushreetumane@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.