Re: [PATCH v3] send-email: prompt-dependent exit codes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 7, 2023, 18:55 UTC
- Message-ID
- <xmqqbkfifzry.fsf@gitster.g>
- In-Reply-To
- <20230807165850.2335067-1-oswald.buddenhagen@gmx.de>
Oswald Buddenhagen <oswald.buddenhagen@gmx.de> writes:
> From the perspective of a scripted caller, failure to send (some) mails > is an error even if it was interactively requested, so it should be > indicated by the exit code.
I am not sure if unconditional change of exit code this late in the game. When was the interactive "no, do not send this one" feature introduced? The end-users (not necessarily all of them, of course) have been happily using the command and have appreciated not having to see non-zero exit code after skipping some messages. I wonder if this should be hidden behind an opt-in command line option and possibly a configuration variable that defaults to "no".
> To make it somewhat specific, the exit code is 10 when only some mails > were skipped, and 11 if the user quit on the first prompt.
If 10 and 11 were *not* taken out of thin air, but there is a precedent to use these two values in e-mail related programs, please share. It may give us a good justification.
With or without other people's precedents, and with or without making it conditional, the new behaviour must be documented, if the command has already a documentation (and it seems that there exists the Documentation/git-send-email.txt file). It may be preferrable to protect the new feature with a test or two added to t9001 but it obviously depends on how hard you find testing interactive stuff is.
> For interactive calls from the command line, interactive cancellation is > arguably not really an error, but there the exit code will be more or > less ignored anyway.
Not necessarily. Some people prefer to see it and show it in their command line prompt.
Show 22 quoted lines
> diff --git a/git-send-email.perl b/git-send-email.perl
> index affbb88509..cd4db84b7f 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -256,6 +256,26 @@ sub system_or_die {
> die $msg if $msg;
> }
>
> +my $sent_files = 0;
> +
> +sub do_exit {
> + if ($sent_files == @files) {
> + # All specified messages were sent
> + exit(0);
> + } elsif ($sent_files) {
> + # At least some messages were sent
> + exit(10);
> + } else {
> + # User cancelled on first message already
> + exit(11);
> + }
> +}OK. As log as we won't start doing
while (loop) {
$file = shift @files;
send $file;
}this will keep working fine, and the logic is very clear to see.
Thanks. Will queue but expect at least some documentation updates.