#!perl -w
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict;
use v5.10.1;
my ($tmpdir, $for_destroy) = tmpdir();
local $ENV{TMPDIR} = $tmpdir;
open my $err, '>>', "$tmpdir/lei.err" or BAIL_OUT $!;
-my $lei = bless { 2 => $err }, 'PublicInbox::LEI';
+my $lei = bless { 2 => $err, cmd => 'test' }, 'PublicInbox::LEI';
my $commit = sub {
$_[0] = undef; # wcb
delete $lei->{1};
my ($mbox) = shuffle(@MBOX); # pick one, shouldn't matter
my $wcb_get = sub {
my ($fmt, $dst) = @_;
- delete $lei->{dedupe};
+ delete $lei->{dedupe}; # to be recreated
$lei->{ovv} = bless {
fmt => $fmt,
dst => $dst
like($raw, qr/^blah\n/sm, 'wrote content');
unlink $fn or BAIL_OUT $!;
- local $lei->{opt} = { jobs => 2 };
$wcb = $wcb_get->($mbox, $fn);
ok(-f $fn && !-s _, 'truncated mbox destination');
$wcb->(\($dup = $buf), $deadbeef);
$commit->($wcb);
open $fh, '<', $fn or BAIL_OUT $!;
- is(do { local $/; <$fh> }, $raw, 'jobs > 1');
+ is(do { local $/; <$fh> }, $raw, 'wrote identical content');
$raw;
};
ok($dc_cmd, "decompressor for .$zsfx");
my $f = "$fn.$zsfx";
my $wcb = $wcb_get->($mbox, $f);
- $wcb->(\(my $dup = $buf), $deadbeef);
+ $wcb->(\(my $dup = $buf), { %$deadbeef });
$commit->($wcb);
my $uncompressed = xqx([@$dc_cmd, $f]);
is($uncompressed, $orig, "$zsfx works unlocked");
- local $lei->{opt} = { jobs => 2 }; # for atomic writes
unlink $f or BAIL_OUT "unlink $!";
$wcb = $wcb_get->($mbox, $f);
- $wcb->(\($dup = $buf), $deadbeef);
+ $wcb->(\($dup = $buf), { %$deadbeef });
$commit->($wcb);
is(xqx([@$dc_cmd, $f]), $orig, "$zsfx matches with lock");
local $lei->{opt} = { augment => 1 };
$wcb = $wcb_get->($mbox, $f);
- $wcb->(\($dup = $buf . "\nx\n"), $deadbeef);
+ $wcb->(\($dup = $buf . "\nx\n"), { %$deadbeef });
$commit->($wcb);
my $cat = popen_rd([@$dc_cmd, $f]);
like($raw[1], qr/\nblah\n\nx\n\z/s, "augmented $zsfx");
like($raw[0], qr/\nblah\n\z/s, "original preserved $zsfx");
- local $lei->{opt} = { augment => 1, jobs => 2 };
+ local $lei->{opt} = { augment => 1 };
$wcb = $wcb_get->($mbox, $f);
- $wcb->(\($dup = $buf . "\ny\n"), $deadbeef);
+ $wcb->(\($dup = $buf . "\ny\n"), { %$deadbeef });
$commit->($wcb);
my @raw3;
my @f;
$mdr->maildir_each_file($md, sub { push @f, shift });
- open my $fh, $f[0] or BAIL_OUT $!;
+ open my $fh, '<', $f[0] or BAIL_OUT $!;
is(do { local $/; <$fh> }, $buf, 'wrote to Maildir');
$wcb = $wcb_get->('maildir', $md);
$mdr->maildir_each_file($md, sub { push @x, shift });
is(scalar(@x), 1, 'wrote one new file');
ok(!-f $f[0], 'old file clobbered');
- open $fh, $x[0] or BAIL_OUT $!;
+ open $fh, '<', $x[0] or BAIL_OUT $!;
is(do { local $/; <$fh> }, $buf."\nx\n", 'wrote new file to Maildir');
local $lei->{opt}->{augment} = 1;
is(scalar grep(/\A\Q$x[0]\E\z/, @f), 1, 'old file still there');
my @new = grep(!/\A\Q$x[0]\E\z/, @f);
is(scalar @new, 1, '1 new file written (b4dc0ffee skipped)');
- open $fh, $x[0] or BAIL_OUT $!;
+ open $fh, '<', $x[0] or BAIL_OUT $!;
is(do { local $/; <$fh> }, $buf."\nx\n", 'old file untouched');
- open $fh, $new[0] or BAIL_OUT $!;
+ open $fh, '<', $new[0] or BAIL_OUT $!;
is(do { local $/; <$fh> }, $buf."\ny\n", 'new file written');
}