X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiUp.pm;h=dac0fc28788510d98894d05af6c213479202da07;hb=bb0eab1051318528011252866b592735981084a5;hp=c35b2e42d49f98e647063a671a753c685c8c4b74;hpb=8e91ad5eb95dff4070fa32242a59f373df8d9ff5;p=public-inbox.git diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm index c35b2e42..dac0fc28 100644 --- a/lib/PublicInbox/LeiUp.pm +++ b/lib/PublicInbox/LeiUp.pm @@ -15,11 +15,19 @@ my $REMOTE_RE = qr!\A(?:imap|http)s?://!i; # http(s) will be for JMAP sub up1 ($$) { my ($lei, $out) = @_; + # precedence note for CLI switches between lei q and up: + # `lei q --only' > `lei q --no-(remote|local|external)' + # `lei up --no-(remote|local|external)' > `lei.q.only' in saved search + my %no = map { + my $v = $lei->{opt}->{$_}; # set by CLI + (defined($v) && !$v) ? ($_ => 1) : (); + } qw(remote local external); + my $cli_exclude = delete $lei->{opt}->{exclude}; my $lss = PublicInbox::LeiSavedSearch->up($lei, $out) or return; my $f = $lss->{'-f'}; my $mset_opt = $lei->{mset_opt} = { relevance => -2 }; my $q = $mset_opt->{q_raw} = $lss->{-cfg}->{'lei.q'} // - return $lei->fail("lei.q unset in $f"); + die("lei.q unset in $f (out=$out)\n"); my $lse = $lei->{lse} // die 'BUG: {lse} missing'; if (ref($q)) { $mset_opt->{qstr} = $lse->query_argv_to_string($lse->git, $q); @@ -31,12 +39,26 @@ sub up1 ($$) { my $v = $lss->{-cfg}->get_all("lei.q.$k") // next; $lei->{opt}->{$k} //= $v; } + + # --no-(local|remote) CLI flags overrided saved `lei.q.only' + my $only = $lei->{opt}->{only}; + @$only = map { $lei->get_externals($_) } @$only if $only; + if (scalar keys %no && $only) { + @$only = grep(!m!\Ahttps?://!i, @$only) if $no{remote}; + @$only = grep(m!\Ahttps?://!i, @$only) if $no{'local'}; + } + if ($cli_exclude) { + my $ex = $lei->canonicalize_excludes($cli_exclude); + @$only = grep { !$ex->{$_} } @$only if $only; + push @{$lei->{opt}->{exclude}}, @$cli_exclude; + } + delete $lei->{opt}->{only} if $no{external} || ($only && !@$only); for my $k ($lss->BOOL_FIELDS, $lss->SINGLE_FIELDS) { my $v = $lss->{-cfg}->get_1("lei.q.$k") // next; $lei->{opt}->{$k} //= $v; } my $o = $lei->{opt}->{output} // ''; - return $lei->fail("lei.q.output unset in $f (out=$out)") if $o eq ''; + return die("lei.q.output unset in $f (out=$out)\n") if $o eq ''; $lss->translate_dedupe($lei) or return; $lei->{lss} = $lss; # for LeiOverview->new and query_remote_mboxrd my $lxs = $lei->lxs_prepare or return; @@ -124,7 +146,7 @@ sub net_merge_all_done { $lei->{net} = delete($self->{-net_new}) if $self->{-net_new}; $self->wq_close; eval { redispatch_all($self, $lei) }; - warn "E: $@" if $@; + $lei->child_error(0, "E: $@") if $@; } sub _complete_up { # lei__complete hook