delete $self->{-commit_timer};
eidxq_process($self, $self->{-watch_sync});
eidxq_release($self);
- delete local $self->{-watch_sync}->{-regen_fmt};
+ my $fmt = delete $self->{-watch_sync}->{-regen_fmt};
reindex_checkpoint($self, $self->{-watch_sync});
+ $self->{-watch_sync}->{-regen_fmt} = $fmt;
# call event_step => done unless commit_timer is armed
PublicInbox::DS::requeue($self);
sub default_branch () {
state $default_branch = do {
- delete local $ENV{GIT_CONFIG};
- my $r = popen_rd([qw(git config --global init.defaultBranch)]);
+ my $r = popen_rd([qw(git config --global init.defaultBranch)],
+ { GIT_CONFIG => undef });
chomp(my $h = <$r> // '');
close $r;
$h eq '' ? 'refs/heads/master' : $h;
sub _config {
my ($self, @argv) = @_;
- my $env = $self->{env};
- delete local $env->{GIT_CONFIG};
- delete local $ENV{GIT_CONFIG};
+ my %env = (%{$self->{env}}, GIT_CONFIG => undef);
my $cfg = _lei_cfg($self, 1);
my $cmd = [ qw(git config -f), $cfg->{'-f'}, @argv ];
my %rdr = map { $_ => $self->{$_} } (0..2);
- waitpid(spawn($cmd, $env, \%rdr), 0);
+ waitpid(spawn($cmd, \%env, \%rdr), 0);
}
sub lei_config {
my $f = which($cmd->[0]) // die "$cmd->[0]: command not found\n";
my @env;
$opts ||= {};
-
- my %env = $env ? (%ENV, %$env) : %ENV;
+ my %env = (%ENV, $env ? %$env : ());
while (my ($k, $v) = each %env) {
- push @env, "$k=$v";
+ push @env, "$k=$v" if defined($v);
}
my $redir = [];
for my $child_fd (0..2) {
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;
- delete local $ENV{XDG_DATA_HOME};
- delete local $ENV{XDG_CONFIG_HOME};
- local $ENV{GIT_COMMITTER_EMAIL} = 'lei@example.com';
- local $ENV{GIT_COMMITTER_NAME} = 'lei user';
+ local %ENV = %ENV;
+ delete $ENV{XDG_DATA_HOME};
+ delete $ENV{XDG_CONFIG_HOME};
+ $ENV{GIT_COMMITTER_EMAIL} = 'lei@example.com';
+ $ENV{GIT_COMMITTER_NAME} = 'lei user';
my (undef, $fn, $lineno) = caller(0);
my $t = "$fn:$lineno";
require PublicInbox::Spawn;
isnt($?, 0, '$? set properly: '.$?);
}
+{
+ local $ENV{GIT_CONFIG} = '/path/to/this/better/not/exist';
+ my $fh = popen_rd([qw(env)], { GIT_CONFIG => undef });
+ ok(!grep(/^GIT_CONFIG=/, <$fh>), 'GIT_CONFIG clobbered');
+}
+
{ # ->CLOSE vs ->DESTROY waitpid caller distinction
my @c;
my $fh = popen_rd(['true'], undef, { cb => sub { @c = caller } });