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 {
# ('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};
warn "broken smsg for $mid\n";
return 1; # continue
}
+ my $orig = $$msg;
my $cur = PublicInbox::MIME->new($msg);
if (content_id($cur) eq $cid) {
$mm->num_delete($smsg->num);
# no bugs in our deduplication code:
$removed = $smsg;
$removed->{mime} = $cur;
- $im->remove($cur, $cmt_msg);
+ $im->remove(\$orig, $cmt_msg);
+ $orig = undef;
$removed->num; # memoize this for callers
my $oid = $smsg->{blob};
{
local $ENV{NPROC} = 2;
my @before = $git0->qx(qw(log --pretty=oneline));
+ my $before = $git0->qx(qw(log --pretty=raw --raw -r --no-abbrev));
$im = PublicInbox::V2Writable->new($ibx, 1);
is($im->{partitions}, 1, 'detected single partition from previous');
my $smsg = $im->remove($mime, 'test removal');
my @found = ();
$srch->each_smsg_by_mid($smsg->mid, sub { push @found, @_; 1 });
is(scalar(@found), 0, 'no longer found in Xapian skeleton');
+
+ my $after = $git0->qx(qw(log -1 --pretty=raw --raw -r --no-abbrev));
+ if ($after =~ m!( [a-f0-9]+ )A\td$!) {
+ my $oid = $1;
+ ok(index($before, $oid) > 0, 'no new blob introduced');
+ } else {
+ fail('failed to extract blob from log output');
+ }
}
done_testing();