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

Subject: Re: [PATCH RFC3.5 02/12] send-email: No longer repeatedly test if $smtp_server is a command

From
Michael Witten <mfwitten@gmail.com>
Date
Apr 20, 2009, 04:53 UTC
Message-ID
<49ec020a.050cc00a.2a50.ffffd0e3@mx.google.com>
In-Reply-To
<7viql0lzuw.fsf@gitster.siamese.dyndns.org>
On Sun, Apr 19, 2009 at 23:21, Junio C Hamano <gitster@pobox.com> wrote:
Show 40 quoted lines
> Michael Witten <mfwitten@gmail.com> writes:
>
>> ...
>>> I think a genuine improvement would be something like:
>>>
>>> 	if (!defined $smtp_server) {
>>> 		$smtp_server = 'localhost';
>>> 	}
>>
>> You don't care to search for a possible sendmail?
>
> That's something you already did before setting smtp_server
> unconditionally to localhost, right?  You do (in the above):
>
> 	if (user gave $smtp_server) {
> 		use it, notice and note if it is a command;
> 	} else {
> 		if (standard binary avaiable) {
> 			use it, note it is a command;
> 		}
> 		# otherwise it still is undef
> 	}
> 	if (!defined $smtp_server) {
> 		set it to localhost;
> 	}
>
> But I would probably write it this way:
>
> 	if (user didn't give us $smtp_server) {
> 		if (standard binary avaiable) {
> 			use it, note it is a command;
> 		} else {
> 			use localhost;
> 		}
> 	}
> 	if ($smtp_server looks like a command) {
> 		$smtp_server_is_a_command = true;
> 	}
>
>

I suppose it's hard to tell from the patch, but it's actually a combination of those two:

	if (user gave $smtp_server) {
		use it, notice and note if it is a command;
	} else { # use a default:
		if (standard binary avaiable) {
			use it, note it is a command;
		} else {
			use localhost;
			# automatically noted as a command
			# without doing anything (this would
			# cause warnings if $smtp_is_a_command
			# is used in places other than the bool
			# context, because it will be undef);
			# thus, my choice is a bad choice in
			# the long run, but I'm sticking to it.
		}
	}
The actual code:
	if (defined $smtp_server) {
		$smtp_server_is_a_command = ($smtp_server =~ m{^/});
	} else { # use a default:
		foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
			if (-x $_) {
				$smtp_server = $_;
				$smtp_server_is_a_command = 1;
				last;
			}
		}
		$smtp_server = 'localhost' # 127.0.0.1 is not compatible with IPv6
			unless $smtp_server_is_a_command;
	}
(I'll remove the "127.0.0.1" comment).

There's a minimum of checking and assigning; it's beautiful. Plus, this organization fits in well with the server/port verification (if I recall).

P.S.
I also like:
	$smtp_server_is_a_command or ($smtp_server = 'localhost');
or, maybe:
	$smtp_server_is_a_command or $smtp_server = 'localhost;

However, I wasn't sure if that is acceptable to others; more importantly (:-D), I'm not sure that perl is smart enough to optimize away the unnecessary comparison of the values, so I figured that the modifier 'unless' is morally superior, because it probably has the advantage of fewer cycles than the 'or' form, and it has greater readability than the curly-braced conditional. I absolutely loathe curly braces around a body of one line:

	if ($you_loath_this) {
		print "Clap Your Hands!\n";
	}

If only the curly-braces weren't there. I don't know why, they just bug me terribly.

Previous: Junio C Hamano
Message 50 of 50 in “Introduction to Decreasing send-email Entropy”
  1. 00/12 Introduction to Decreasing send-email EntropyMichael Witten, Apr 18, 2009
  2. 01/12 send-email: Cleanup the usage text and docs a bitMichael Witten, Apr 18, 2009
  3. 02/12 send-email: No longer repeatedly test if $smtp_server is a commandMichael Witten, Apr 18, 2009
  4. 03/12 send-email: Interpret --smtp-server "" as "use a default".Michael Witten, Apr 18, 2009
  5. 04/12 send-email: Verification for --smtp-server and --smpt-server-portMichael Witten, Apr 18, 2009
  6. 05/12 send-email: Improve redability and error-handling in send_message's sendmail codeMichael Witten, Apr 18, 2009
  7. 06/12 send-email: Cleanup and streamline the SMTP code in send_messageMichael Witten, Apr 18, 2009
  8. 07/12 send-email: Cleanup send_message 'log' codeMichael Witten, Apr 18, 2009
  9. 08/12 send-email: Move Subject sanitization from --compose code to send_messageMichael Witten, Apr 18, 2009
  10. 09/12 Docs: send-email: Reorganize the CONFIGURATION sectionMichael Witten, Apr 18, 2009
  11. 10/12 Docs: Embolden the CONFIGURATION referencesMichael Witten, Apr 18, 2009
  12. 11/12 Docs: send-email: Clarification of sendemail.<identity>Michael Witten, Apr 18, 2009
  13. 12/12 Docs: send-email: git send-email -> 'send-email'Michael Witten, Apr 18, 2009
  14. Jay SoffianApr 19, 2009
  15. Michael WittenApr 19, 2009
  16. Jay SoffianApr 19, 2009
  17. Michael WittenApr 19, 2009
  18. Michael WittenApr 19, 2009
  19. 08/12 send-email: Simplify --compose subject sanitationMichael Witten, Apr 19, 2009
  20. Jeff KingApr 21, 2009
  21. Michael WittenApr 21, 2009
  22. Junio C HamanoApr 20, 2009
  23. Michael WittenApr 20, 2009
  24. Junio C HamanoApr 20, 2009
  25. Jay SoffianApr 19, 2009
  26. Michael WittenApr 19, 2009
  27. Thomas AdamApr 19, 2009
  28. Michael WittenApr 19, 2009
  29. Junio C HamanoApr 19, 2009
  30. 05/12 send-email: Improve readability and error-handling in send_message's sendmail codeMichael Witten, Apr 19, 2009
  31. Jay SoffianApr 19, 2009
  32. Junio C HamanoApr 20, 2009
  33. Junio C HamanoApr 20, 2009
  34. Jeff KingApr 21, 2009
  35. Jeff KingApr 21, 2009
  36. 04/12 send-email: Verification for --smtp-server and --smpt-server-portMichael Witten, Apr 19, 2009
  37. Michael WittenApr 20, 2009
  38. Junio C HamanoApr 20, 2009
  39. Junio C HamanoApr 20, 2009
  40. Michael WittenApr 20, 2009
  41. Michael WittenApr 20, 2009
  42. Wesley J. LandakerApr 18, 2009
  43. Michael WittenApr 19, 2009
  44. 03/12 send-email: Interpret --smtp-server "" as "use a default".Michael Witten, Apr 19, 2009
  45. Junio C HamanoApr 20, 2009
  46. Michael WittenApr 20, 2009
  47. Junio C HamanoApr 20, 2009
  48. Michael WittenApr 20, 2009
  49. Junio C HamanoApr 20, 2009
  50. Subject: Re: [PATCH RFC3.5 02/12] send-email: No longer repeatedly test if $smtp_server is a commandMichael Witten, Apr 20, 2009

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.