* [PATCH 00/11] refining lei up+inspect
@ 2021-10-19 9:33 7% Eric Wong
2021-10-19 9:33 5% ` [PATCH 06/11] lei up: support --exclude=, --no-(external|remote|local) Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-10-19 9:33 UTC (permalink / raw)
To: meta
"lei up" gains some flexibility in dealing with offline
situations. "inspect" is slightly nicer-to-use
11/11 is preparation for "lei fsck"...
Eric Wong (11):
test_common: lazy-require AutoReap
lei up: prefix `remote' and `local' with `o_'
lei: use die for external and query handling
lei up: propagate redispatch_all failure via exit code
lei: conditionally add "\n" to error messages
lei up: support --exclude=, --no-(external|remote|local)
lei: remove unused ->busy time arg
doc: lei: describe lei-daemon-kill and upgrades
lei inspect: add atfork hook
lei inspect: show ISO8601 {rt} and {dt}, too
lei_mail_sync: show non-matching SHA
Documentation/lei-daemon-kill.pod | 29 +++++++++++++++++--
Documentation/lei-overview.pod | 8 +++++-
Documentation/lei-up.pod | 28 ++++++++++++++----
lib/PublicInbox/LEI.pm | 15 +++++-----
lib/PublicInbox/LeiExternal.pm | 15 ++++++++--
lib/PublicInbox/LeiInspect.pm | 11 +++++++
lib/PublicInbox/LeiMailSync.pm | 9 ++++--
lib/PublicInbox/LeiOverview.pm | 6 ++--
lib/PublicInbox/LeiQuery.pm | 27 ++++++-----------
lib/PublicInbox/LeiSavedSearch.pm | 8 +++---
lib/PublicInbox/LeiUp.pm | 48 ++++++++++++++++++++++---------
lib/PublicInbox/LeiXSearch.pm | 7 +++--
lib/PublicInbox/TestCommon.pm | 3 +-
13 files changed, 149 insertions(+), 65 deletions(-)
^ permalink raw reply [relevance 7%]
* [PATCH 06/11] lei up: support --exclude=, --no-(external|remote|local)
2021-10-19 9:33 7% [PATCH 00/11] refining lei up+inspect Eric Wong
@ 2021-10-19 9:33 5% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-10-19 9:33 UTC (permalink / raw)
To: meta
These can be used to temporarily disable using certain
externals in case of temporary network failure or mount point
unavailability.
---
Documentation/lei-up.pod | 28 +++++++++++++++++++++++-----
lib/PublicInbox/LEI.pm | 4 ++--
lib/PublicInbox/LeiExternal.pm | 11 ++++++++++-
lib/PublicInbox/LeiQuery.pm | 15 ++++-----------
lib/PublicInbox/LeiUp.pm | 22 ++++++++++++++++++++++
5 files changed, 61 insertions(+), 19 deletions(-)
diff --git a/Documentation/lei-up.pod b/Documentation/lei-up.pod
index f06ee5eb62b7..8fba0953b1ef 100644
--- a/Documentation/lei-up.pod
+++ b/Documentation/lei-up.pod
@@ -37,11 +37,26 @@ e.g C<1.hour> or C<3.days>
Default: 2.days
-=back
+=item --no-external
-The following options, described in L<lei-q(1)>, are supported.
+=item --no-local
-=over
+=item --no-remote
+
+These disable the use of all externals, local externals, or
+remote externals respectively. They are useful during
+temporary network or mount-point outages.
+
+Unlike C<lei q>, these switches override the original C<lei q --only>
+options saved as C<lei.q.only>.
+
+The combination C<--all=remote --no-remote> is supported for
+offline use in case a user is updating an IMAP folder on localhost.
+
+=item --exclude=LOCATION
+
+As with L<lei-q(1)>, but may also exclude externals originally
+specified via C<lei q --only>.
=item --lock=METHOD
@@ -49,7 +64,10 @@ The following options, described in L<lei-q(1)>, are supported.
=item --mua=CMD
-This option is incompatible with C<--all>.
+C<--lock>, C<--alert>, and C<--mua> are all supported and
+documented in L<lei-q(1)>.
+
+C<--mua> is incompatible with C<--all>.
=back
@@ -62,7 +80,7 @@ and L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta
=head1 COPYRIGHT
-Copyright 2021 all contributors L<mailto:meta@public-inbox.org>
+Copyright all contributors L<mailto:meta@public-inbox.org>
License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 553379e404fc..5b726f71382e 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -178,8 +178,8 @@ our %CMD = ( # sorted in order of importance/use:
shared color! mail-sync!), @c_opt, opt_dash('limit|n=i', '[0-9]+') ],
'up' => [ 'OUTPUT...|--all', 'update saved search',
- qw(jobs|j=s lock=s@ alert=s@ mua=s verbose|v+
- remote-fudge-time=s all:s), @c_opt ],
+ qw(jobs|j=s lock=s@ alert=s@ mua=s verbose|v+ exclude=s@
+ remote-fudge-time=s all:s remote! local! external!), @c_opt ],
'lcat' => [ '--stdin|MSGID_OR_URL...', 'display local copy of message(s)',
'stdin|', # /|\z/ must be first for lone dash
diff --git a/lib/PublicInbox/LeiExternal.pm b/lib/PublicInbox/LeiExternal.pm
index 851715d7099c..30bb1a4579c7 100644
--- a/lib/PublicInbox/LeiExternal.pm
+++ b/lib/PublicInbox/LeiExternal.pm
@@ -105,7 +105,16 @@ sub get_externals {
} else {
die("`$loc' is ambiguous:\n", map { "\t$_\n" } @m, "\n");
}
- ();
+}
+
+sub canonicalize_excludes {
+ my ($lei, $excludes) = @_;
+ my %x;
+ for my $loc (@$excludes) {
+ my @l = get_externals($lei, $loc, 1);
+ $x{$_} = 1 for @l;
+ }
+ \%x;
}
# returns an anonymous sub which returns an array of potential results
diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm
index 56b82acc8b5b..effc572f6aaf 100644
--- a/lib/PublicInbox/LeiQuery.pm
+++ b/lib/PublicInbox/LeiQuery.pm
@@ -95,18 +95,11 @@ sub lxs_prepare {
}
# --external is enabled by default, but allow --no-external
if ($opt->{external} //= 1) {
- my %x;
- for my $loc (@{$opt->{exclude} // []}) {
- my @l = $self->get_externals($loc, 1) or return;
- $x{$_} = 1 for @l;
- }
- my $ne = $self->externals_each(\&prep_ext, $lxs, \%x);
+ my $ex = $self->canonicalize_excludes($opt->{exclude});
+ $self->externals_each(\&prep_ext, $lxs, $ex);
$opt->{remote} //= !($lxs->locals - $opt->{'local'});
- if ($opt->{'local'}) {
- $lxs->{remotes} = \@iremotes if !$opt->{remote};
- } else {
- $lxs->{locals} = \@ilocals;
- }
+ $lxs->{locals} = \@ilocals if !$opt->{'local'};
+ $lxs->{remotes} = \@iremotes if !$opt->{remote};
}
}
($lxs->locals || $lxs->remotes) ? ($self->{lxs} = $lxs) :
diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm
index fcdd535dc118..dac0fc287885 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;
^ permalink raw reply related [relevance 5%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-10-19 9:33 7% [PATCH 00/11] refining lei up+inspect Eric Wong
2021-10-19 9:33 5% ` [PATCH 06/11] lei up: support --exclude=, --no-(external|remote|local) Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).