-# xcpdb: Xapian copy database, a wrapper around Xapian's copydatabase(1)
-use PublicInbox::InboxWritable;
-use PublicInbox::Xapcmd;
+use strict;
+use v5.10.1;
+use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
+my $help = <<EOF; # the following should fit w/o scrolling in 80x24 term:
+usage: public-inbox-xcpdb [options] INBOX_DIR
+
+ upgrade or reshard Xapian DB(s) used by public-inbox
+
+options:
+
+ --compact | -c run public-inbox-compact(1) after indexing
+ --all copy all configured inboxes
+ --reshard=NUM change number the number of shards
+ --jobs=NUM limit parallelism to JOBS count
+ --verbose | -v increase verbosity (may be repeated)
+ --sequential-shard copy+index Xapian shards sequentially (for slow HDD)
+
+index options (see public-inbox-index(1) man page for full description):
+
+ --no-fsync speed up indexing, risk corruption on power outage
+ --batch-size=BYTES flush changes to OS after a given number of bytes
+ --max-size=BYTES do not index messages larger than the given size
+
+See public-inbox-xcpdb(1) man page for full documentation.
+EOF
+my $opt = { quiet => -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|h)) or die $help;
+if ($opt->{help}) { print $help; exit 0 };
+