X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FInboxWritable.pm;h=174e4245ab08157714b05f6e19377018023a1fc9;hb=3c39f9c942a6975245fda878e9b957d8d3367662;hp=2f1ca6f0ab2460638eef994c495706ad1a9b3286;hpb=97c6b564fd79e47ae6fca8de273c2aeaf2f5bea5;p=public-inbox.git diff --git a/lib/PublicInbox/InboxWritable.pm b/lib/PublicInbox/InboxWritable.pm index 2f1ca6f0..174e4245 100644 --- a/lib/PublicInbox/InboxWritable.pm +++ b/lib/PublicInbox/InboxWritable.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2018 all contributors +# Copyright (C) 2018-2019 all contributors # License: AGPL-3.0+ # Extends read-only Inbox for writing @@ -19,25 +19,44 @@ use constant { }; sub new { - my ($class, $ibx) = @_; - bless $ibx, $class; + my ($class, $ibx, $creat_opt) = @_; + my $self = bless $ibx, $class; + + # TODO: maybe stop supporting this + if ($creat_opt) { # for { nproc => $N } + $self->{-creat_opt} = $creat_opt; + init_inbox($self) if ($self->{version} || 1) == 1; + } + $self; +} + +sub init_inbox { + my ($self, $shards, $skip_epoch, $skip_artnum) = @_; + # TODO: honor skip_artnum + my $v = $self->{version} || 1; + if ($v == 1) { + my $dir = $self->{inboxdir} or die "no inboxdir in inbox\n"; + PublicInbox::Import::init_bare($dir); + } else { + my $v2w = importer($self); + $v2w->init_inbox($shards, $skip_epoch, $skip_artnum); + } } sub importer { my ($self, $parallel) = @_; - $self->{-importer} ||= eval { + $self->{-importer} ||= do { my $v = $self->{version} || 1; if ($v == 2) { eval { require PublicInbox::V2Writable }; die "v2 not supported: $@\n" if $@; - my $v2w = PublicInbox::V2Writable->new($self); + my $opt = $self->{-creat_opt}; + my $v2w = PublicInbox::V2Writable->new($self, $opt); $v2w->{parallel} = $parallel; $v2w; } elsif ($v == 1) { - my $git = $self->git; - my $name = $self->{name}; - my $addr = $self->{-primary_address}; - PublicInbox::Import->new($git, $name, $addr, $self); + my @arg = (undef, undef, undef, $self); + PublicInbox::Import->new(@arg); } else { $! = 78; # EX_CONFIG 5.3.5 local configuration error die "unsupported inbox version: $v\n";