[PATCH] git-send-email.perl: add maildomain_sanitize()
- From
Jari Aalto <jari.aalto@cante.net>
- Date
- Apr 13, 2010, 11:35 UTC
- Message-ID
- <87bpdnwpoh.fsf_-_@jondo.cante.net>
- In-Reply-To
- <87ljcrwxni.fsf_-_@jondo.cante.net>
Move duplicate maildomain checks to a single subroutine. Require that a FQDN contains at least one period.
Signed-off-by: Jari Aalto <jari.aalto@cante.net> --- git-send-email.perl | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-)
Here is improved version 2 (use "tab" for indentation).
-- Jari
>Re: [PATCH 1/3] send-email: Don't use FQDNs without a '.'
>Junio C Hamano <gitster@pobox.com> writes:
>> Brian Gernhardt <brian@gernhardtsoftware.com> writes:
>
>> $maildomain = $domain
>> - unless $^O eq 'darwin' && $domain =~ /\.local$/;
>> + unless $^O eq 'darwin' && $domain =~ /\.local$/
>> + or $domain !~ /\./;
>
> [Junio] It would become *much* easier to read if we stop using the statement
> modifier, and write it in a more straightforward way:
>
> unless (($^O eq 'darwin' && $domain =~ /\.local$/)
> || $domain !~ /\./) {
> $maildomain = $domain;
> }
>
> as the condition seems to have grown large enough to exceed "by the way
> don't do this under this narrow condition", which is what statement
> modifiers are designed to be used. Also mixing && and or that have
> different precedence taxes readers' brainpower unnecessarily.
>
> I also think that this particular exception logic should probably be in a
> separate helper function that is called from the two places.
>
> Jari, you are the last person who touched code around this area. What do
> you think?diff --git a/git-send-email.perl b/git-send-email.perl index ce569a9..0e8f18c 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -863,14 +863,28 @@ sub sanitize_address # This maildomain*() code is based on ideas in Perl library Test::Reporter # /usr/share/perl5/Test/Reporter/Mail/Util.pm ==> sub _maildomain () +sub maildomain_sanitize +{ + local $_ = shift; + + # On Mac, the the domain name is not necessarily in FQDN format + # Require a period in the string + + if ( $^O eq 'darwin' and /\.local$/ ) { + # Nope, pass this one. + } + elsif ( /\./ ) { + $_; + } +} + sub maildomain_net { my $maildomain; if (eval { require Net::Domain; 1 }) { my $domain = Net::Domain::domainname(); - $maildomain = $domain - unless $^O eq 'darwin' && $domain =~ /\.local$/; + $maildomain = maildomain_sanitize($domain); } return $maildomain; @@ -887,8 +901,7 @@ sub maildomain_mta my $domain = $smtp->domain; $smtp->quit; - $maildomain = $domain - unless $^O eq 'darwin' && $domain =~ /\.local$/; + $maildomain = maildomain_sanitize($domain); last if $maildomain; }
-- 1.7.0