This simplifies test_lei users in t/*.t
use File::Spec;
our @EXPORT;
my $lei_loud = $ENV{TEST_LEI_ERR_LOUD};
use File::Spec;
our @EXPORT;
my $lei_loud = $ENV{TEST_LEI_ERR_LOUD};
+our ($lei_opt, $lei_out, $lei_err, $lei_cwdfh);
BEGIN {
@EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
run_script start_script key2sub xsys xsys_e xqx eml_load tick
BEGIN {
@EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
run_script start_script key2sub xsys xsys_e xqx eml_load tick
local %SIG = %SIG;
local $0 = join(' ', @$cmd);
my $orig_io = _prepare_redirects($fhref);
local %SIG = %SIG;
local $0 = join(' ', @$cmd);
my $orig_io = _prepare_redirects($fhref);
+ my $cwdfh = $lei_cwdfh;
if (my $d = $opt->{'-C'}) {
if (my $d = $opt->{'-C'}) {
- opendir $cwdfh, '.' or die "opendir .: $!";
+ unless ($cwdfh) {
+ opendir $cwdfh, '.' or die "opendir .: $!";
+ }
chdir $d or die "chdir $d: $!";
}
_run_sub($sub, $key, \@argv);
eval { PublicInbox::Inbox::cleanup_task() };
chdir $d or die "chdir $d: $!";
}
_run_sub($sub, $key, \@argv);
eval { PublicInbox::Inbox::cleanup_task() };
- die "chdir(restore): $!" if $cwdfh && !chdir($cwdfh);
+ die "fchdir(restore): $!" if $cwdfh && !chdir($cwdfh);
_undo_redirects($orig_io);
select STDOUT;
}
_undo_redirects($orig_io);
select STDOUT;
}
PublicInbox::Spawn::which($ENV{XAPIAN_COMPACT} || 'xapian-compact');
}
PublicInbox::Spawn::which($ENV{XAPIAN_COMPACT} || 'xapian-compact');
}
-our ($lei_opt, $lei_out, $lei_err);
# favor lei() or lei_ok() over $lei for new code
sub lei (@) {
my ($cmd, $env, $xopt) = @_;
# favor lei() or lei_ok() over $lei for new code
sub lei (@) {
my ($cmd, $env, $xopt) = @_;
SKIP: {
my ($cb) = pop @_;
my $test_opt = shift // {};
SKIP: {
my ($cb) = pop @_;
my $test_opt = shift // {};
+ local $lei_cwdfh;
+ opendir $lei_cwdfh, '.' or xbail "opendir .: $!";
require_git(2.6, 1) or skip('git 2.6+ required for lei test', 2);
require_mods(qw(json DBD::SQLite Search::Xapian), 2);
require PublicInbox::Config;
require_git(2.6, 1) or skip('git 2.6+ required for lei test', 2);
require_mods(qw(json DBD::SQLite Search::Xapian), 2);
require PublicInbox::Config;
use strict; use v5.10.1; use PublicInbox::TestCommon;
use Fcntl qw(SEEK_SET);
use PublicInbox::Spawn qw(which);
use strict; use v5.10.1; use PublicInbox::TestCommon;
use Fcntl qw(SEEK_SET);
use PublicInbox::Spawn qw(which);
-use PublicInbox::OnDestroy;
require_git 2.6;
require_mods(qw(json DBD::SQLite Search::Xapian));
use POSIX qw(WTERMSIG WIFSIGNALED SIGPIPE);
require_git 2.6;
require_mods(qw(json DBD::SQLite Search::Xapian));
use POSIX qw(WTERMSIG WIFSIGNALED SIGPIPE);
{
skip 'TEST_LEI_DAEMON_PERSIST_DIR in use', 1 if
$ENV{TEST_LEI_DAEMON_PERSIST_DIR};
{
skip 'TEST_LEI_DAEMON_PERSIST_DIR in use', 1 if
$ENV{TEST_LEI_DAEMON_PERSIST_DIR};
- opendir my $dh, '.' or BAIL_OUT "opendir(.) $!";
- my $od = PublicInbox::OnDestroy->new($$, sub {
- chdir $dh or BAIL_OUT "chdir: $!"
- });
my @q = qw(q -o mboxcl2:rel.mboxcl2 bye);
lei_ok('-C', $home, @q);
is(unlink("$home/rel.mboxcl2"), 1, '-C works before q');
my @q = qw(q -o mboxcl2:rel.mboxcl2 bye);
lei_ok('-C', $home, @q);
is(unlink("$home/rel.mboxcl2"), 1, '-C works before q');
# ensure "lei up" works, since it compliments "lei q --save"
$in = $doc2->as_string;
lei_ok [qw(import -q -F eml -)], undef, { 0 => \$in, %$lei_opt };
# ensure "lei up" works, since it compliments "lei q --save"
$in = $doc2->as_string;
lei_ok [qw(import -q -F eml -)], undef, { 0 => \$in, %$lei_opt };
- opendir my $dh, '.' or xbail "opendir .: $!";
lei_ok qw(up -q md -C), $home;
lei_ok qw(up -q . -C), "$home/md";
lei_ok qw(up -q), "/$home/md";
lei_ok qw(up -q md -C), $home;
lei_ok qw(up -q . -C), "$home/md";
lei_ok qw(up -q), "/$home/md";
- chdir($dh) or xbail "fchdir . $!";
my %after = map { $_ => 1 } glob("$home/md/cur/*");
is(delete $after{(keys(%before))[0]}, 1, 'original message kept');
is(scalar(keys %after), 1, 'one new message added');
my %after = map { $_ => 1 } glob("$home/md/cur/*");
is(delete $after{(keys(%before))[0]}, 1, 'original message kept');
is(scalar(keys %after), 1, 'one new message added');
print $mb $pre_existing;
close $mb or xbail "close: $!";
lei_ok(qw(q --save -o mboxrd:mbrd m:qp@example.com -C), $home);
print $mb $pre_existing;
close $mb or xbail "close: $!";
lei_ok(qw(q --save -o mboxrd:mbrd m:qp@example.com -C), $home);
- chdir($dh) or xbail "fchdir . $!";
open $mb, '<', "$home/mbrd" or xbail "open $!";
is_deeply([grep(/pre-existing/, <$mb>)], [],
'pre-existing messsage gone w/o augment');
open $mb, '<', "$home/mbrd" or xbail "open $!";
is_deeply([grep(/pre-existing/, <$mb>)], [],
'pre-existing messsage gone w/o augment');
print $mb $pre_existing;
close $mb or xbail "close: $!";
lei_ok(qw(q -a --save -o mboxrd:mbrd-aug m:qp@example.com -C), $home);
print $mb $pre_existing;
close $mb or xbail "close: $!";
lei_ok(qw(q -a --save -o mboxrd:mbrd-aug m:qp@example.com -C), $home);
- chdir($dh) or xbail "fchdir . $!";
open $mb, '<', "$home/mbrd-aug" or xbail "open $!";
$mb = do { local $/; <$mb> };
like($mb, qr/pre-existing/, 'pre-existing message preserved w/ -a');
open $mb, '<', "$home/mbrd-aug" or xbail "open $!";
$mb = do { local $/; <$mb> };
like($mb, qr/pre-existing/, 'pre-existing message preserved w/ -a');
'non-existent blob fails');
SKIP: {
skip '/.git exists', 1 if -e '/.git';
'non-existent blob fails');
SKIP: {
skip '/.git exists', 1 if -e '/.git';
- require PublicInbox::OnDestroy;
- opendir my $dh, '.' or xbail "opendir: $!";
- my $end = PublicInbox::OnDestroy->new($$, sub {
- chdir $dh or xbail "chdir: $!";
- });
lei_ok(qw(-C / blob 69df7d5 -I), $ibx->{inboxdir},
"--git-dir=$git_dir");
is($lei_out, $prev, '--git-dir works');
lei_ok(qw(-C / blob 69df7d5 -I), $ibx->{inboxdir},
"--git-dir=$git_dir");
is($lei_out, $prev, '--git-dir works');