From: Junio C Hamano <gitster@pobox.com>
To: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Patrick Steinhardt <ps@pks.im>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH v2 10/11] bisect: check get_terms return at all call sites
Date: Wed, 05 Aug 2026 13:26:14 -0700 [thread overview]
Message-ID: <xmqqecgcpb4p.fsf@gitster.g> (raw)
In-Reply-To: <9a9103096a2bd877f84502cffefd019d0a6e229d.1785954661.git.gitgitgadget@gmail.com> (Johannes Schindelin via GitGitGadget's message of "Wed, 05 Aug 2026 18:30:59 +0000")
"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:
> There is one slight complication here: One caller _needs_ the return
> value to indicate an error when the `BISECT_TERMS` file is absent, all
> the other call sites are totally okay with a "missing" `BISECT_TERMS`
> file. To address that, extend the function signature of `get_terms()` to
> indicate which behavior the caller wants.
> -static int get_terms(struct bisect_terms *terms)
> +static int get_terms(struct bisect_terms *terms, int file_missing_is_ok)
> {
> struct strbuf str = STRBUF_INIT;
> FILE *fp = NULL;
> @@ -493,7 +493,7 @@ static int get_terms(struct bisect_terms *terms)
>
> fp = fopen(git_path_bisect_terms(), "r");
> if (!fp) {
> - res = -1;
> + res = file_missing_is_ok ? 0 : -1;
> goto finish;
> }
Hmph. So, depending on the caller, a missing file error may have to
be treated as OK or as an error, while all other kinds of anomalies
are treated by all callers as errors.
As all the existing callsites of this function need to be adjusted
for this change anyway, I would have thought a more typical way to
handle a situation like this would be to define different error
codes for this function and have the callers deal with them. But it
seems that almost all callers, except for one, pass "missing is OK."
So, instead of adjusting the majority of callers with something like:
- if (get_terms(...))
+ if (get_terms(...) == BISECT_TERMS_ERROR)
oops we got an error
and keeping only the single oddball caller to barf on any non-zero
return,
- if (get_terms(...))
+ switch (get_terms(...)) {
+ case BISECT_TERMS_ERROR:
oops we got an error
+ break;
+ case BISECT_TERMS_MISSING_FILE:
+ deal with the missing file error
+ break;
+ default:
+ break; /* ok */
+ }
it may be simpler to change:
- if (get_terms(...))
+ if (get_terms(..., 1))
oops we got an error
for the majority of them. The one oddball caller then becomes:
- if (get_terms(...))
+ if (get_terms(..., 0))
oops we got an error
to treat a missing file as an error as well.
I guess I can buy that.
If get_terms() were a public function that had many more callers,
my preference would probably be very different. But this is local
to a single file, so the meaning of the mysterious 0/1 parameter
will quickly become evident to those who have to work with this
part of the system anyway.
Thanks.
next prev parent reply other threads:[~2026-08-05 20:26 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-14 22:48 [PATCH 00/11] coverity: fix unchecked returns Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 01/11] http: die on curl_easy_duphandle failure in get_active_slot Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 02/11] config: propagate launch_editor() failure in show_editor() Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-07-14 22:48 ` [PATCH 03/11] reftable/block: check deflateInit() return value Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 04/11] reftable tests: check reftable_table_init_ref_iterator() return Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 05/11] last-modified: handle repo_parse_commit() failures Johannes Schindelin via GitGitGadget
2026-07-15 1:15 ` Junio C Hamano
2026-07-20 5:09 ` Junio C Hamano
2026-08-05 14:27 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 06/11] compat/pread: check initial lseek for errors Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 14:29 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 07/11] transport-helper: check dup() return in get_exporter Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-07-14 22:48 ` [PATCH 08/11] transport-helper: warn when export-marks file cannot be finalized Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 09/11] bisect: check strbuf_getline_lf return when reading terms Johannes Schindelin via GitGitGadget
2026-07-15 1:17 ` Junio C Hamano
2026-07-20 5:09 ` Junio C Hamano
2026-08-05 14:33 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 10/11] bisect: check get_terms return at all call sites Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 14:57 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 11/11] bisect: handle dup() failure when redirecting stdout Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 16:44 ` Johannes Schindelin
2026-08-05 18:30 ` [PATCH v2 00/11] coverity: fix unchecked returns Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 01/11] http: die on curl_easy_duphandle failure in get_active_slot Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 02/11] config: propagate launch_editor() failure in show_editor() Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 03/11] reftable/block: check deflateInit() return value Johannes Schindelin via GitGitGadget
2026-08-06 1:11 ` Junio C Hamano
2026-08-05 18:30 ` [PATCH v2 04/11] reftable tests: check reftable_table_init_ref_iterator() return Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 05/11] last-modified: handle repo_parse_commit() failures Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 06/11] compat/pread: check initial lseek for errors Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 07/11] transport-helper: check dup() return in get_exporter Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 08/11] transport-helper: warn when export-marks file cannot be finalized Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 09/11] bisect: check strbuf_getline_lf return when reading terms Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 10/11] bisect: check get_terms return at all call sites Johannes Schindelin via GitGitGadget
2026-08-05 20:26 ` Junio C Hamano [this message]
2026-08-05 18:31 ` [PATCH v2 11/11] bisect: handle dup() failure when redirecting stdout Johannes Schindelin via GitGitGadget
2026-08-06 15:41 ` Jeff King
2026-08-06 17:31 ` Junio C Hamano
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=xmqqecgcpb4p.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johannes.schindelin@gmx.de \
--cc=ps@pks.im \
/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.