about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-08-12 23:40:26 +0000
committerEric Wong <e@80x24.org>2021-08-13 17:53:39 +0000
commit3b97efd2547c78803c060c6f02a7a2a7c9611e60 (patch)
tree76825660381b6ffc133507dec43ad4b49f38916b /lib/PublicInbox
parent5634e8331cb8782944a258a12e1f9857dfb1c8e1 (diff)
downloadpublic-inbox-3b97efd2547c78803c060c6f02a7a2a7c9611e60.tar.gz
Being able to update 1 folder, or all (local) folders is
sometimes too limiting, so just allow updating any subset
of local folders.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/LEI.pm2
-rw-r--r--lib/PublicInbox/LeiUp.pm21
2 files changed, 19 insertions, 4 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 54fac7b4..7d0f63dc 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -178,7 +178,7 @@ our %CMD = ( # sorted in order of importance/use:
         import-before! lock=s@ rsyncable alert=s@ mua=s verbose|v+
         shared color! mail-sync!), @c_opt, opt_dash('limit|n=i', '[0-9]+') ],
 
-'up' => [ 'OUTPUT|--all', 'update saved search',
+'up' => [ 'OUTPUT...|--all', 'update saved search',
         qw(jobs|j=s lock=s@ alert=s@ mua=s verbose|v+ all:s), @c_opt ],
 
 'lcat' => [ '--stdin|MSGID_OR_URL...', 'display local copy of message(s)',
diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm
index 3356d11e..49b558fd 100644
--- a/lib/PublicInbox/LeiUp.pm
+++ b/lib/PublicInbox/LeiUp.pm
@@ -61,11 +61,13 @@ sub up1_redispatch {
 }
 
 sub lei_up {
-        my ($lei, $out) = @_;
+        my ($lei, @outs) = @_;
         $lei->{lse} = $lei->_lei_store(1)->search;
         my $opt = $lei->{opt};
         $opt->{save} = -1;
+        my @local;
         if (defined $opt->{all}) {
+                return $lei->fail("--all and @outs incompatible") if @outs;
                 length($opt->{mua}//'') and return
                         $lei->fail('--all and --mua= are incompatible');
 
@@ -74,7 +76,20 @@ sub lei_up {
                 $opt->{all} eq 'local' or return
                         $lei->fail('only --all=local works at the moment');
                 my @all = PublicInbox::LeiSavedSearch::list($lei);
-                my @local = grep(!m!\Aimaps?://!i, @all);
+                @local = grep(!m!\Aimaps?://!i, @all);
+        } else {
+                @local = @outs;
+        }
+        if (scalar(@outs) > 1) {
+                length($opt->{mua}//'') and return $lei->fail(<<EOM);
+multiple outputs and --mua= are incompatible
+EOM
+                # TODO:
+                return $lei->fail(<<EOM) if grep(m!\Aimaps?://!i, @outs);
+multiple destinations only supported for local outputs (FIXME)
+EOM
+        }
+        if (scalar(@local) > 1) {
                 $lei->_lei_store->write_prepare($lei); # share early
                 # daemon mode, re-dispatch into our event loop w/o
                 # creating an extra fork-level
@@ -89,7 +104,7 @@ sub lei_up {
                 $lei->event_step_init;
                 $op_c->{ops} = { '' => [$lei->can('dclose'), $lei] };
         } else {
-                up1($lei, $out);
+                up1($lei, $local[0]);
         }
 }