]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_mail_sync: hoist out --all handling from export-kw
authorEric Wong <e@80x24.org>
Wed, 9 Jun 2021 07:47:50 +0000 (07:47 +0000)
committerEric Wong <e@80x24.org>
Wed, 9 Jun 2021 10:03:45 +0000 (10:03 +0000)
We'll be reusing it in other commands, too.

lib/PublicInbox/LeiExportKw.pm
lib/PublicInbox/LeiMailSync.pm

index f8579221015e56d5fec023d8e6a5d5bc14257322..671a84df966d2f588614375a34f5b3c314fa5f46 100644 (file)
@@ -94,36 +94,8 @@ EOM
 lei mail_sync uninitialized, see lei-import(1)
 EOM
        my $opt = $lei->{opt};
-       my $all = $opt->{all};
-       if (defined $all) { # --all=<local|remote>
-               my %x = map { $_ => $_ } split(/,/, $all);
-               my @ok = grep(defined, delete(@x{qw(local remote), ''}));
-               my @no = keys %x;
-               if (@no) {
-                       @no = (join(',', @no));
-                       return $lei->fail(<<EOM);
---all=@no not accepted (must be `local' and/or `remote')
-EOM
-               }
-               my (%seen, @inc);
-               my @all = $lms->folders;
-               for my $ok (@ok) {
-                       if ($ok eq 'local') {
-                               @inc = grep(!m!\A[a-z0-9\+]+://!i, @all);
-                       } elsif ($ok eq 'remote') {
-                               @inc = grep(m!\A[a-z0-9\+]+://!i, @all);
-                       } elsif ($ok ne '') {
-                               return $lei->fail("--all=$all not understood");
-                       } else {
-                               @inc = @all;
-                       }
-                       for (@inc) {
-                               push(@folders, $_) unless $seen{$_}++;
-                       }
-               }
-               return $lei->fail(<<EOM) if !@folders;
-no --mail-sync folders known to lei
-EOM
+       if (defined(my $all = $opt->{all})) { # --all=<local|remote>
+               $lms->group2folders($lei, $all, \@folders) or return;
        } else {
                my $err = $lms->arg2folder($lei, \@folders);
                $lei->qerr(@{$err->{qerr}}) if $err->{qerr};
index 558988f3d3fe922121c286384ffab2f84f0aa590..49e521da7e8ad6edd67c7b51f7cad09ae5fdd2fe 100644 (file)
@@ -315,6 +315,42 @@ sub match_imap_url {
                        "E: `$url' is ambiguous:\n\t".join("\n\t", @match)."\n";
 }
 
+# returns undef on failure, number on success
+sub group2folders {
+       my ($self, $lei, $all, $folders) = @_;
+       return $lei->fail(<<EOM) if @$folders;
+--all= not compatible with @$folders on command-line
+EOM
+       my %x = map { $_ => $_ } split(/,/, $all);
+       my @ok = grep(defined, delete(@x{qw(local remote), ''}));
+       my @no = keys %x;
+       if (@no) {
+               @no = (join(',', @no));
+               return $lei->fail(<<EOM);
+--all=@no not accepted (must be `local' and/or `remote')
+EOM
+       }
+       my (%seen, @inc);
+       my @all = $self->folders;
+       for my $ok (@ok) {
+               if ($ok eq 'local') {
+                       @inc = grep(!m!\A[a-z0-9\+]+://!i, @all);
+               } elsif ($ok eq 'remote') {
+                       @inc = grep(m!\A[a-z0-9\+]+://!i, @all);
+               } elsif ($ok ne '') {
+                       return $lei->fail("--all=$all not understood");
+               } else {
+                       @inc = @all;
+               }
+               for (@inc) {
+                       push(@$folders, $_) unless $seen{$_}++;
+               }
+       }
+       scalar(@$folders) || $lei->fail(<<EOM);
+no --mail-sync folders known to lei
+EOM
+}
+
 # map CLI args to folder table entries, returns undef on failure
 sub arg2folder {
        my ($self, $lei, $folders) = @_;