]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LEI.pm
lei export-kw: new command to export keywords to Maildirs
[public-inbox.git] / lib / PublicInbox / LEI.pm
index 3e17a614962cdaa195625b11b80634e4213d9440..628908b5bc22ae8e098c4be376fb9aa651e038e4 100644 (file)
@@ -168,7 +168,7 @@ our %CMD = ( # sorted in order of importance/use:
 '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)',
+'lcat' => [ '--stdin|MSGID_OR_URL...', 'display local copy of message(s)',
        'stdin|', # /|\z/ must be first for lone dash
        # some of these options are ridiculous for lcat
        @lxs_opt, qw(output|mfolder|o=s format|f=s dedupe|d=s threads|t+
@@ -180,8 +180,9 @@ our %CMD = ( # sorted in order of importance/use:
        qw(git-dir=s@ cwd! verbose|v+ mail! oid-a|A=s path-a|a=s path-b|b=s),
        @lxs_opt, @c_opt ],
 
-'rediff' => [ '[--stdin|LOCATION...]',
+'rediff' => [ '--stdin|LOCATION...',
                'regenerate a diff with different options',
+       'stdin|', # /|\z/ must be first for lone dash
        qw(git-dir=s@ cwd! verbose|v+ color:s no-color),
        @diff_opt, @lxs_opt, @c_opt ],
 
@@ -232,11 +233,20 @@ our %CMD = ( # sorted in order of importance/use:
 'forget-watch' => [ '{WATCH_NUMBER|--prune}', 'stop and forget a watch',
        qw(prune), @c_opt ],
 
+'index' => [ 'LOCATION...', 'one-time index from URL or filesystem',
+       qw(in-format|F=s kw! offset=i recursive|r exclude=s include|I=s
+       verbose|v+ incremental!),
+        PublicInbox::LeiQuery::curl_opt(), # mainly for --proxy=
+        @c_opt ],
 'import' => [ 'LOCATION...|--stdin',
        'one-time import/update from URL or filesystem',
        qw(stdin| offset=i recursive|r exclude=s include|I=s
        lock=s@ in-format|F=s kw! verbose|v+ incremental! mail-sync!),
        qw(no-torsocks torsocks=s), PublicInbox::LeiQuery::curl_opt(), @c_opt ],
+
+'export-kw' => [ 'LOCATION...|--all',
+       'one-time export of keywords of sync sources',
+       qw(all:s mode=s), @c_opt ],
 'convert' => [ 'LOCATION...|--stdin',
        'one-time conversion from URL or filesystem to another format',
        qw(stdin| in-format|F=s out-format|f=s output|mfolder|o=s lock=s@ kw!),
@@ -1150,7 +1160,7 @@ sub lazy_start {
 (Socket::MsgHdr || Inline::C) missing/unconfigured (narg=$narg);
 
        require PublicInbox::Listener;
-       require PublicInbox::EOFpipe;
+       require PublicInbox::PktOp;
        (-p STDOUT) or die "E: stdout must be a pipe\n";
        open(STDIN, '+>>', $errors_log) or die "open($errors_log): $!";
        STDIN->autoflush(1);
@@ -1164,13 +1174,12 @@ sub lazy_start {
        my $exit_code;
        my $pil = PublicInbox::Listener->new($listener, \&accept_dispatch);
        local $quit = do {
-               pipe(my ($eof_r, $eof_w)) or die "pipe: $!";
-               PublicInbox::EOFpipe->new($eof_r, \&noop, undef);
+               my (undef, $eof_p) = PublicInbox::PktOp->pair;
                sub {
                        $exit_code //= shift;
                        my $lis = $pil or exit($exit_code);
-                       # closing eof_w triggers \&noop wakeup
-                       $listener = $eof_w = $pil = $path = undef;
+                       # closing eof_p triggers \&noop wakeup
+                       $listener = $eof_p = $pil = $path = undef;
                        $lis->close; # DS::close
                        PublicInbox::DS->SetLoopTimeout(1000);
                };