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

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.
Previous: Oswald BuddenhagenNext: Oswald Buddenhagen
Message 5 of 18 in “send-email: prompt-dependent exit codes”
  1. send-email: prompt-dependent exit codesOswald Buddenhagen, Apr 26, 2023
  2. Junio C HamanoApr 27, 2023
  3. Felipe ContrerasMay 2, 2023
  4. send-email: prompt-dependent exit codesOswald Buddenhagen, Aug 7, 2023
  5. Junio C HamanoAug 7, 2023
  6. Oswald BuddenhagenAug 8, 2023
  7. Junio C HamanoAug 8, 2023
  8. Oswald BuddenhagenAug 8, 2023
  9. send-email: prompt-dependent exit codesOswald Buddenhagen, Aug 9, 2023
  10. Junio C HamanoAug 9, 2023
  11. Oswald BuddenhagenAug 10, 2023
  12. Junio C HamanoAug 10, 2023
  13. Oswald BuddenhagenAug 11, 2023
  14. send-email: prompt-dependent exit codesOswald Buddenhagen, Aug 21, 2023
  15. Junio C HamanoAug 21, 2023
  16. Oswald BuddenhagenAug 21, 2023
  17. Junio C HamanoAug 30, 2023
  18. Oswald BuddenhagenAug 30, 2023

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.