]> Sergey Matveev's repositories - public-inbox.git/blobdiff - script/public-inbox-compact
store less data in the Xapian document
[public-inbox.git] / script / public-inbox-compact
index e69771650797b9a3ff55d1ca7f3755e7f2972799..9f332657e3d3946989940e9d250d61f416ffaade 100755 (executable)
@@ -4,9 +4,9 @@
 use strict;
 use warnings;
 use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
-use PublicInbox::V2Writable;
 use PublicInbox::Search;
 use PublicInbox::Config;
+use PublicInbox::InboxWritable;
 use Cwd 'abs_path';
 use File::Temp qw(tempdir);
 use File::Path qw(remove_tree);
@@ -35,15 +35,20 @@ $ibx->umask_prepare;
 sub commit_changes ($$$) {
        my ($im, $old, $new) = @_;
        my @st = stat($old) or die "failed to stat($old): $!\n";
-       link("$old/over.sqlite3", "$new/over.sqlite3") or die
-               "failed to link {$old => $new}/over.sqlite3: $!\n";
+
+       my $over = "$old/over.sqlite3";
+       if (-f $over) {
+               require PublicInbox::Over;
+               $over = PublicInbox::Over->new($over);
+               $over->connect->sqlite_backup_to_file("$new/over.sqlite3");
+       }
        rename($old, "$new/old") or die "rename $old => $new/old: $!\n";
        chmod($st[2] & 07777, $new) or die "chmod $old: $!\n";
        rename($new, $old) or die "rename $new => $old: $!\n";
        $im->lock_release;
        remove_tree("$old/old") or die "failed to remove $old/old: $!\n";
 }
-
+my @compact = qw(xapian-compact --no-renumber);
 if ($v == 2) {
        require PublicInbox::V2Writable;
        my $v2w = PublicInbox::V2Writable->new($ibx);
@@ -58,13 +63,14 @@ if ($v == 2) {
                        if ($dn =~ /\A\d+\z/) {
                                push @parts, "$old/$dn";
                        } elsif ($dn eq '.' || $dn eq '..') {
+                       } elsif ($dn =~ /\Aover\.sqlite3/) {
                        } 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" ];
+               my $cmd = [@compact, @parts, "$new/0" ];
                PublicInbox::Import::run_die($cmd);
                commit_changes($v2w, $old, $new);
        });
@@ -78,7 +84,7 @@ if ($v == 2) {
        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]);
+               PublicInbox::Import::run_die([@compact, $old, $new]);
                commit_changes($im, $old, $new);
        });
 } else {