-if ($v == 2) {
- require PublicInbox::V2Writable;
- my $v2w = PublicInbox::V2Writable->new($ibx);
- my $xap_v = 'xap'.PublicInbox::Search::SCHEMA_VERSION;
- my $old = "$dir/$xap_v";
- opendir my $dh, $old or die "Failed to opendir $old: $!\n";
- my $new = tempdir('compact-XXXXXXXX', CLEANUP => 1, DIR => $dir);
- $ibx->with_umask(sub {
- $v2w->lock_acquire;
- my @parts;
- while (defined(my $dn = readdir($dh))) {
- if ($dn =~ /\A\d+\z/) {
- push @parts, "$old/$dn";
- } elsif ($dn eq '.' || $dn eq '..') {
- } else {
- warn "W: skipping unknown Xapian DB: $old/$dn\n"
- }
- }
- close $dh;
- die "No Xapian parts found in $old\n" unless @parts;
- my $cmd = ['xapian-compact', @parts, "$new/0" ];
- PublicInbox::Import::run_die($cmd);
- commit_changes($v2w, $old, $new);
- });
-} elsif ($v == 1) {
- require PublicInbox::Import;
- my $im = PublicInbox::Import->new($ibx->git, undef, undef, $ibx);
- my $xap_v = 'xapian'.PublicInbox::Search::SCHEMA_VERSION;
- my $v1_root = "$dir/public-inbox";
- my $old = "$v1_root/$xap_v";
- -d $old or die "$old does not exist\n";
- my $new = tempdir('compact-XXXXXXXX', CLEANUP => 1, DIR => $v1_root);
- $ibx->with_umask(sub {
- $im->lock_acquire;
- PublicInbox::Import::run_die(['xapian-compact', $old, $new]);
- commit_changes($im, $old, $new);
- });
-} else {
- die "Unsupported inbox version: $v\n";
+require PublicInbox::InboxWritable;
+require PublicInbox::Xapcmd;
+my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, $opt);
+unless (@ibxs) { print STDERR $help; exit 1 }
+foreach (@ibxs) {
+ my $ibx = PublicInbox::InboxWritable->new($_);
+ PublicInbox::Xapcmd::run($ibx, 'compact', $opt);