about summary refs log tree commit homepage
path: root/lib/PublicInbox/SolverGit.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-01-04 03:34:15 +0000
committerEric Wong <e@80x24.org>2020-01-04 03:34:36 +0000
commit0563ed29d37ae46733e3001f390bb9a1c5b04d6b (patch)
treebc376d7ed74239d020c05bf437cab83091941aa9 /lib/PublicInbox/SolverGit.pm
parentd13ab9e514cbae66e911f9c88e09d3213c34a952 (diff)
downloadpublic-inbox-0563ed29d37ae46733e3001f390bb9a1c5b04d6b.tar.gz
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.
Diffstat (limited to 'lib/PublicInbox/SolverGit.pm')
-rw-r--r--lib/PublicInbox/SolverGit.pm18
1 files 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;
 }