]> Sergey Matveev's repositories - public-inbox.git/blobdiff - scripts/import_vger_from_mbox
favor Received: date over Date: header globally
[public-inbox.git] / scripts / import_vger_from_mbox
index 44055ffda5c38bc84c43e5df2bdb530814f25eca..44698870f4f521e2682666a6090a3286bf4ec0f8 100644 (file)
@@ -3,32 +3,57 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use strict;
 use warnings;
-use Email::MIME;
-$Email::MIME::ContentType::STRICT_PARAMS = 0; # user input is imperfect
-use PublicInbox::Git;
+use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
+use PublicInbox::MIME;
+use PublicInbox::Inbox;
+use PublicInbox::V2Writable;
 use PublicInbox::Import;
-my $usage = "usage: $0 NAME EMAIL <MBOX\n";
-chomp(my $git_dir = `git rev-parse --git-dir`);
-my $git = PublicInbox::Git->new($git_dir);
+my $usage = "usage: $0 NAME EMAIL DIR <MBOX\n";
+my $dry_run;
+my $version = 2;
+my %opts = (
+       'n|dry-run' => \$dry_run,
+       'V|version=i' => \$version,
+);
+GetOptions(%opts) or die $usage;
 my $name = shift or die $usage; # git
 my $email = shift or die $usage; # git@vger.kernel.org
-my $im = PublicInbox::Import->new($git, $name, $email);
+my $mainrepo = shift or die $usage; # /path/to/v2/repo
+my $ibx = {
+       mainrepo => $mainrepo,
+       name => $name,
+       version => $version,
+       -primary_address => $email,
+};
+$ibx = PublicInbox::Inbox->new($ibx);
+my $im;
+unless ($dry_run) {
+       if ($version >= 2) {
+               $im = PublicInbox::V2Writable->new($ibx, 1);
+       } else {
+               system(qw(git init --bare -q), $mainrepo);
+               my $git = PublicInbox::Git->new($mainrepo);
+               $im = PublicInbox::Import->new($git, $name, $email, $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;
-       $msg = Email::MIME->new($$msg);
-       $msg = $vger->scrub($msg);
-       $im->add($msg) or
+       my $mime = PublicInbox::MIME->new($msg);
+       $mime = $vger->scrub($mime);
+       return unless $im;
+       $im->add($mime) or
                warn "duplicate: ",
-                       $msg->header_obj->header_raw('Message-ID'), "\n";
+                       $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 $from_strict = qr/^From \S+ +\S+ \S+ +\S+ [^:]+:[^:]+:[^:]+ [^:]+/;
 my $prev = undef;
 while (defined(my $l = <STDIN>)) {
        if ($l =~ /$from_strict/o) {
@@ -44,4 +69,4 @@ while (defined(my $l = <STDIN>)) {
        $msg .= $l;
 }
 do_add($im, \$msg) if $msg;
-$im->done;
+$im->done if $im;