From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 2F2BC1FBC9 for ; Mon, 1 Jun 2020 10:06:58 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 04/13] import: modernize to use Perl 5.10 features Date: Mon, 1 Jun 2020 10:06:48 +0000 Message-Id: <20200601100657.14700-5-e@yhbt.net> In-Reply-To: <20200601100657.14700-1-e@yhbt.net> References: <20200601100657.14700-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: First, prefer the leaner "parent" module over the heavy "base" module to establish ISA relationships, since "base" is only needed for "fields". The "//" and "//=" operators allow us simplify our code and fix minor bugs where a value of "0" was disallowed. Yes, we'll allow "0" as an email address, too, since some twisted BOFH could theoretically use it as a local user name. Going forward, we'll also be avoiding "use warnings" and instead rely on `-w' in the shebang. --- lib/PublicInbox/Import.pm | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index a901350402c..1a7ed9ce878 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -7,8 +7,8 @@ # requires read-only access. package PublicInbox::Import; use strict; -use warnings; -use base qw(PublicInbox::Lock); +use parent qw(PublicInbox::Lock); +use v5.10.1; use PublicInbox::Spawn qw(spawn popen_rd); use PublicInbox::MID qw(mids mid2path); use PublicInbox::Address; @@ -24,10 +24,10 @@ sub new { my ($class, $git, $name, $email, $ibx) = @_; my $ref = 'refs/heads/master'; if ($ibx) { - $ref = $ibx->{ref_head} || 'refs/heads/master'; - $name ||= $ibx->{name}; - $email ||= $ibx->{-primary_address}; - $git ||= $ibx->git; + $ref = $ibx->{ref_head} // 'refs/heads/master'; + $name //= $ibx->{name}; + $email //= $ibx->{-primary_address}; + $git //= $ibx->git; } bless { git => $git, @@ -252,7 +252,7 @@ sub remove { } my $ident = $self->{ident}; my $now = now_raw(); - $msg ||= 'rm'; + $msg //= 'rm'; my $len = length($msg) + 1; print $w "commit $ref\nmark :$commit\n", "author $ident $now\n", @@ -277,21 +277,17 @@ sub git_timestamp { sub extract_cmt_info ($;$) { my ($mime, $smsg) = @_; + # $mime is PublicInbox::Eml, but remains Email::MIME-compatible my $sender = ''; - my $from = $mime->header('From'); - $from ||= ''; + my $hdr = $mime->header_obj; + my $from = $hdr->header('From') // ''; my ($email) = PublicInbox::Address::emails($from); my ($name) = PublicInbox::Address::names($from); if (!defined($name) || !defined($email)) { - $sender = $mime->header('Sender'); - $sender ||= ''; - if (!defined($name)) { - ($name) = PublicInbox::Address::names($sender); - } - if (!defined($email)) { - ($email) = PublicInbox::Address::emails($sender); - } + $sender = $hdr->header('Sender') // ''; + $name //= (PublicInbox::Address::names($sender))[0]; + $email //= (PublicInbox::Address::emails($sender))[0]; } if (defined $email) { # Email::Address::XS may leave quoted '<' in addresses, @@ -317,11 +313,8 @@ sub extract_cmt_info ($;$) { warn "no name in From: $from or Sender: $sender\n"; } - my $hdr = $mime->header_obj; - - my $subject = $hdr->header('Subject'); - $subject = '(no subject)' unless defined $subject; - # Mime decoding can create nulls replace them with spaces to protect git + my $subject = $hdr->header('Subject') // '(no subject)'; + # MIME decoding can create nulls replace them with spaces to protect git $subject =~ tr/\0/ /; utf8::encode($subject); my $at = git_timestamp(my @at = msg_datestamp($hdr));