about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiUp.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-10-19 09:33:41 +0000
committerEric Wong <e@80x24.org>2021-10-19 17:29:19 +0000
commitbb0eab1051318528011252866b592735981084a5 (patch)
tree23ccb94338a05522bbb4186e807cae7711cd2a40 /lib/PublicInbox/LeiUp.pm
parent01a049cadb1080698a447479de806755e9bc9342 (diff)
downloadpublic-inbox-bb0eab1051318528011252866b592735981084a5.tar.gz
These can be used to temporarily disable  using certain
externals in case of temporary network failure or mount point
unavailability.
Diffstat (limited to 'lib/PublicInbox/LeiUp.pm')
-rw-r--r--lib/PublicInbox/LeiUp.pm22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm
index fcdd535d..dac0fc28 100644
--- a/lib/PublicInbox/LeiUp.pm
+++ b/lib/PublicInbox/LeiUp.pm
@@ -15,6 +15,14 @@ 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 };
@@ -31,6 +39,20 @@ 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;