use strict;
use lib './lib';
+$| = 1;
+
# Important, we want sorting and such to happen like in the C locale: binary,
# without any fancy collation. FIXME: is this actually adequate?
$ENV{"LC_ALL"} = 'C';
use DB_File;
use Storable;
+use File::Path;
use Packages::Config qw( $TOPDIR $DBDIR @ARCHIVES @SUITES @ARCHITECTURES );
&Packages::Config::init( './' );
my @archs = @ARCHITECTURES;
$DBDIR .= "/contents";
+-d $DBDIR || mkpath( $DBDIR );
for my $archive (@archives) { for my $suite (@suites) {
$extra = "|sort" if $SORT_REVERSE_CONCURRENTLY;
open REVERSED, "$extra>$DBDIR/reverse.tmp"
- or die "Failed to open output reverse file";
+ or die "Failed to open output reverse file: $!";
- open CONT, "zcat $filename|$what";
+ open CONT, "zcat $filename|$what"
+ or die $!;
while (<CONT>) {last if /^FILE/mo;}
while (<CONT>) {
my $data = "";
or die "Oops";
}
+
+ my $go = 0;
+ my $suite_mtime = (stat "$DBDIR/reverse_$suite.db")[9];
+ for my $file (glob "$DBDIR/reverse_${suite}_*.txt") {
+ $go = 1 if not defined $suite_mtime
+ or $suite_mtime < (stat $file)[9];
+ }
+ next unless $go;
+
print "Merging reverse path lists for ${suite}...\n";
open MERGED, "sort -m $DBDIR/reverse_${suite}_*.txt |"
rename "$DBDIR/reverse_$suite.db.new", "$DBDIR/reverse_$suite.db";
}}
-#print "Writing databases...\n";
-
-# FIXME: missing filenames due to optimising above. Need to store filenames
-# per-suite/arch, but merge them in the end for better cached searching
-#open FILENAMES, "> $DBDIR/filenames.txt.new";
-#for (keys %filenames) {
-# print FILENAMES "$_\n";
-#}
-#close FILENAMES;
-
-#rename("$DBDIR/filenames.txt.new", "$DBDIR/filenames.txt");
-
# vim: set ts=4