]> 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 abc2d37cc967aaba34afb1b195f28867a2d3fa88..6a00fae3fa5ff4414d9dbc2007400c09be606d70 100644 (file)
@@ -4,20 +4,23 @@
 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::MIME;
 use PublicInbox::Inbox;
 use PublicInbox::V2Writable;
 use PublicInbox::Import;
 my $usage = "usage: $0 NAME EMAIL DIR <MBOX\n";
 my $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;
+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 $mainrepo = shift or die $usage; # /path/to/v2/repo
@@ -46,12 +49,17 @@ 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);
+       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