script/public-inbox-compact | 9 +++++++++ diff --git a/script/public-inbox-compact b/script/public-inbox-compact index e69771650797b9a3ff55d1ca7f3755e7f2972799..b8aaa4bd812f7a54ffe7c8ef0af8d3878205b0c4 100755 --- a/script/public-inbox-compact +++ b/script/public-inbox-compact @@ -35,8 +35,16 @@ sub commit_changes ($$$) { my ($im, $old, $new) = @_; my @st = stat($old) or die "failed to stat($old): $!\n"; + + for my $suf (qw(.pipe.lock -journal)) { + my $orig = "$old/over.sqlite3$suf"; + link($orig, "$new/over.sqlite3$suf") and next; + next if $!{ENOENT}; + die "failed to link $orig => $new/over.sqlite3$suf: $!\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"; @@ -58,6 +66,7 @@ while (defined(my $dn = readdir($dh))) { 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" }