X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FImport.pm;h=8c9d1cbad526a7d1e5dd3813f390685a0cd3713b;hb=7174681c0165008ac16ed1d323f6d95b6d0570a3;hp=65da4ddf466ad4a7309655e6436a4abb58abf742;hpb=6dd8be30a9aeefa550b05a4f298934fd37a25c2c;p=public-inbox.git diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index 65da4ddf..8c9d1cba 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -54,6 +54,8 @@ sub gfi_start { $self->{lockfh} = $lockfh; $self->{pid} = $pid; $self->{nchg} = 0; + binmode $out_w, ':raw' or die "binmode :raw failed: $!"; + binmode $in_r, ':raw' or die "binmode :raw failed: $!"; ($in_r, $out_w); } @@ -88,7 +90,7 @@ sub _check_path ($$$$) { # ('MISMATCH', msg) on mismatch # (:MARK, msg) on success sub remove { - my ($self, $mime) = @_; # mime = Email::MIME + my ($self, $mime, $msg) = @_; # mime = Email::MIME my $mid = mid_mime($mime); my $path = mid2path($mid); @@ -136,10 +138,12 @@ sub remove { } my $ident = $self->{ident}; my $now = now2822(); + $msg ||= 'rm'; + my $len = length($msg) + 1; print $w "commit $ref\nmark :$commit\n", "author $ident $now\n", "committer $ident $now\n", - "data 3\nrm\n\n", + "data $len\n$msg\n\n", 'from ', ($parent ? $parent : $tip), "\n" or wfail; print $w "D $path\n\n" or wfail; $self->{nchg}++; @@ -187,13 +191,14 @@ sub add { print $w "reset $ref\n" or wfail; } + utf8::encode($email); + utf8::encode($name); + utf8::encode($subject); # quiet down wide character warnings: - binmode $w, ':utf8' or die "binmode :utf8 failed: $!"; print $w "commit $ref\nmark :$commit\n", "author $name <$email> $date\n", "committer $self->{ident} ", now2822(), "\n" or wfail; - binmode $w, ':raw' or die "binmode :raw failed: $!"; - print $w "data ", (bytes::length($subject) + 1), "\n", + print $w "data ", (length($subject) + 1), "\n", $subject, "\n\n" or wfail; if ($tip ne '') { print $w 'from ', ($parent ? $parent : $tip), "\n" or wfail;