about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-01-24 17:18:53 -0800
committerEric Wong <e@80x24.org>2021-01-26 18:51:31 +0000
commit29b172ed031f6c48b0cb6219845d8d737ee4b3ae (patch)
treec68784598ed46dc9f6c5979d7b1c4a6e4090d798
parent9dfc0b670fc634b54998c3020f173b82de1915ac (diff)
downloadpublic-inbox-29b172ed031f6c48b0cb6219845d8d737ee4b3ae.tar.gz
This was accidentally clobbered completely in
("lei q: fix JSON overview with remote externals").
There are now more tests to prevent future regressions.
-rw-r--r--lib/PublicInbox/LeiOverview.pm7
-rw-r--r--t/lei.t19
2 files changed, 22 insertions, 4 deletions
diff --git a/lib/PublicInbox/LeiOverview.pm b/lib/PublicInbox/LeiOverview.pm
index 928d66cb..880c7acc 100644
--- a/lib/PublicInbox/LeiOverview.pm
+++ b/lib/PublicInbox/LeiOverview.pm
@@ -203,12 +203,14 @@ sub ovv_each_smsg_cb { # runs in wq worker usually
         my ($self, $lei, $ibxish) = @_;
         my $json;
         $lei->{1}->autoflush(1);
+        my $dedupe = $lei->{dedupe} // die 'BUG: {dedupe} missing';
         if (my $pkg = $self->{json}) {
                 $json = $pkg->new;
                 $json->utf8->canonical;
                 $json->ascii(1) if $lei->{opt}->{ascii};
+                $lei->{ovv_buf} = \(my $buf = '');
         }
-        my $l2m = $lei->{l2m};
+        my $l2m = $lei->{l2m} or $dedupe->prepare_dedupe;
         if ($l2m && !$ibxish) { # remote https?:// mboxrd
                 delete $l2m->{-wq_s1};
                 my $g2m = $l2m->can('git_to_mail');
@@ -241,6 +243,7 @@ sub ovv_each_smsg_cb { # runs in wq worker usually
                 my $git = $ibxish->git; # (LeiXSearch|Inbox|ExtSearch)->git
                 $self->{git} = $git; # for ovv_atexit_child
                 my $g2m = $l2m->can('git_to_mail');
+                $dedupe->prepare_dedupe;
                 sub {
                         my ($smsg, $mitem) = @_;
                         $smsg->{pct} = get_pct($mitem) if $mitem;
@@ -251,6 +254,7 @@ sub ovv_each_smsg_cb { # runs in wq worker usually
                 $lei->{ovv_buf} = \(my $buf = '');
                 sub { # DIY prettiness :P
                         my ($smsg, $mitem) = @_;
+                        return if $dedupe->is_smsg_dup($smsg);
                         $smsg = _unbless_smsg($smsg, $mitem);
                         $buf .= "{\n";
                         $buf .= join(",\n", map {
@@ -274,6 +278,7 @@ sub ovv_each_smsg_cb { # runs in wq worker usually
                 $lei->{ovv_buf} = \(my $buf = '');
                 sub {
                         my ($smsg, $mitem) = @_;
+                        return if $dedupe->is_smsg_dup($smsg);
                         $buf .= $json->encode(_unbless_smsg(@_)) . $ORS;
                         if (length($buf) > 65536) {
                                 my $lk = $self->lock_for_scope;
diff --git a/t/lei.t b/t/lei.t
index 3fd1d1fe..f826a966 100644
--- a/t/lei.t
+++ b/t/lei.t
@@ -17,6 +17,7 @@ my $err_filter;
 my @onions = qw(http://hjrcffqmbrq6wope.onion/meta/
         http://czquwvybam4bgbro.onion/meta/
         http://ou63pmih66umazou.onion/meta/);
+my $json = ref(PublicInbox::Config->json)->new->utf8->canonical;
 my $lei = sub {
         my ($cmd, $env, $xopt) = @_;
         $out = $err = '';
@@ -142,8 +143,7 @@ my $setup_publicinboxes = sub {
                 my ($ibx) = @_;
                 my $im = PublicInbox::InboxWritable->new($ibx)->importer(0);
                 my $V = $ibx->version;
-                my @eml = glob('t/*.eml');
-                push(@eml, 't/data/0001.patch') if $V == 2;
+                my @eml = (glob('t/*.eml'), 't/data/0001.patch');
                 for (@eml) {
                         next if $_ eq 't/psgi_v2-old.eml'; # dup mid
                         $im->add(eml_load($_)) or BAIL_OUT "v$V add $_";
@@ -176,7 +176,7 @@ SKIP: {
         my $mid = '20140421094015.GA8962@dcvr.yhbt.net';
         ok($lei->('q', "m:$mid"), "query $url");
         is($err, '', "no errors on $url");
-        my $res = PublicInbox::Config->json->decode($out);
+        my $res = $json->decode($out);
         is($res->[0]->{'m'}, "<$mid>", "got expected mid from $url");
         ok($lei->('q', "m:$mid", 'd:..20101002'), 'no results, no error');
         like($err, qr/404/, 'noted 404');
@@ -246,6 +246,19 @@ my $test_external = sub {
         # No double-quoting should be imposed on users on the CLI
         $lei->('q', 's:use boolean prefix');
         like($out, qr/search: use boolean prefix/, 'phrase search got result');
+        my $res = $json->decode($out);
+        is(scalar(@$res), 2, 'only 2 element array (1 result)');
+        is($res->[1], undef, 'final element is undef'); # XXX should this be?
+        is(ref($res->[0]), 'HASH', 'first element is hashref');
+        $lei->('q', '--pretty', 's:use boolean prefix');
+        my $pretty = $json->decode($out);
+        is_deeply($res, $pretty, '--pretty is identical after decode');
+
+        for my $fmt (qw(ldjson ndjson jsonl)) {
+                $lei->('q', '-f', $fmt, 's:use boolean prefix');
+                is($out, $json->encode($pretty->[0])."\n", "-f $fmt");
+        }
+
         require IO::Uncompress::Gunzip;
         for my $sfx ('', '.gz') {
                 my $f = "$home/mbox$sfx";