[ $mime->header_obj->header_raw('Message-Id') ],
'no new Message-Id added');
+ my $sane_mid = qr/\A<[\w\-]+\@localhost>\z/;
@warn = ();
$mime->header_set('Message-Id', '<a-mid@b>');
$mime->body_set('different');
like(join(' ', @warn), qr/reused/, 'warned about reused MID');
my @mids = $mime->header_obj->header_raw('Message-Id');
is($mids[1], '<a-mid@b>', 'original mid not changed');
- like($mids[0], qr/\A<\w+\@localhost>\z/, 'new MID added');
+ like($mids[0], $sane_mid, 'new MID added');
is(scalar(@mids), 2, 'only one new MID added');
@warn = ();
$mime->header_set('Message-Id', '<a-mid@b>');
$mime->body_set('this one needs a random mid');
- my $gen = content_digest($mime)->hexdigest . '@localhost';
+ my $gen = PublicInbox::Import::digest2mid(content_digest($mime));
+ unlike($gen, qr![\+/=]!, 'no URL-unfriendly chars in Message-Id');
my $fake = PublicInbox::MIME->new($mime->as_string);
$fake->header_set('Message-Id', $gen);
ok($im->add($fake), 'fake added easily');
like(join(' ', @warn), qr/using random/, 'warned about using random');
@mids = $mime->header_obj->header_raw('Message-Id');
is($mids[1], '<a-mid@b>', 'original mid not changed');
- like($mids[0], qr/\A<\w+\@localhost>\z/, 'new MID added');
+ like($mids[0], $sane_mid, 'new MID added');
is(scalar(@mids), 2, 'only one new MID added');
@warn = ();
$mime->header_set('Message-Id');
ok($im->add($mime), 'random MID made for MID free message');
@mids = $mime->header_obj->header_raw('Message-Id');
- like($mids[0], qr/\A<\w+\@localhost>\z/, 'mid was generated');
+ like($mids[0], $sane_mid, 'mid was generated');
is(scalar(@mids), 1, 'new generated');
}
{
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\t_/D$!) {
+ my $oid = $1;
+ ok(index($before, $oid) > 0, 'no new blob introduced');
+ } else {
+ fail('failed to extract blob from log output');
+ }
+ is($im->remove($mime, 'test removal'), undef,
+ 'remove is idempotent');
+ $im->done;
+ is($git0->qx(qw(log -1 --pretty=raw --raw -r --no-abbrev)),
+ $after, 'no git history made with idempotent remove');
+ eval { $im->done };
+ ok(!$@, '->done is idempotent');
}
done_testing();