X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=script%2Fpublic-inbox-compact;h=e69771650797b9a3ff55d1ca7f3755e7f2972799;hp=79cd039b38b9b7ea50f2fdfdea549d98e9036882;hb=35ff6bb106909b1c1232666a9792156dfa398ea8;hpb=7503aeb540af5afd5cb1b554b3c29f35f5fc918d diff --git a/script/public-inbox-compact b/script/public-inbox-compact index 79cd039b..e6977165 100755 --- a/script/public-inbox-compact +++ b/script/public-inbox-compact @@ -10,7 +10,6 @@ use PublicInbox::Config; use Cwd 'abs_path'; use File::Temp qw(tempdir); use File::Path qw(remove_tree); -use PublicInbox::Spawn qw(spawn); my $usage = "Usage: public-inbox-compact REPO_DIR\n"; my $dir = shift or die $usage; my $config = PublicInbox::Config->new; @@ -36,6 +35,8 @@ $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"; 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"; @@ -53,41 +54,18 @@ if ($v == 2) { $ibx->with_umask(sub { $v2w->lock_acquire; my @parts; - my $skel; while (defined(my $dn = readdir($dh))) { if ($dn =~ /\A\d+\z/) { push @parts, "$old/$dn"; - } elsif ($dn eq 'skel') { - $skel = "$old/$dn"; } elsif ($dn eq '.' || $dn eq '..') { } else { warn "W: skipping unknown Xapian DB: $old/$dn\n" } } close $dh; - my %pids; - - if (@parts) { - my $pid = spawn(['xapian-compact', @parts, "$new/0" ]); - defined $pid or die "compact failed: $?\n"; - $pids{$pid} = 'xapian-compact (parts)'; - } else { - warn "No parts found in $old\n"; - } - if (defined $skel) { - my $pid = spawn(['xapian-compact', $skel, "$new/skel"]); - defined $pid or die "compact failed: $?\n"; - $pids{$pid} = 'xapian-compact (skel)'; - } else { - warn "$old/skel missing\n"; - } - scalar keys %pids or - die "No xapian-compact processes running\n"; - while (scalar keys %pids) { - my $pid = waitpid(-1, 0); - my $desc = delete $pids{$pid}; - die "$desc failed: $?\n" if $?; - } + 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) {