use PublicInbox::Spawn qw(spawn);
use PublicInbox::MID qw(mid_mime mid2path);
use PublicInbox::Address;
-use PublicInbox::ContentId qw(content_id);
use PublicInbox::MsgTime qw(msg_timestamp);
sub new {
$n = read($r, my $lf, 1);
defined($n) or die "read final byte of cat-blob failed: $!";
die "bad read on final byte: <$lf>" if $lf ne "\n";
- my $cur = PublicInbox::MIME->new($buf);
+ my $cur = PublicInbox::MIME->new(\$buf);
my $cur_s = $cur->header('Subject');
$cur_s = '' unless defined $cur_s;
my $cur_m = $mime->header('Subject');
# ('MISMATCH', Email::MIME) on mismatch
# (:MARK, Email::MIME) on success
#
-# For v2 inboxes, the content_id is returned instead of the msg
# v2 callers should check with Xapian before calling this as
# it is not idempotent.
sub remove {
($err, $cur) = check_remove_v1($r, $w, $tip, $path, $mime);
return ($err, $cur) if $err;
} else {
- $cur = content_id($mime);
- my $len = length($cur);
+ my $sref;
+ if (ref($mime) eq 'SCALAR') { # optimization used by V2Writable
+ $sref = $mime;
+ } else { # XXX should not be necessary:
+ my $str = $mime->as_string;
+ $sref = \$str;
+ }
+ my $len = length($$sref);
$blob = $self->{mark}++;
- print $w "blob\nmark :$blob\ndata $len\n$cur\n" or wfail;
+ print $w "blob\nmark :$blob\ndata $len\n",
+ $$sref, "\n" or wfail;
}
my $ref = $self->{ref};
if (defined $path) {
print $w "D $path\n\n" or wfail;
} else {
- print $w "M 100644 :$blob d\n\n" or wfail;
+ print $w "M 100644 :$blob _/D\n\n" or wfail;
}
$self->{nchg}++;
(($self->{tip} = ":$commit"), $cur);