X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=script%2Fpublic-inbox-extindex;h=bee824b1878611691344af7f725063a47fd6b421;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hp=dcb12e5ad55490b29d8af5a423259cd4c7752cc6;hpb=8ef622d408d2e4d98ad3aada8466f539c9ac61ba;p=public-inbox.git diff --git a/script/public-inbox-extindex b/script/public-inbox-extindex index dcb12e5a..bee824b1 100755 --- a/script/public-inbox-extindex +++ b/script/public-inbox-extindex @@ -1,5 +1,5 @@ #!perl -w -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ use strict; use v5.10.1; @@ -17,7 +17,9 @@ usage: public-inbox-extindex [options] [EXTINDEX_DIR] [INBOX_DIR...] --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 --gc perform garbage collection instead of indexing - --dedupe fix prior deduplication errors + --dedupe[=MSGID] fix prior deduplication errors (may be repeated) + --reindex index previously indexed inboxes + --fast only reindex unseen/stale messages --verbose | -v increase verbosity (may be repeated) --dry-run | -n dry-run on --dedupe @@ -26,11 +28,11 @@ See public-inbox-extindex(1) man page for full documentation. EOF my $opt = { quiet => -1, compact => 0, fsync => 1, scan => 1 }; GetOptions($opt, qw(verbose|v+ reindex rethread compact|c+ jobs|j=i - fsync|sync! + fsync|sync! fast dangerous indexlevel|index-level|L=s max_size|max-size=s batch_size|batch-size=s - dedupe gc commit-interval=i watch scan! dry-run|n - all help|h)) + dedupe:s@ gc commit-interval=i watch scan! dry-run|n + all C=s@ help|h)) or die $help; if ($opt->{help}) { print $help; exit 0 }; die "--jobs must be >= 0\n" if defined $opt->{jobs} && $opt->{jobs} < 0; @@ -40,6 +42,7 @@ STDERR->autoflush(1); local $SIG{USR1} = 'IGNORE'; # to be overridden in eidx_sync # require lazily to speed up --help require PublicInbox::Admin; +PublicInbox::Admin::do_chdir(delete $opt->{C}); my $cfg = PublicInbox::Config->new; my $eidx_dir = shift(@ARGV); unless (defined $eidx_dir) { @@ -58,9 +61,10 @@ if ($opt->{gc}) { } else { @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, $opt, $cfg); } -if ($opt->{'dry-run'} && !$opt->{dedupe}) { +$opt->{'dry-run'} && !$opt->{dedupe} and die "E: --dry-run only affects --dedupe\n"; -} +$opt->{fast} && !$opt->{reindex} and + die "E: --fast only affects --reindex\n"; PublicInbox::Admin::require_or_die(qw(-search)); PublicInbox::Config::json() or die "Cpanel::JSON::XS or similar missing\n"; @@ -76,7 +80,7 @@ if ($opt->{gc}) { if ($opt->{all}) { $eidx->attach_config($cfg); } else { - $eidx->attach_inbox($_) for @ibxs; + $eidx->attach_config($cfg, \@ibxs); } if ($opt->{watch}) { $cfg = undef; # save memory only after SIGHUP