From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id CA9631F8C8 for ; Sun, 19 Sep 2021 22:51:57 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] net_reader: NNTP: remove article numbers from mail_sync folders Date: Sun, 19 Sep 2021 17:51:57 -0500 Message-Id: <20210919225157.24276-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: NNTP article numbers are stored separately from folder names in mail_sync.sqlite3. Recovering from this is optional, worse case is wasting bandwidth refetching some messages. To (optionally) recover from this, use: lei forget-mail-sync $URL_WITH_ARTNUMS Some articles will be refetched on the next import, but duplicate data won't be indexed in Xapian. --- lib/PublicInbox/NetReader.pm | 5 ++++- t/lei-import-nntp.t | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index fbe1ac4f..eab7320e 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -729,7 +729,10 @@ sub _nntp_fetch_all ($$$) { } (defined($num_a) && defined($num_b) && $num_a > $num_b) and return "E: $uri: backwards range: $num_a > $num_b"; - + if (defined($num_a)) { # no article numbers in mail_sync.sqlite3 + $uri = $uri->clone; + $uri->group($group); + } # IMAPTracker is also used for tracking NNTP, UID == article number # LIST.ACTIVE can get the equivalent of UIDVALIDITY, but that's # expensive. So we assume newsgroups don't change: diff --git a/t/lei-import-nntp.t b/t/lei-import-nntp.t index 1eb41e0e..df0594d4 100644 --- a/t/lei-import-nntp.t +++ b/t/lei-import-nntp.t @@ -49,12 +49,16 @@ test_lei({ tmpdir => $tmpdir }, sub { my $end = $high - 1; lei_ok qw(import), "$url/$high"; + lei_ok 'ls-mail-sync'; + is($lei_out, "$url\n", 'article number not stored as folder'); lei_ok qw(q z:0..); my $one = json_utf8->decode($lei_out); pop @$one; # trailing null is(scalar(@$one), 1, 'only 1 result'); local $ENV{HOME} = "$tmpdir/h3"; lei_ok qw(import), "$url/$low-$end"; + lei_ok 'ls-mail-sync'; + is($lei_out, "$url\n", 'article range not stored as folder'); lei_ok qw(q z:0..); my $start = json_utf8->decode($lei_out); pop @$start; # trailing null is(scalar(@$start), scalar(map { $_ } ($low..$end)),