X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=scripts%2Fimport_vger_from_mbox;h=c33e42e45c2823e1e87e9a2139fea60efc132468;hb=0ae89efce11e1e3b10a067c61c5b4cde30fa2b3b;hp=3fa5c77891040e2a3be3c6e6c15d03545d821323;hpb=f5ca5437df27c558b1f2672014ecf43adf3ca2f0;p=public-inbox.git diff --git a/scripts/import_vger_from_mbox b/scripts/import_vger_from_mbox index 3fa5c778..c33e42e4 100644 --- a/scripts/import_vger_from_mbox +++ b/scripts/import_vger_from_mbox @@ -1,70 +1,44 @@ #!/usr/bin/perl -w -# Copyright (C) 2016-2018 all contributors +# Copyright (C) 2016-2021 all contributors # License: AGPL-3.0+ 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::Import; -my $usage = "usage: $0 NAME EMAIL \$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; -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); -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); - my $hdr = $msg->header_obj; - my $date = $hdr->header_raw('Date'); - if ($date) { - eval { str2time($date) }; - if ($@) { - warn "bad Date: $date in ", - $hdr->header_raw('Message-ID'), ": $@\n"; - } +my $inboxdir = shift or die $usage; # /path/to/v2/repo +my $ibx = { + inboxdir => $inboxdir, + name => $name, + version => $version, + address => [ $email ], + filter => $filter, +}; +$ibx = PublicInbox::Inbox->new($ibx); +unless ($dry_run) { + if ($version >= 2) { + require PublicInbox::V2Writable; + PublicInbox::V2Writable->new($ibx, 1)->init_inbox(0); } else { - warn "missing Date: $date in ", - $hdr->header_raw('Message-ID'), ": $@\n"; - my $n = 0; - foreach my $r ($hdr->header_raw('Received')) { - warn "$n Received: $r\n"; - } - warn(('-' x 72), "\n"); + system(qw(git init --bare -q), $inboxdir) == 0 or die; } - return unless $im; - $im->add($msg) or - warn "duplicate: ", - $hdr->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 = )) { - 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 = PublicInbox::InboxWritable->new($ibx); +binmode STDIN; +$ibx->import_mbox(\*STDIN, $variant);