X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiInspect.pm;h=f06cea613e600c266190d33ef2e496cfa05d8987;hb=47d4e53734820b4e;hp=c277520c03b44eeca3717112607964809f10bc2b;hpb=3fcdc90c0ad3fa020ba27a0fee343033c5baec27;p=public-inbox.git diff --git a/lib/PublicInbox/LeiInspect.pm b/lib/PublicInbox/LeiInspect.pm index c277520c..f06cea61 100644 --- a/lib/PublicInbox/LeiInspect.pm +++ b/lib/PublicInbox/LeiInspect.pm @@ -9,15 +9,17 @@ package PublicInbox::LeiInspect; use strict; use v5.10.1; use PublicInbox::Config; +use PublicInbox::MID qw(mids); sub inspect_blob ($$) { my ($lei, $oidhex) = @_; my $ent = {}; if (my $lse = $lei->{lse}) { - my @docids = $lse ? $lse->over->blob_exists($oidhex) : (); + my $oidbin = pack('H*', $oidhex); + my @docids = $lse ? $lse->over->oidbin_exists($oidbin) : (); $ent->{'lei/store'} = \@docids if @docids; - my $lms = $lse->lms; - if (my $loc = $lms ? $lms->locations_for($oidhex) : undef) { + my $lms = $lei->lms; + if (my $loc = $lms ? $lms->locations_for($oidbin) : undef) { $ent->{'mail-sync'} = $loc; } } @@ -27,8 +29,7 @@ sub inspect_blob ($$) { sub inspect_imap_uid ($$) { my ($lei, $uid_uri) = @_; my $ent = {}; - my $lse = $lei->{lse} or return $ent; - my $lms = $lse->lms or return $ent; + my $lms = $lei->lms or return $ent; my $oidhex = $lms->imap_oid($lei, $uid_uri); if (ref(my $err = $oidhex)) { # art2folder error $lei->qerr(@{$err->{qerr}}) if $err->{qerr}; @@ -40,8 +41,7 @@ sub inspect_imap_uid ($$) { sub inspect_sync_folder ($$) { my ($lei, $folder) = @_; my $ent = {}; - my $lse = $lei->{lse} or return $ent; - my $lms = $lse->lms or return $ent; + my $lms = $lei->lms or return $ent; my $folders = [ $folder ]; my $err = $lms->arg2folder($lei, $folders); if ($err) { @@ -184,6 +184,33 @@ sub inspect1 ($$$) { 1; } +sub _inspect_argv ($$) { + my ($lei, $argv) = @_; + my $multi = scalar(@$argv) > 1; + $lei->out('[') if $multi; + while (defined(my $x = shift @$argv)) { + inspect1($lei, $x, scalar(@$argv)) or return; + } + $lei->out(']') if $multi; +} + +sub ins_add { # InputPipe->consume callback + my ($lei) = @_; # $_[1] = $rbuf + if (defined $_[1]) { + $_[1] eq '' and return eval { + my $str = delete $lei->{istr}; + $str =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s; + my $eml = PublicInbox::Eml->new(\$str); + _inspect_argv($lei, [ + 'blob:'.$lei->git_oid($eml)->hexdigest, + map { "mid:$_" } @{mids($eml)} ]); + }; + $lei->{istr} .= $_[1]; + } else { + $lei->fail("error reading stdin: $!"); + } +} + sub lei_inspect { my ($lei, @argv) = @_; $lei->{json} = ref(PublicInbox::Config::json())->new->utf8->canonical; @@ -196,18 +223,20 @@ sub lei_inspect { } $lei->start_pager if -t $lei->{1}; $lei->{1}->autoflush(0); - my $multi = scalar(@argv) > 1; - $lei->out('[') if $multi; - while (defined(my $x = shift @argv)) { - inspect1($lei, $x, scalar(@argv)) or return; + if ($lei->{opt}->{stdin}) { + return $lei->fail(<<'') if @argv; +no args allowed on command-line with --stdin + + require PublicInbox::InputPipe; + PublicInbox::InputPipe::consume($lei->{0}, \&ins_add, $lei); + return; } - $lei->out(']') if $multi; + _inspect_argv($lei, \@argv); } sub _complete_inspect { my ($lei, @argv) = @_; - my $sto = $lei->_lei_store or return; - my $lms = $sto->search->lms or return; + my $lms = $lei->lms or return; my $match_cb = $lei->complete_url_prepare(\@argv); map { $match_cb->($_) } $lms->folders; }