From: "René Scharfe" <l.s.r@web.de>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>, Taylor Blau <me@ttaylorr.com>,
Jeff King <peff@peff.net>
Subject: Re: [PATCH 0/8] run-command: remove run_command_v_*()
Date: Fri, 28 Oct 2022 19:16:33 +0200 [thread overview]
Message-ID: <b200477c-f856-f107-b897-63721c805093@web.de> (raw)
In-Reply-To: <221028.8635b87wo6.gmgdl@evledraar.gmail.com>
Am 28.10.22 um 18:11 schrieb Ævar Arnfjörð Bjarmason:
>
> On Fri, Oct 28 2022, René Scharfe wrote:
>
>> Am 27.10.22 um 23:46 schrieb Ævar Arnfjörð Bjarmason:
>>>
>>> - I wish C had a nicer syntax for not just declaring but squashing
>>> together compile_time bracketed lists (think set operations). But the
>>> below "CHILD_PROCESS_INIT_LIST" is a pretty good poor man's version.
>>>
>>> I see gcc/clang nicely give us safety rails for that with
>>> "-Woverride-init", for this sort of "opts struct with internal stuff,
>>> but also user options" I think it works out very nicely.
>>>
>>
>> That's a nice and simple macro. I played with a gross variant à la
>>
>> #define CHILD_PROCESS_INIT_EX(...) { .args = STRVEC_INIT, __VA_ARGS__ }
>>
>> which would allow e.g.
>>
>> struct child_process cmd = CHILD_PROCESS_INIT_EX(.git_cmd = 1);
>>
>> Yours is better,
>
> I actually think yours is better, anyway...
>
>> but they share the downside of not actually saving any lines of code..
>
> To me it's not about saving code, but that it's immediately obvious when
> reading the code that this set of options can be determined and set at
> function or scope entry.
>
> We tend to otherwise have creep where the decl and option init drifts
> apart over time, and with complex init's you might stare at it for 30s,
> before realizing that between the decl and fully init ing it often 50
> lines later nothing actually changed vis-a-vis the state, we could have
> just done it earlier.
Hmm, we could do that by collecting the flag setting parts at the top,
without the need for a new macro. Or at the bottom, before the
run_command() call.
> I think that's worth it in general, whether it's worth the churn in this
> case...
>
>>> - We have quite a few callers that want "on error, die", so maybe we
>>> should have something like that "on_error" sooner than later.
>>
>> We could add a die_on_error bit for that, or start_command_or_die() and
>> run_command_or_die() variants (there I go again, multiplying APIs..).
>> They could report the failed command, which a caller can't do because
>> the internal strvec is already cleared once it learns of the failure.
>
> *nod*
Wait a second: Does it even make sense to mention the command in a die()
message after start_command() failed? Unless .silent_exec_failure is
set, start_command() already reports it. E.g. archive-tar.c has:
if (start_command(&filter) < 0)
die_errno(_("unable to start '%s' filter"), cmd.buf);
... and the result looks like this upon failure:
$ git -c tar.tgz.command=nonsense archive --format=tgz HEAD
error: cannot run nonsense: No such file or directory
fatal: unable to start 'nonsense' filter: No such file or directory
The second message is mostly redundant, but it mentions that the failed
command was a filter. Probably .silent_exec_failure should be set here,
then the die() message is no longer redundant. This requires args[0] to
be stored outside of struct child_process, though, which is already done
here, but may be a bit tedious in other cases.
So for start_command(), would it be a generally useful to support a
scenario where upon failure
- the program terminates,
- but before that prints a single message,
- which includes the command that could not be started
- and some kind of hint why we tried to start it?
For run_command() we'd need to distinguish between not being able to
run the command and getting an error code from it after a successful
start.
René
next prev parent reply other threads:[~2022-10-28 17:17 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 16:30 [PATCH 0/8] run-command: remove run_command_v_*() René Scharfe
2022-10-27 16:35 ` [PATCH 1/8] merge: remove always-the-same "verbose" arguments René Scharfe
2022-10-29 18:12 ` Taylor Blau
2022-10-27 16:35 ` [PATCH 2/8] bisect--helper: factor out do_bisect_run() René Scharfe
2022-10-27 22:26 ` Ævar Arnfjörð Bjarmason
2022-10-29 18:16 ` Taylor Blau
2022-10-27 16:36 ` [PATCH 3/8] use child_process members "args" and "env" directly René Scharfe
2022-10-27 18:28 ` Junio C Hamano
2022-10-27 22:37 ` Ævar Arnfjörð Bjarmason
2022-10-27 16:37 ` [PATCH 4/8] use child_process member "args" instead of string array variable René Scharfe
2022-10-27 21:09 ` Ævar Arnfjörð Bjarmason
2022-10-28 14:23 ` René Scharfe
2022-10-29 18:30 ` Taylor Blau
2022-10-29 18:26 ` Taylor Blau
2022-10-27 16:38 ` [PATCH 5/8] replace and remove run_command_v_opt_cd_env() René Scharfe
2022-10-27 20:16 ` Ævar Arnfjörð Bjarmason
2022-10-29 19:26 ` Taylor Blau
2022-10-27 16:39 ` [PATCH 6/8] replace and remove run_command_v_opt_tr2() René Scharfe
2022-10-27 16:40 ` [PATCH 7/8] replace and remove run_command_v_opt_cd_env_tr2() René Scharfe
2022-10-27 22:46 ` Ævar Arnfjörð Bjarmason
2022-10-28 14:23 ` René Scharfe
2022-10-27 16:41 ` [PATCH 8/8] replace and remove run_command_v_opt() René Scharfe
2022-10-27 22:41 ` Ævar Arnfjörð Bjarmason
2022-10-28 14:23 ` René Scharfe
2022-10-27 20:11 ` [PATCH 0/8] run-command: remove run_command_v_*() Jeff King
2022-10-28 14:23 ` René Scharfe
2022-10-27 21:46 ` Ævar Arnfjörð Bjarmason
2022-10-28 16:04 ` René Scharfe
2022-10-28 16:11 ` Ævar Arnfjörð Bjarmason
2022-10-28 17:16 ` René Scharfe [this message]
2022-10-29 2:17 ` Ævar Arnfjörð Bjarmason
2022-10-29 10:05 ` René Scharfe
2022-10-29 19:32 ` Taylor Blau
2022-10-30 11:40 ` [PATCH v2 0/12] " René Scharfe
2022-10-30 11:42 ` [PATCH v2 01/12] merge: remove always-the-same "verbose" arguments René Scharfe
2022-10-30 11:45 ` [PATCH v2 02/12] run-command: fix return value comment René Scharfe
2022-10-30 11:46 ` [PATCH v2 03/12] am: simplify building "show" argument list René Scharfe
2022-10-30 11:47 ` [PATCH v2 04/12] bisect: simplify building "checkout" " René Scharfe
2022-10-30 11:48 ` [PATCH v2 05/12] bisect--helper: factor out do_bisect_run() René Scharfe
2022-10-30 11:49 ` [PATCH v2 06/12] sequencer: simplify building argument list in do_exec() René Scharfe
2022-10-30 11:50 ` [PATCH v2 07/12] use child_process member "args" instead of string array variable René Scharfe
2022-10-30 11:51 ` [PATCH v2 08/12] use child_process members "args" and "env" directly René Scharfe
2022-10-30 11:51 ` [PATCH v2 09/12] replace and remove run_command_v_opt_cd_env() René Scharfe
2022-10-30 11:52 ` [PATCH v2 10/12] replace and remove run_command_v_opt_tr2() René Scharfe
2022-10-30 11:53 ` [PATCH v2 11/12] replace and remove run_command_v_opt_cd_env_tr2() René Scharfe
2022-10-30 11:55 ` [PATCH v2 12/12] replace and remove run_command_v_opt() René Scharfe
2022-10-30 11:58 ` [PATCH v2 0/12] run-command: remove run_command_v_*() René Scharfe
2022-10-30 18:05 ` Taylor Blau
2022-10-31 13:35 ` Ævar Arnfjörð Bjarmason
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b200477c-f856-f107-b897-63721c805093@web.de \
--to=l.s.r@web.de \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).