From fdfd7161a9257b70d65ab55dba4328b4960142d3 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 14 May 2019 02:04:41 +0000 Subject: v1writable: new wrapper which is closer to v2writable Import initialization is a little strange from history, but we also can't change it too much because it's technically a public API which external code may rely on... And we may need to support v1 repos indefinitely. This should make it easier to write tests for both formats. --- lib/PublicInbox/Import.pm | 15 ++++++++++++++- lib/PublicInbox/V1Writable.pm | 34 ++++++++++++++++++++++++++++++++++ lib/PublicInbox/V2Writable.pm | 6 +----- 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 lib/PublicInbox/V1Writable.pm (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index c7755755..12abf399 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -18,12 +18,15 @@ use PublicInbox::MDA; use POSIX qw(strftime); sub new { + # we can't change arg order, this is documented in POD + # and external projects may rely on it: my ($class, $git, $name, $email, $ibx) = @_; my $ref = 'refs/heads/master'; if ($ibx) { $ref = $ibx->{ref_head} || 'refs/heads/master'; $name ||= $ibx->{name}; $email ||= $ibx->{-primary_address}; + $git ||= $ibx->git; } bless { git => $git, @@ -433,6 +436,16 @@ sub run_die ($;$$) { $? == 0 or die join(' ', @$cmd) . " failed: $?\n"; } +sub init_bare { + my ($dir) = @_; + my @cmd = (qw(git init --bare -q), $dir); + run_die(\@cmd); + # set a reasonable default: + @cmd = (qw/git config/, "--file=$dir/config", + 'repack.writeBitmaps', 'true'); + run_die(\@cmd); +} + sub done { my ($self) = @_; my $w = delete $self->{out} or return; @@ -586,7 +599,7 @@ __END__ =head1 NAME -PublicInbox::Import - message importer for public-inbox +PublicInbox::Import - message importer for public-inbox v1 inboxes =head1 VERSION diff --git a/lib/PublicInbox/V1Writable.pm b/lib/PublicInbox/V1Writable.pm new file mode 100644 index 00000000..6ca5db4a --- /dev/null +++ b/lib/PublicInbox/V1Writable.pm @@ -0,0 +1,34 @@ +# Copyright (C) 2019 all contributors +# License: AGPL-3.0+ + +# This interface wraps PublicInbox::Import and makes it closer +# to V2Writable +# Used to write to V1 inboxes (see L). +package PublicInbox::V1Writable; +use strict; +use warnings; +use base qw(PublicInbox::Import); +use PublicInbox::InboxWritable; + +sub new { + my ($class, $ibx, $creat) = @_; + my $dir = $ibx->{mainrepo} or die "no mainrepo in inbox\n"; + unless (-d $dir) { + if ($creat) { + PublicInbox::Import::init_bare($dir); + } else { + die "$dir does not exist\n"; + } + } + $ibx = PublicInbox::InboxWritable->new($ibx); + $class->SUPER::new(undef, undef, undef, $ibx); +} + +sub init_inbox { + my ($self, $partitions, $skip_epoch, $skip_artnum) = @_; + # TODO: honor skip_artnum + my $dir = $self->{-inbox}->{mainrepo} or die "no mainrepo in inbox\n"; + PublicInbox::Import::init_bare($dir); +} + +1; diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 87e8f3eb..b92d8d24 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -517,11 +517,7 @@ sub fill_alternates ($$) { my $all = "$self->{-inbox}->{mainrepo}/all.git"; my @cmd; unless (-d $all) { - @cmd = (qw(git init --bare -q), $all); - PublicInbox::Import::run_die(\@cmd); - @cmd = (qw/git config/, "--file=$all/config", - 'repack.writeBitmaps', 'true'); - PublicInbox::Import::run_die(\@cmd); + PublicInbox::Import::init_bare($all); } @cmd = (qw/git config/, "--file=$pfx/$epoch.git/config", 'include.path', '../../all.git/config'); -- cgit v1.2.3-24-ge0c7