about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-06-09 07:47:50 +0000
committerEric Wong <e@80x24.org>2021-06-09 10:03:45 +0000
commit9048ddfeb4df5cd3a4a8373de48c7137aed55b29 (patch)
tree55c7cd5c139979328ff1345f036f930782fb5990
parentac2cbae7af54527299dbfe927716ebc3c7ec89de (diff)
downloadpublic-inbox-9048ddfeb4df5cd3a4a8373de48c7137aed55b29.tar.gz
We'll be reusing it in other commands, too.
-rw-r--r--lib/PublicInbox/LeiExportKw.pm32
-rw-r--r--lib/PublicInbox/LeiMailSync.pm36
2 files changed, 38 insertions, 30 deletions
diff --git a/lib/PublicInbox/LeiExportKw.pm b/lib/PublicInbox/LeiExportKw.pm
index f8579221..671a84df 100644
--- a/lib/PublicInbox/LeiExportKw.pm
+++ b/lib/PublicInbox/LeiExportKw.pm
@@ -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};
diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm
index 558988f3..49e521da 100644
--- a/lib/PublicInbox/LeiMailSync.pm
+++ b/lib/PublicInbox/LeiMailSync.pm
@@ -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) = @_;