]> Sergey Matveev's repositories - public-inbox.git/blobdiff - scripts/import_vger_from_mbox
dsdeflate: shorten scope of initial buffer
[public-inbox.git] / scripts / import_vger_from_mbox
index 1edb987a7eb22a60385ca4a0115e79e59fd63f2a..c33e42e45c2823e1e87e9a2139fea60efc132468 100644 (file)
@@ -1,22 +1,20 @@
 #!/usr/bin/perl -w
-# Copyright (C) 2016-2018 all contributors <meta@public-inbox.org>
+# Copyright (C) 2016-2021 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use strict;
 use warnings;
 use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
-use PublicInbox::MIME;
-use PublicInbox::Inbox;
-use PublicInbox::V2Writable;
-use PublicInbox::Import;
-use PublicInbox::MDA;
+use PublicInbox::InboxWritable;
 my $usage = "usage: $0 NAME EMAIL DIR <MBOX\n";
 my $dry_run;
 my $version = 2;
 my $variant = 'mboxrd';
+my $filter = 'PublicInbox::Filter::Vger';
 my %opts = (
        'n|dry-run' => \$dry_run,
        'V|version=i' => \$version,
        'F|format=s' => \$variant,
+       'filter=s' => \$filter,
 );
 GetOptions(%opts) or die $usage;
 if ($variant ne 'mboxrd' && $variant ne 'mboxo') {
@@ -24,61 +22,23 @@ if ($variant ne 'mboxrd' && $variant ne 'mboxo') {
 }
 my $name = shift or die $usage; # git
 my $email = shift or die $usage; # git@vger.kernel.org
-my $mainrepo = shift or die $usage; # /path/to/v2/repo
+my $inboxdir = shift or die $usage; # /path/to/v2/repo
 my $ibx = {
-       mainrepo => $mainrepo,
+       inboxdir => $inboxdir,
        name => $name,
        version => $version,
-       -primary_address => $email,
+       address => [ $email ],
+       filter => $filter,
 };
 $ibx = PublicInbox::Inbox->new($ibx);
-my $im;
 unless ($dry_run) {
        if ($version >= 2) {
-               $im = PublicInbox::V2Writable->new($ibx, 1);
+               require PublicInbox::V2Writable;
+               PublicInbox::V2Writable->new($ibx, 1)->init_inbox(0);
        } else {
-               system(qw(git init --bare -q), $mainrepo);
-               my $git = PublicInbox::Git->new($mainrepo);
-               $im = PublicInbox::Import->new($git, $name, $email, $ibx);
+               system(qw(git init --bare -q), $inboxdir) == 0 or die;
        }
 }
+$ibx = PublicInbox::InboxWritable->new($ibx);
 binmode STDIN;
-my $msg = '';
-use PublicInbox::Filter::Vger;
-my $vger = PublicInbox::Filter::Vger->new;
-
-sub do_add ($$) {
-       my ($im, $msg) = @_;
-       $$msg =~ s/(\r?\n)+\z/$1/s;
-       my $mime = PublicInbox::MIME->new($msg);
-       if ($variant eq 'mboxrd') {
-               $$msg =~ s/^>(>*From )/$1/sm;
-       } elsif ($variant eq 'mboxo') {
-               $$msg =~ s/^>From /From /sm;
-       }
-       $mime = $vger->scrub($mime);
-       return unless $im;
-       $mime->header_set($_) foreach @PublicInbox::MDA::BAD_HEADERS;
-       $im->add($mime) or
-               warn "duplicate: ",
-                       $mime->header_obj->header_raw('Message-ID'), "\n";
-}
-
-# asctime: From example@example.com Fri Jun 23 02:56:55 2000
-my $from_strict = qr/^From \S+ +\S+ \S+ +\S+ [^:]+:[^:]+:[^:]+ [^:]+/;
-my $prev = undef;
-while (defined(my $l = <STDIN>)) {
-       if ($l =~ /$from_strict/o) {
-               if (!defined($prev) || $prev =~ /^\r?$/) {
-                       do_add($im, \$msg) if $msg;
-                       $msg = '';
-                       $prev = $l;
-                       next;
-               }
-               warn "W[$.] $l\n";
-       }
-       $prev = $l;
-       $msg .= $l;
-}
-do_add($im, \$msg) if $msg;
-$im->done if $im;
+$ibx->import_mbox(\*STDIN, $variant);