-sub usage { print STDERR "Usage: $usage\n"; exit 1 }
-usage() unless @dirs;
-
-$config->each_inbox(sub {
- my ($ibx) = @_;
-
- for my $i (0..$#dirs) {
- next if $dirs[$i] ne $ibx->{mainrepo};
- $dirs[$i] = $ibx;
- }
-});
-
-foreach my $dir (@dirs) {
- if (!ref($dir) && -f "$dir/inbox.lock") { # v2
- my $ibx = { mainrepo => $dir, name => 'unnamed' };
- $dir = PublicInbox::Inbox->new($ibx);
- }
- index_dir($dir);
-}
-
-sub index_dir {
- my ($repo) = @_;
- if (!ref $repo && ! -d $repo) {
- die "$repo does not appear to be an inbox repository\n";
- }
- if (ref($repo) && ($repo->{version} || 1) == 2) {
- eval { require PublicInbox::V2Writable };
- die "v2 requirements not met: $@\n" if $@;
- my $v2w = eval {
- $jobs and local $ENV{NPROC} = $jobs;
- PublicInbox::V2Writable->new($repo);
- };
- if (defined $jobs) {
- if ($jobs == 0) {
- $v2w->{parallel} = 0;
- } else {
- my $n = $v2w->{partitions};
- if ($jobs != ($n + 1)) {
- warn
-"Unable to respect --jobs=$jobs, inbox was created with $n partitions\n";
- }
- }
- }
- $v2w->index_sync({ reindex => $reindex, prune => $prune });
- } else {
- my $s = PublicInbox::SearchIdx->new($repo, 1);
- $s->index_sync({ reindex => $reindex });
+PublicInbox::Admin::require_or_die(keys %$mods);
+PublicInbox::Admin::progress_prepare($opt);
+for my $ibx (@ibxs) {
+ $ibx = PublicInbox::InboxWritable->new($ibx);
+ if ($opt->{compact} >= 2) {
+ PublicInbox::Xapcmd::run($ibx, 'compact', $compact_opt);