]> Sergey Matveev's repositories - public-inbox.git/blobdiff - scripts/import_vger_from_mbox
scripts/import_vger_from_mbox: perform mboxrd or mboxo escaping
[public-inbox.git] / scripts / import_vger_from_mbox
index 6ea2ca5d2de7debee2005956d0a858a770dd467f..6a00fae3fa5ff4414d9dbc2007400c09be606d70 100644 (file)
@@ -4,38 +4,62 @@
 use strict;
 use warnings;
 use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
-use Date::Parse qw/str2time/;
-use Email::MIME;
-$Email::MIME::ContentType::STRICT_PARAMS = 0; # user input is imperfect
-use PublicInbox::Git;
+use PublicInbox::MIME;
+use PublicInbox::Inbox;
+use PublicInbox::V2Writable;
 use PublicInbox::Import;
-my $usage = "usage: $0 NAME EMAIL <MBOX\n";
+my $usage = "usage: $0 NAME EMAIL DIR <MBOX\n";
 my $dry_run;
-my %opts = ( 'n|dry-run' => \$dry_run );
+my $version = 2;
+my $variant = 'mboxrd';
+my %opts = (
+       'n|dry-run' => \$dry_run,
+       'V|version=i' => \$version,
+       'F|format=s' => \$variant,
+);
 GetOptions(%opts) or die $usage;
-chomp(my $git_dir = `git rev-parse --git-dir`);
-my $git = PublicInbox::Git->new($git_dir);
+if ($variant ne 'mboxrd' && $variant ne 'mboxo') {
+       die "Unsupported mbox variant: $variant\n";
+}
 my $name = shift or die $usage; # git
 my $email = shift or die $usage; # git@vger.kernel.org
-my $im = $dry_run ? undef : 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;
-if ($im) {
-       $im->{ssoma_lock} = 0;
-       $im->{path_type} = 'v2';
-}
 
 sub do_add ($$) {
        my ($im, $msg) = @_;
        $$msg =~ s/(\r?\n)+\z/$1/s;
-       $msg = Email::MIME->new($$msg);
-       $msg = $vger->scrub($msg);
+       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;
-       $im->add($msg) or
+       $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