X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=script%2Fpublic-inbox-xcpdb;h=2bfadc092a0ecb4b8941389107b7f45c0d6201cb;hb=1e3c53a422b8d23cff961e43f77ea0a835cdef78;hp=5b66337b47a10870543e599c80516bf84407c32f;hpb=7a097dce831a9ad3a99e50013138e57a0def514e;p=public-inbox.git
diff --git a/script/public-inbox-xcpdb b/script/public-inbox-xcpdb
index 5b66337b..2bfadc09 100755
--- a/script/public-inbox-xcpdb
+++ b/script/public-inbox-xcpdb
@@ -1,19 +1,65 @@
-#!/usr/bin/perl -w
-# Copyright (C) 2019 all contributors
+#!perl -w
+# Copyright (C) 2019-2020 all contributors
# License: AGPL-3.0+
-# xcpdb: Xapian copy database, a wrapper around Xapian's copydatabase(1)
+use strict;
+use v5.10.1;
use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
-use PublicInbox::InboxWritable;
-use PublicInbox::Xapcmd;
+my $usage = 'Usage: public-inbox-xcpdb [options] INBOX_DIR';
+my $help = < -1, compact => 0, fsync => 1 };
+GetOptions($opt, qw(
+ fsync|sync! compact|c reshard|R=i
+ max_size|max-size=s batch_size|batch-size=s
+ sequential_shard|seq-shard|sequential-shard
+ jobs|j=i quiet|q verbose|v
+ blocksize|b=s no-full|n fuller|F
+ all help|?)) or die "bad command-line args\n$usage";
+if ($opt->{help}) { print $help; exit 0 };
+
use PublicInbox::Admin;
PublicInbox::Admin::require_or_die('-search');
-my $usage = "Usage: public-inbox-xcpdb INBOX_DIR\n";
-my $opt = {};
-GetOptions($opt, qw(compact quiet|q)) or die "bad command-line args\n$usage";
-my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV) or die $usage;
-my $cmd = [ \&PublicInbox::Xapcmd::cpdb ];
+
+require PublicInbox::Config;
+my $cfg = PublicInbox::Config->new;
+my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, $opt, $cfg) or
+ die $usage;
+my $idx_env = PublicInbox::Admin::index_prepare($opt, $cfg);
+
+# we only set XAPIAN_FLUSH_THRESHOLD for index, since cpdb doesn't
+# know sizes, only doccounts
+$opt->{-idx_env} = $idx_env;
+
+if ($opt->{sequential_shard} && ($opt->{jobs} // 1) > 1) {
+ warn "W: --jobs=$opt->{jobs} ignored with --sequential-shard\n";
+ $opt->{jobs} = 0;
+}
+
+require PublicInbox::InboxWritable;
+require PublicInbox::Xapcmd;
foreach (@ibxs) {
my $ibx = PublicInbox::InboxWritable->new($_);
- # we rely on --no-renumber to keep docids synched to NNTP
- PublicInbox::Xapcmd::run($ibx, $cmd, undef, $opt);
+ # we rely on --no-renumber to keep docids synched for NNTP
+ PublicInbox::Xapcmd::run($ibx, 'cpdb', $opt);
}