diff options
author | Eric Wong <e@80x24.org> | 2021-09-02 10:17:57 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-09-02 10:18:37 +0000 |
commit | 4f9c44e3fff9c413fc54050dcc633692d33f6968 (patch) | |
tree | 71d0b48483c5242139e52a484df82406fb3843c1 /lib/PublicInbox | |
parent | 44917fdd24a8bec1125caa21949476f97d8658d4 (diff) | |
download | public-inbox-4f9c44e3fff9c413fc54050dcc633692d33f6968.tar.gz |
This will be needed as we track changes in real-time, especially for "lei index" since there's no storage involved.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/LeiInput.pm | 20 | ||||
-rw-r--r-- | lib/PublicInbox/LeiStore.pm | 7 |
2 files changed, 21 insertions, 6 deletions
diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 88889f45..1b28f36f 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -225,6 +225,7 @@ sub prepare_inputs { # returns undef on error my ($self, $lei, $inputs) = @_; my $in_fmt = $lei->{opt}->{'in-format'}; my $sync = $lei->{opt}->{'mail-sync'} ? {} : undef; # using LeiMailSync + my $may_sync = $sync || $self->{-mail_sync}; if ($lei->{opt}->{stdin}) { @$inputs and return $lei->fail("--stdin and @$inputs do not mix"); @@ -267,12 +268,12 @@ sub prepare_inputs { # returns undef on error } elsif (-d $input_path) { $ifmt eq 'maildir' or return $lei->fail("$ifmt not supported"); - $sync and $input = 'maildir:'. + $may_sync and $input = 'maildir:'. $lei->abs_path($input_path); push @md, $input; } elsif ($self->{missing_ok} && !-e _) { # for "lei rm-watch" on missing Maildir - $sync and $input = 'maildir:'. + $may_sync and $input = 'maildir:'. $lei->abs_path($input_path); } else { return $lei->fail("Unable to handle $input"); @@ -294,7 +295,7 @@ $input is `eml', not --in-format=$in_fmt if ($sync) { $input = $lei->abs_path($mdir) . "/$nc/$bn"; - push @{$sync->{ok}}, $input; + push @{$sync->{ok}}, $input if $sync; } require PublicInbox::MdirReader; } else { @@ -303,15 +304,15 @@ $input is `eml', not --in-format=$in_fmt push @{$sync->{no}}, $input if $sync; push @f, $input; } elsif (-d "$input/new" && -d "$input/cur") { - if ($sync) { + if ($may_sync) { $input = 'maildir:'. $lei->abs_path($input); - push @{$sync->{ok}}, $input; + push @{$sync->{ok}}, $input if $sync; } push @md, $input; } elsif ($self->{missing_ok} && !-e $input) { # for lei rm-watch - $sync and $input = 'maildir:'. + $may_sync and $input = 'maildir:'. $lei->abs_path($input); } else { return $lei->fail("Unable to handle $input") @@ -343,6 +344,13 @@ $input is `eml', not --in-format=$in_fmt require PublicInbox::LeiPmdir; $self->{pmd} = PublicInbox::LeiPmdir->new($lei, $self); } + + # start watching Maildirs ASAP + if ($may_sync && $lei->{sto}) { + grep(!m!\Amaildir:/!i, @md) and die "BUG: @md (no pfx)"; + my $wait = $lei->{sto}->ipc_do('add_sync_folders', @md); + $lei->refresh_watches; + } } $self->{inputs} = $inputs; } diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm index 6c557d99..0fa2d3c0 100644 --- a/lib/PublicInbox/LeiStore.pm +++ b/lib/PublicInbox/LeiStore.pm @@ -537,4 +537,11 @@ sub git_blob_id { # called via LEI->git_blob_id git_sha(1, $eml)->hexdigest; } +# called by lei-daemon before lei->refresh_watches +sub add_sync_folders { + my ($self, @folders) = @_; + my $lms = _lms_rw($self); + for my $f (@folders) { $lms->fid_for($f, 1) } +} + 1; |