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-ASN: 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 26C781F4B9 for ; Sat, 4 Jan 2020 03:34:16 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 3/3] solver: minor cleanups to diff extraction Date: Sat, 4 Jan 2020 03:34:15 +0000 Message-Id: <20200104033415.17097-4-e@80x24.org> In-Reply-To: <20200104033415.17097-1-e@80x24.org> References: <20200104033415.17097-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Initialize the $di hashref at use to make it more obvious it's a local variable. We can also use the :utf8 IO layer via open+print to save ourselves the trouble of converting the UTF-8 patch to an octet stream. --- lib/PublicInbox/SolverGit.pm | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm index b12cd9d2..eab8459b 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -102,7 +102,6 @@ sub extract_diff ($$) { my $ct = $part->content_type || 'text/plain'; my ($s, undef) = msg_part_text($part, $ct); defined $s or return; - my $di = {}; # Email::MIME::Encodings forces QP to be CRLF upon decoding, # change it back to LF: @@ -159,12 +158,14 @@ sub extract_diff ($$) { (?:^(?:[\@\+\x20\-\\][^\r\n]*|)$LF)+ )!smx or return; - my $hdr_lines = $1; + my $di = { + hdr_lines => $1, + oid_a => $6, + oid_b => $7, + mode_a => $5 // $8 // $4, # new (file) // unchanged // old + }; my $path_a = $2 // $10; my $path_b = $3 // $11; - $di->{oid_a} = $6; - $di->{oid_b} = $7; - $di->{mode_a} = $5 // $8 // $4; # new (file) // unchanged // old my $patch = $9; # don't care for leading 'a/' and 'b/' @@ -179,19 +180,16 @@ sub extract_diff ($$) { $di->{path_a} = join('/', @a); $di->{path_b} = join('/', @b); - utf8::encode($hdr_lines); - utf8::encode($patch); my $path = ++$self->{tot}; $di->{n} = $path; - open(my $tmp, '>', $self->{tmp}->dirname . "/$path") or + open(my $tmp, '>:utf8', $self->{tmp}->dirname . "/$path") or die "open(tmp): $!"; - print $tmp $hdr_lines, $patch or die "print(tmp): $!"; + print $tmp $di->{hdr_lines}, $patch or die "print(tmp): $!"; close $tmp or die "close(tmp): $!"; # for debugging/diagnostics: $di->{ibx} = $ibx; $di->{smsg} = $smsg; - $di->{hdr_lines} = $hdr_lines; push @$diffs, $di; }