about summary refs log tree commit homepage
path: root/script
diff options
context:
space:
mode:
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-22 03:39:30 +0000
committerEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-03-22 07:57:27 +0000
commit4c5fa84eec85cf406cbcd900f92dc478ed14ea30 (patch)
tree5e4b2b970d510f7910a31f91322fa8d54b7900dc /script
parent4048e3c000ee6659a5754dea697a1b77a8022bbd (diff)
downloadpublic-inbox-4c5fa84eec85cf406cbcd900f92dc478ed14ea30.tar.gz
Allow best-effort regeneration of NNTP article numbers from
cloned git repositories in addition to indexing Xapian Article
numbers will not remain consistent when we add purge support,
though.
Diffstat (limited to 'script')
-rwxr-xr-xscript/public-inbox-index35
1 files changed, 32 insertions, 3 deletions
diff --git a/script/public-inbox-index b/script/public-inbox-index
index cea35738..52d6ba70 100755
--- a/script/public-inbox-index
+++ b/script/public-inbox-index
@@ -23,8 +23,15 @@ if ($@) {
 }
 
 my $reindex;
-my %opts = ( '--reindex' => \$reindex );
+my $regen;
+my $jobs = undef;
+my %opts = (
+        '--reindex' => \$reindex,
+        '--regenerate' => \$regen,
+        '--jobs|j=i' => \$jobs,
+);
 GetOptions(%opts) or die "bad command-line args\n$usage";
+die "--jobs must be positive\n" if defined $jobs && $jobs <= 0;
 
 my @dirs;
 
@@ -93,8 +100,30 @@ sub index_dir {
         if (ref($repo) && ($repo->{version} || 1) == 2) {
                 eval { require PublicInbox::V2Writable };
                 die "v2 requirements not met: $@\n" if $@;
-                my $v2w = PublicInbox::V2Writable->new($repo);
-                $v2w->reindex;
+                my $v2w = eval {
+                        local $ENV{NPROC} = $jobs;
+                        PublicInbox::V2Writable->new($repo);
+                };
+                if (defined $jobs) {
+                        if ($jobs == 1) {
+                                $v2w->{parallel} = 0;
+                        } else {
+                                my $n = $v2w->{partitions};
+                                if ($jobs != $n) {
+                                        warn
+"Unable to respect --jobs=$jobs, inbox was created with $n partitions\n";
+                                }
+                        }
+                }
+                my $mm = $repo->mm;
+                my (undef, $max) = $mm->minmax if $mm;
+                if (defined($max) && !$reindex && !$regen) {
+                        die
+"v2 inboxes may only use --reindex and/or --regenerate once\n".
+"msgmap.sqlite3 is initialized\n";
+                }
+
+                $v2w->reindex($regen);
                 $v2w->done;
         } else {
                 my $s = PublicInbox::SearchIdx->new($repo, 1);