diff options
-rw-r--r-- | lib/PublicInbox/LEI.pm | 38 | ||||
-rw-r--r-- | t/lei.t | 30 |
2 files changed, 13 insertions, 55 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 6073a713..9c3308ad 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -149,8 +149,6 @@ our %CMD = ( # sorted in order of importance/use: 'daemon-kill' => [ '[-SIGNAL]', 'signal the lei-daemon', opt_dash('signal|s=s', '[0-9]+|(?:[A-Z][A-Z0-9]+)') ], 'daemon-pid' => [ '', 'show the PID of the lei-daemon' ], -'daemon-env' => [ '[NAME=VALUE...]', 'set, unset, or show daemon environment', - qw(clear| unset|u=s@ z|0) ], 'help' => [ '[SUBCOMMAND]', 'show help' ], # XXX do we need this? @@ -230,12 +228,6 @@ my %OPTDESC = ( # xargs, env, use "-0", git(1) uses "-z". We support z|0 everywhere 'z|0' => 'use NUL \\0 instead of newline (CR) to delimit lines', -# note: no "--ignore-environment" / "-i" support like env(1) since that -# is one-shot and this is for a persistent daemon: -'clear|' => 'clear the daemon environment', -'unset|u=s@' => ['NAME', - 'unset matching NAME, may be specified multiple times'], - 'signal|s=s' => [ 'SIG', 'signal to send lei-daemon (default: TERM)' ], ); # %OPTDESC @@ -538,24 +530,6 @@ sub lei_daemon_kill { kill($sig, $$) or fail($self, "kill($sig, $$): $!"); } -sub lei_daemon_env { - my ($self, @argv) = @_; - my $opt = $self->{opt}; - if (defined $opt->{clear}) { - %ENV = (); - } elsif (my $u = $opt->{unset}) { - delete @ENV{@$u}; - } - if (@argv) { - %ENV = (%ENV, map { split(/=/, $_, 2) } @argv); - } elsif (!defined($opt->{clear}) && !$opt->{unset}) { - my $eor = $opt->{z} ? "\0" : "\n"; - my $buf = ''; - while (my ($k, $v) = each %ENV) { $buf .= "$k=$v$eor" } - out $self, $buf; - } -} - sub lei_help { _help($_[0]) } # Shell completion helper. Used by lei-completion.bash and hopefully @@ -678,6 +652,7 @@ sub accept_dispatch { # Listener {post_accept} callback }; my %env = map { split(/=/, $_, 2) } split(/\0/, $env); if (chdir($env{PWD})) { + local %ENV = %env; $self->{env} = \%env; $self->{pid} = $client_pid; eval { dispatch($self, split(/\]\0\[/, $argv)) }; @@ -687,6 +662,17 @@ sub accept_dispatch { # Listener {post_accept} callback } } +# for long-running results +sub event_step { + my ($self) = @_; + local %ENV = %{$self->{env}}; + eval {}; # TODO + if ($@) { + say { $self->{sock} } $@; + $self->close; # PublicInbox::DS::close + } +} + sub noop {} # lei(1) calls this when it can't connect @@ -192,7 +192,7 @@ if ($ENV{TEST_LEI_ONESHOT}) { } SKIP: { # real socket - require_mods(qw(Cwd), my $nr = 46); + require_mods(qw(Cwd), my $nr = 105); my $nfd = eval { require IO::FDPass; 1 } // do { require PublicInbox::Spawn; PublicInbox::Spawn->can('send_3fds') ? 3 : undef; @@ -215,34 +215,6 @@ SKIP: { # real socket chomp(my $pid_again = $out); is($pid, $pid_again, 'daemon-pid idempotent'); - ok($lei->(qw(daemon-env -0)), 'show env'); - is($err, '', 'no errors in env dump'); - my @env = split(/\0/, $out); - is(scalar grep(/\AHOME=\Q$home\E\z/, @env), 1, 'env has HOME'); - is(scalar grep(/\AFOO=BAR\z/, @env), 1, 'env has FOO=BAR'); - is(scalar grep(/\AXDG_RUNTIME_DIR=/, @env), 1, 'has XDG_RUNTIME_DIR'); - - ok($lei->(qw(daemon-env -u FOO)), 'unset'); - is($out.$err, '', 'no output for unset'); - ok($lei->(qw(daemon-env -0)), 'show again'); - is($err, '', 'no errors in env dump'); - @env = split(/\0/, $out); - is(scalar grep(/\AFOO=BAR\z/, @env), 0, 'env unset FOO'); - - ok($lei->(qw(daemon-env -u FOO -u HOME -u XDG_RUNTIME_DIR)), - 'unset multiple'); - is($out.$err, '', 'no errors output for unset'); - - ok($lei->(qw(daemon-env -0)), 'show again'); - is($err, '', 'no errors in env dump'); - @env = split(/\0/, $out); - is(scalar grep(/\A(?:HOME|XDG_RUNTIME_DIR)=\z/, @env), 0, 'env unset@'); - - ok($lei->(qw(daemon-env -)), 'clear env'); - is($out.$err, '', 'no output'); - ok($lei->(qw(daemon-env)), 'env is empty'); - is($out, '', 'env cleared'); - ok($lei->(qw(daemon-kill)), 'daemon-kill'); is($out, '', 'no output from daemon-kill'); is($err, '', 'no error from daemon-kill'); |